ก่อนอื่น ผู้อ่านควรมีความรู้เบื้องต้นเกี่ยวกับ blockchain ให้ศึกษา Blockchain จากบทความ "Blockchain คืออะไร? อธิบายแบบละเอียด แต่เข้าใจง่าย(มั้ง)" ที่ https://nuuneoi.com/blog/blog.php?read_id=900 ก่อนอ่านบทความนี้

หลักการของ blockchain แบบสั้น ๆ คือ ฐานข้อมูลแบบไม่อาศัยศูนย์กลาง โดยข้อมูลทุกข้อมูลจะถูกกระจายไปยังทุกคนที่ใช้ฐานข้อมูลนี้และไม่มีใครเป็นศูนย์กลางฐานข้อมูลนี้
บทความนี้จะใช้โค้ดจาก https://github.com/daneah/toyblocks เพื่อศึกษาหลักการ blockchain โดยจำลอง blockchain บนเครื่องที่รัน
ขั้นแรกให้ทำ โหลด https://github.com/daneah/toyblocks จาก https://github.com/daneah/toyblocks/archive/master.zip มาไว้ในเครื่องก่อน แตกไฟล์ แล้วเปิดคอมมานด์ไลน์เข้าไปยังโฟลเดอร์ที่เก็บไฟล์
ทำการเรียกใช้งาน python ด้วยคำสั่ง
python
แล้วเรียกใช้ด้วยคำสั่ง
>>> import block >>> import blockchain
สมมติว่า เราต้องการสร้าง
Block
เพื่อเก็บข้อมูล "block1 ^^"โดยข้อมูลที่ต้องการเก็บนี้ เปรียบเสมือน
Transaction
ต้องใช้คำสั่ง
>>> block1 = block.Block('block1 ^^')
Blockchain จะสร้าง block1 โดยมีการหาค่า
Hash
ของข้อมูล แล้วนำค่าดังกล่าวใส่เข้าไปใน block1 ด้วยต่อมาสร้างฐานข้อมูล Blockchain ด้วย chain (ห่วงโซ่ block) ด้วยคำสั่ง
>>> chain = blockchain.Blockchain()
แล้วเพิ่ม
block1
เข้าไปใน chain
>>> chain.add_block(block1)
แต่เมื่อเช็คสถานะการยืนยันของ
block1
สถานะของ
block1
กลับยังไม่ได้รับการยืนยัน โดยดูจากค่า Nonce: None
เพราะต้องผ่าน Miner
เพื่อยืนยันก่อนนำข้อมูลไปใช้ ทำการยืนยัน block1
โดยใช้คำสั่ง>>> block1.mine()
block1
ได้ผ่าน Miner
ยืนยันแล้วโดย
Miner
จะต้องผ่าน Proof of Work
เพื่อหาค่ามายืนยัน block1
เมื่อได้ค่ามาแล้ว นั่นคือ 47786
ทำการจับค่านี้ลงกล่อง แล้วปิดกล่อง block1
เรียบร้อยเมื่อเราเพิ่ม
block
อีก block ชื่อ block2
และ block3
เข้าไปใน chain
แล้วเมื่อเช็คข้อมูล
block
ใน chain
ใช้คำสั่ง chain.blocks
จะเห็นได้ว่า ทุก
block
ที่ต่อกันจะมีการอ้างอิง block
ก่อนหน้า ยกเว้น block1
(อันล่างสุด) จะไม่มีการอ้างอิงจะเกิดอะไรขึ้น หากมีโจรแอบไปเปิด
block2
แก้ไขข้อมูลภายในผลคือ
>>> chain.block_is_broken(block2) True
block2
พัง เพราะค่า Hash
เปลี่ยนเนื่องจากมีการแก้ไขข้อมูล และไม่ได้รับการยืนยันโดย Miner
>>> print(chain.broken) True
เป็นผลทำให้
chain
พังไปด้วยเพราะ ค่า
Hash
ที่ block
ต่อมา คือ block3
ไม่เจอค่า Hash
ของ block2
ที่อ้างอิงเราจึงต้องซ่อม
block2
หรือซ่อม chain
ด้วยคำสั่ง>>> chain.repair_block(block2) Repairing block 4007a33cc2b647e1a4c766ad0b5e2b2e >>> chain.repair >>> chain.block_is_broken(block2) False >>> print(chain.broken) False
เพียงเท่านี้ เราก็สามารถใช้
chain
ต่อไปได้จะเกิดอะไรขึ้น หากมีโจรแอบไปเปิด
block2
แก้ไขข้อมูลภายใน แล้วโจรทำการยืนยันโดยโจรเป็น Miner
เอง และผ่าน Proof of Work
หาค่ามายืนยัน block2
ได้สำเร็จแม้ว่า พอเช็ค
block2
ถึง block2
จะไม่พัง>>> chain.block_is_broken(block2) False
แต่
chain
พัง เนื่องจาก block3
อ้างอิงค่า Hash
ของ block2
ไม่พบ>>> print(chain.broken) True
แม้ว่าโจรจะพยายามซ่อมทั้ง
block2
, block3
และซ่อม chain
ก็ตามแต่ไม่สามารถทำได้ เนื่องจากค่า
Hash
ที่เปลี่ยนไป ส่งผลทำให้ฐานข้อมูล Blockchain พังไปเลยนี่คือเหตุผลว่าทำไม Blockchain ถึงปลอดภัยและและ Proof of Work ถึงสำคัญ เพราะไม่มีโอกาสที่จะไปแก้ไขข้อมูลในกล่อง block ใน chain โดยที่ไม่ทำ block หรือ chain พัง แทบจะเป็นไปไม่ได้เลย
หวังว่าบทความนี้จะช่วยทำให้ผู้อ่านเข้าใจ Blockchain ยิ่งขึ้นจากการปฎิบัติด้วยโค้ด Python
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)