ก่อนอื่น ผู้อ่านควรมีความรู้เบื้องต้นเกี่ยวกับ 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 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)