การทำงาน Blockchain ในระบบ Proof of work

สำหรับบล็อกนี้จะอยู่ใน Blockchain Fundamental Series และเป็นการปูทางก่อนเข้าเรื่อง “การคำนวนค่าต่างๆของ Blockchain ในระบบ Proof of work” นั่นเอง ซึ่งเราต้องมาทำความเข้าใจกันก่อนว่า Blockchain ในระบบ Proof of work มีการทำงานอย่างไรก่อนจะเข้าส่วนของการคำนวน

จากบล็อกที่แล้วเราพูดถึง block หรือข้อมูลที่เก็บบน Blockchain หน้าตาเป็นแบบไหนตัวอย่างเป็นอย่างไร ใครยังไม่อ่านแนะนำให้เข้าไปอ่านกันก่อน

งั้นบล็อกเรามาลุยเรื่อง Blockchain กันล้วนๆ 😎

Blockchain

Blockchain example

Blockchain คือ database ประเภทหนึ่ง ซึ่งลักษณะของ database นี้คือการนำ block มาต่อกันเป็น chain เราจึงเรียกมันว่า Blockchain โดยใช้เลข hash อ้างอิงตามภาพด้านบน

จริงๆนิยามของ Blockchain ง่ายๆแค่นี้แหละ ส่วนสำคัญคือหัวข้อถัดไปมากกว่า

การทำงานของ Blockchain

แรกสุดเมื่อ Blockchain ใดๆเกิดขึ้นบนโลกใบนี้ จะมีต้องมี block หนึ่งเกิดขึ้นเสมอ คือ

「 Genesis block 」

เป็น block แรกสุดที่เกิดขึ้นบนสาย Blockchain สร้างขึ้นเพื่อนำไปอ้างอิงใน block ต่อๆไป

ตัวอย่าง Genesis block เช่น

Bitcoin

https://blockchain.info/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

พอ Blockchain ได้สร้าง Genesis block มาเรียบร้อย

ก็รอ transaction จากผู้ใช้ไหลเข้ามา

ซึ่ง transaction ในที่นี้คือข้อมูลที่วิ่งอยู่บน Blockchain เช่น Bitcoin transaction คือข้อมูลการโอน BTC ของผู้ใช้ เป็นต้น และเมื่อผ่านไประยะเวลาหนึ่งจะมีคนนำ transaction ที่เกิดขึ้น(pending transaction) มารวบเป็น block

โดยระยะเวลาขึ้นอยู่กับแต่ละ Blockchain กำหนด เช่น Bitcoin: บอกเราว่า ทุกๆ 10 นาที(โดยประมาณ) Block จะถูกสร้างขึ้น โดยขนาดจะไม่เกิน 1MB

tx1 (1KB) & tx2 (3KB) & ... & tx10000 (1.3KB) ==> Block (< 1 MB)NOTE: tx = transaction

แล้วใครเป็นคนหยิบ pending transactions มาสร้างเป็น block ?

คำตอบคือ

Miner ที่ชนะการแข่ง verify transaction กับ Miner คนอื่นๆ

กระบวนการแข่งนั้นเราเรียกบ้านๆว่า “การขุดเหรียญ” นั่นเอง

แล้วมันแข่ง verify transaction กันอย่างไร?

คำตอบคือ

Miner จะแข่งสุ่มค่า hash ที่ได้จากการเอา data + nonce

โดยการสุ่มค่า nonce ไปเรื่อยๆที่อยู่ใน block จนกว่าจะได้น้อยกว่า “ค่า target” ที่แต่ละ Blockchain กำหนด ใครเจอก่อนก็ชนะไป

http://www.yogh.io/#mine:last

วิธีแบบนี้เราเรียกกันว่า

Proof of Work (PoW) นั่นเอง

หรือ

การ verify transaction แบบ PoW ก็ได้

เพราะใช้แรง hardware ค่อนข้างหนักหน่วงในการแข่งกับ miner คนอื่นๆ

NOTE: ณ ปัจจุบันมีการ verify transaction อยู่ 4 ตัวหลักๆ คือ Proof of Work (PoW) / Proof of Stake (PoS) / Proof of Importance (PoI) / Proof of Capacity (PoC) แต่เราขอ focus แค่ PoW กันก่อน

พอได้ผู้ชนะของสังเวียนนี้ miner คนนั้นจะได้มีสิทธิ์ตรวจสอบ list ของ transaction นั้นว่ามีที่ไปที่มาถูกต้องทุก transaction หรือไม่ และสร้างเป็น block ในเวลาต่อมา ซึ่งการตรวจสอบความถูกต้องใช้เวลาแค่พริบตาเดียว เป็นที่มาว่าทำไม Blockchain ต้องตั้งโจทย์อะไรซักอย่างขึ้นมาเพื่อให้ miner แข่งกัน ยิ่งมีคนแข่งกันมาก Blockchain นั่นก็ยิ่งปลอดภัยมากเท่านั้น

ใครมีเครื่องที่หาค่า hash ได้เร็วกว่าก็ มีโอกาสมากกว่าที่สุ่มเจอค่า hash ได้เร็วกว่า และสามารถหยิบ list ของ transactions มา verify ได้ เป็นที่มาอีกว่าทำไมพวก miner ถึงซื้อเครื่อง hardware แรงๆมากัน ก็เพื่อประการนี้นี่แหละ

ค่า target มาจากไหน?

คำตอบ ขอไว้เล่าบล็อกหน้าเนาะเพราะค่อนข้างยาว 😎

เมื่อ verify block เสร็จเรียบร้อย miner จะนำ block ไปต่อท้าย block ก่อนหน้าเรื่อยๆ โดยแนบค่า hash (ที่ได้จากการแข่ง) เป็นค่าอ้างอิงในแต่ละ block แบบนี้

Miner ได้อะไร จากการเหนื่อยแข่ง verify transaction?

คำตอบคือ reward หรือรางวัลนั่นเอง แต่ในรูปแบบใดก็ต้องแล้วแต่ blockchain นั้นๆ เช่น

Bitcoin บอกว่า

bitcoin_reward = block_reward + (transaction_fee x transaction_count)block_reward ขึ้นอยู่กับจำนวน bitcoin ที่ยังไม่ถูกปล่อยออกมาด้วย 
ตัวระบบจึงจ่ายน้อยลงเรื่อยๆ ณ ปัจจุบันระบบจะจ่าย reward อยู่ที่ 12.5 btc

จากกราฟด้านล้างเส้นสีแดงคือ Bitoin ที่ถูกปล่อยออกมาเวลาผ่านไป 21,000,000 จะค่อยหมดลงจนเข้าใกล้ 0

ส่วนเส้นสีฟ้าคือ block reward ที่จะจ่ายให้ miner จะสังเกตเห็นว่าระบบจะจ่ายน้อยลงเรื่อยๆเพราะ Bitcoin ส่วนกลางเหลือน้อยลงนั่นเอง

ส่วนช่องทางการรับรางวัล miner จะได้รับ รางวัลผ่าน coinbase transaction ซึ่งเป็น transaction แรกสุดของในแต่ละ block

เพราะฉะนั้นทุก block ของ BTC จะมี coinbase transaction เสมอ เพื่อจ่าย reward ให้กับ miner

NOTE: coinbase transaction vs coinbase

Blockchain ถูกเก็บไว้ที่ไหนบ้าง?

คำตอบคือ คือ คอมพิวเตอร์ทุกเครื่องที่ที่รันซอฟแวร์ของ blockchain นั้นๆ (เราจะเรียกมันว่า node)

blockchain network example

ทุกครั้งที่มี transaction เกิดขึ้นบน node ใดๆบนโลก node นั้นจะทำการ broadcast transaction ไปให้ทุกๆ node ที่อยู่ใน network เป็น chain ไปเรื่อยๆในลักษณะของ peer-to-peer network

ซึ่ง node ที่ทำตัวเป็น miner จะทำการเก็บ transaction ลงใน transactions pool เพื่อรอการการ verify สถานะของ transaction จึงเป็น unconfirmed ที่เราเห็นกันบ่อยๆในเว็บ exchange ต่างๆ

เมื่อ miner เริ่มทำการแข่งกัน verify… จะมี miner ที่สามารถทำสำเร็จก่อน และมีสิทธิ์นำ transaction ใน transactions pool ไปสร้างเป็น block ใหม่พร้อมกับแปะ hash แนบไปด้วย (ตามที่เล่าให้ฟังข้างบน) และ broadcast block ไปหาทุก node อีกครั้งเพื่อให้แต่ละ node ตรวจสอบ transaction ทั้งหมดที่อยู่ใน block อีกครั้ง เพื่อกัน miner แก้ไขข้อมูล

ถ้าทุกอย่างเรียบร้อย block นั้นก็จะถูกนำไปใส่ไว้ในlocal blockchain ทุกๆ node ต่อเป็น chain จนเสร็จ

สถานะของ transaction ที่อยู่ใน block จะถูกเปลี่ยนเป็น confirmed แค่นี้ทุกอย่างก็เป็นอันจบการทำงานของ Blockchain

NOTE: ดังนั้นหน้าที่ของ miner จะมีอยู่ 2 หน้าที่ด้วยกันคือ

1. ฟัง transaction ใหม่แล้วนำมาใส่ไว้ใน transactions pool

2. แข่ง verify transaction และนำ transaction มาสร้าง block

ถ้ามีผู้ไม่หวังดีในระบบ Blockchain ต้องการแก้ไขข้อมูล จริงๆแล้วทำได้ไหม?

คำตอบคือ จริงทำได้นะ แต่ค่า hash ของ block จะเปลี่ยนไปทันทีและ block ถัดๆไปก็จะโดนไปด้วยเช่นกัน ทำให้ block ทั้งหมดต้องถูก verify ใหม่ แต่กว่าจะถึงขั้นตอนการ verify ใหม่ได้ก็ต้องโดน node อื่น reject ก่อนแน่นอนตามรูป

สรุปคือ ข้อมูลใน Blockchain จะไม่สามารถูกแก้ไขได้ (ยกเว้นโดน 51% attack)

NOTE: ระบบจะไม่มีความปลอดภัยก็ต่อเมื่อคุณสามารถถือครองระบบได้มากว่า 51% (เราเรียกการโจมตีแบบนี้ว่า 51 % Attack) ก็สามารถจะเปลี่ยนข้อมูลใน transaction ได้ แต่ในความเป็นจริงยากมากๆๆๆๆ

ยกตัวอย่างเช่น ถ้าระบบ Blockchain หนึ่งมีอยู่ 1000 node คุณต้องเข้าไป hack node อย่างน้อย 501 node และเปลี่ยนข้อมูลใน transaction พร้อมๆกัน

เพราะ node อื่นอีกเป็นล้านๆ ที่อยู่บน blockchain

ถือ copy ของ blockchain ที่เดียวกันอยู่

ถ้าอยู่ๆ node อื่นได้รับ block ที่มีการแก้ไขมาก็สามารถไล่เช็คและ reject block นั้นได้แบบสบายๆเลย

ทำให้ระบบ blockchain จึงมีความปลอดภัยที่สูงมากกกกก (ถ้าคนอยู่ในระบบเยอะนะ 🤣)

จบแล้วสำหรับเรื่องที่ควรรู้ทั้งหมดเดี่ยวกับ PoW ใครอ่านมาถึงบล็อกนี้น่าจะพอเห็นภาพรวม รายละเอียดต่างๆเกี่ยวกับ Blockchain มากขึ้นงั้นก่อนไปเราสรุปกันหน่อย

สรุป

  • Blockchain = Database
  • ทุก blockchain จะต้องมี Genesis block เป็น block แรกสุดเสมอ
  • การ verify transaction คือ การแข่ง hash ค่า (data + nonce) โดยการสุ่มค่า nonce ไปเรื่อยๆจนกว่าจะได้น้อยกว่าค่า target ที่แต่ละ blockchain กำหนด ณ เวลานั้นๆ ใครเจอก่อนก็ชนะไป (PoW)
  • หน้าที่ของ miner 1. ฟัง transaction ใหม่แล้วนำมาใส่ไว้ใน transactions pool เพื่อรอการ verify 2. สร้าง block จากการแข่งกัน verify transaction เพื่อให้ได้ reward
  • แก้ไขข้อมูลใน block จริงๆแล้ว ทำได้ แต่ค่า hash ของ block จะเปลี่ยนไปทันทีและ block ทัดๆไปก็จะโดนด้วยทำให้ block ทั้งหมดต้องถูก verify ใหม่ แต่กว่าจะถึงขั้นตอนการ verify ใหม่ได้ต้องโดน node อื่น reject ก่อนแน่นอน
  • การถือครองระบบมากกว่า 51% (เราเรียการโจมตีแบบนี้ว่า 51 % Attack) ก็สามารถจะเปลี่ยนขอมูลใน transaction ได้ แต่ในความเป็นจริงยากมากๆๆๆๆ

วันนี้พอแค่นี้เจอกันบล็อกหน้าเนาะ 😎

กด like กด share ทาง facebook กันได้เลย

เข้าไปติดตามกันได้ https://www.facebook.com/dcen.io/

อย่าลืม 👏 ข้างล่าง และ shareให้มนุษย์ Blockchain คนอื่นด้วยหละ 😎

--

--

Nonthawit 👨🏻‍🚀 (น้ำแข็ง)
Dcen.io

Tech CEO & Co-founder of The Existing Company┃Software Engineer┃Designer ┃Product Coach ┃Public Speaker ┃ Blogger┃Notion Expert