BlockClock

กลไก

Bitcoin ทำงานยังไงจริง ๆ

ไม่มีศัพท์ที่ไม่จำเป็น ทุกตัวเลขบนหน้านาฬิกาคือค่าจริงของกลไกข้างล่างนี้ตัวใดตัวหนึ่ง หน้านี้คือที่ที่คุณจะรู้ว่าแต่ละตัวกำลังทำอะไรอยู่

ตาม payment หนึ่งรายการ ทีละขั้น

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

  1. 01 · คุณ
  2. 02 · Mempool
  3. 03 · Miners
  4. 04 · Blockchain
การเดินทางของ payment หนึ่งรายการ payment ถูกเซ็นใน wallet กระจายไปยัง peer ที่ต่ออยู่ เข้าคิวใน mempool ตามค่า fee ถูก miner ปิดผนึกลง block แล้วถูก block ถัดไปทับจนฝังลึก ทุกขั้นมีคำอธิบายเป็นข้อความอยู่ใต้แผนภาพนี้ WALLET ของคุณ MEMPOOL MINERS BLOCKCHAIN 0.05 BTC TX ของคุณ PRIVATE KEY เซ็นแล้ว ✓ PEER ที่ต่ออยู่ช่วยกันตรวจ OK OK OK เข้าคิวตาม FEE — สูงสุดก่อน 45 sat/vB 28 sat/vB ของคุณ · 18 sat/vB 2 sat/vB · ยังรออยู่ เดาไปจนกว่า HASH จะขึ้นต้น 0000 9c4a… ✗ 3e71… ✗ b208… ✗ 0000a7… ✓ NONCE: ลอง ทิ้ง แล้วลองใหม่ ผูกกับ BLOCK ก่อนหน้า ก่อนหน้า ของคุณ 1 CONFIRMATION BLOCK ใหม่ทุกอันฝังมันลึกขึ้น ของคุณ 6+ CONFIRMATIONS · จบแล้ว
ขั้นที่ 1 / 6
  1. ขั้นที่ 1

    คุณเซ็น payment

    wallet ของคุณเซ็น transaction ด้วย private key เป็นการพิสูจน์ว่าคุณมีสิทธิ์ใช้เหรียญก้อนนั้น ไม่มีอะไรออกจากเครื่องโดยไม่ได้เซ็น และตัว private key เองไม่เคยออกจากเครื่องเลย

  2. ขั้นที่ 2

    ถูกกระจายเข้าเครือข่าย

    คำสั่งที่เซ็นแล้วถูกส่งต่อไปยัง peer ที่ wallet ของคุณต่ออยู่ ซึ่งอาจอยู่ที่ไหนก็ได้ในโลก ไม่ได้แปลว่าอยู่ใกล้ ๆ ในเชิงกายภาพ แต่ละเครื่องตรวจเองอย่างอิสระว่า ลายเซ็นตรงจริง และเหรียญยังไม่ถูกใช้ไปแล้ว

  3. ขั้นที่ 3

    รออยู่ใน mempool

    transaction ที่ผ่านการตรวจจะมารอที่นี่ เรียงตาม fee ที่เสนอ พื้นที่ใน block มีจำกัด นี่จึงเป็นการประมูล ไม่ใช่คิวตามลำดับเวลาที่มาถึง ตอนนี้มีราว 4,200 รายการรออยู่ และ ราคาสำหรับให้ไปเร็ว ๆ อยู่ที่ประมาณ 9 sat/vB.

  4. ขั้นที่ 4

    miner แข่งกันปิดผนึกมันลง block

    miner รวบ transaction ที่ fee สูงที่สุดมาประกอบเป็น block แล้วเดาตัวเลขไปเรื่อย ๆ จนกว่าลายนิ้วมือของ block จะบังเอิญขึ้นต้นด้วยศูนย์ครบจำนวน มันคือการลองผิดลองถูก ไม่ใช่การคำนวณ — ราว 890 ล้านล้านล้านครั้งต่อวินาที รวมทั้งเครือข่าย นั่นแหละคือ Proof-of-Work

  5. ขั้นที่ 5

    block ต่อเข้ากับ chain

    block ที่ชนะจะอ้างอิงลายนิ้วมือของ block ก่อนหน้า นั่นแหละคือสิ่งที่ทำให้มันเป็น "chain" คุณจะแอบแก้ block เก่าโดยไม่ทำให้ block ที่ตามมาทั้งหมดพังไม่ได้ ทุก node ตรวจ block ใหม่ซ้ำแล้วเก็บสำเนาเดียวกัน ตอนนี้ payment ของคุณมี 1 confirmation

  6. ขั้นที่ 6

    confirmation ทำให้มันจบ

    ทุก block ใหม่ที่ต่อทับจะฝัง block ของคุณลึกลงไปอีก พอถึงราวหกอัน การจะย้อนกลับ ต้องทำงานชนะเครือข่ายที่เหลือทั้งหมด ณ จุดนั้นจึงถือว่า payment จบแล้ว แต่ก่อนจะมี confirmation แรก มันยังไม่จบเลย แค่รออยู่เฉย ๆ

การขุดคือการเดา ไม่ใช่การแก้สมการ

นี่คือจุดที่คำอธิบายเกือบทุกที่พูดผิด miner ไม่ได้กำลังแก้สมการ และไม่ได้ทำงานวิทยาศาสตร์อะไร เขากำลังหมุนรหัสล็อกไปเรื่อย ๆ เฉย ๆ

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

Proof-of-Work อธิบายเป็นรหัสล็อก การเดาสามครั้งแรกได้ลายนิ้วมือที่ไม่ขึ้นต้นด้วยศูนย์จึงไม่ผ่าน ครั้งที่สี่ได้ลายนิ้วมือที่ขึ้นต้นด้วยศูนย์สี่ตัวจึงผ่าน ทั้งกติกาและผลลัพธ์เขียนเป็นข้อความไว้ข้างแผนภาพนี้แล้ว กติกา (เครือข่ายเป็นคนตั้ง) ลายนิ้วมือต้องขึ้นต้นด้วย 0 0 0 0 MINER เดาไปเรื่อย ๆ 9c4a 7f21 b8e0 … ไม่ผ่าน 3e71 0dc9 4a15 … ไม่ผ่าน b208 e6f3 71aa … ไม่ผ่าน 0 0 0 0 a7c1 39e5 … ผ่าน! แต่ละครั้งเปลี่ยนแค่เลขทิ้ง ๆ ตัวเดียวที่เรียกว่า NONCE ไม่เปลี่ยนอย่างอื่นเลย

แล้วทำไปทำไม? เพราะการเดากินไฟ และการเดานั่นแหละคือประเด็นทั้งหมด ถ้าจะเขียนทับ block เก่า คุณต้องเดาใหม่ทั้ง block นั้นและทุก block ที่ตามมา ให้เร็วกว่าที่คนทั้งโลกกำลังต่อ block ใหม่อยู่ ความสิ้นเปลืองนั่นแหละคือตัวล็อก

ชิ้นส่วนที่ขยับ

หกเรื่องนี้ พอเข้าใจครบแล้ว ทุกตัวเลขบนหน้านาฬิกาจะอ่านออกเป็นประโยค

  • Proof-of-Work

    การขุดกับรางวัล

    miner แข่งกันเดาเลขที่ทำให้ลายนิ้วมือของ block ใช้ได้ คนที่ชนะจะได้ต่อ block แล้วรับรางวัลบวกกับ fee ทั้งหมดที่อยู่ข้างใน ความสิ้นเปลืองที่ตั้งใจให้เกิดนี้ คือสิ่งที่ทำให้การโกงมีราคาแพง

  • Difficulty

    ทำไม block ใช้เวลาราวสิบนาที

    ค่า difficulty ที่ปรับตัวเองรักษาให้ block ออกมาเฉลี่ยสิบนาทีครั้ง ทุก 2,016 block มันจะคำนวณใหม่ ถ้าช่วงที่ผ่านมาขุดกันเร็วขึ้น โจทย์ก็ยากขึ้น ไม่มีนาฬิกากลาง มีแค่เลขคณิตที่คุมจังหวะไว้

  • Mempool & fees

    ทำไม fee ขึ้นตอนคนใช้เยอะ

    block มีพื้นที่จำกัด transaction ที่รออยู่จึงต้องเข้าคิวและประมูลกันเป็น sat/vB จ่ายมากกว่าก็แซงคิวได้ วันนี้ราคาสำหรับไปเร็วอยู่ราว 9 ส่วนราคาสำหรับคนไม่รีบอยู่ราว 2.

  • Confirmations

    block ทับกัน นั่นแหละคือความปลอดภัย

    แต่ละ block รวบ transaction ไว้แล้วอ้างอิงถึง block ก่อนหน้า พอของคุณเข้าไปอยู่ใน block ก็ได้ 1 confirmation ทุก block ที่ทับเพิ่มอีกหนึ่ง และการย้อนกลับยากขึ้นแบบทวีคูณ ตอนนี้ chain ยาว 962,524 block แล้ว

  • Halving

    ทำไมถึงมีได้แค่ 21 ล้านเหรียญ

    เหรียญใหม่เกิดจากรางวัล block เท่านั้น และรางวัลนั้นถูกหั่นครึ่งทุก 210,000 block เลขคณิตรับประกันว่าอุปทานจะหยุดที่ 21 ล้าน โดยตอนนี้ขุดออกมาแล้ว 94.9% ของทั้งหมด

  • Consensus

    ทุกคนตรวจทุกคน

    node อิสระหลายพันเครื่องตรวจทุก block ด้วยกติกาชุดเดียวกัน ไม่มีใครคนเดียวเปลี่ยนอุปทาน ย้อน payment หรือแช่แข็ง address ได้ ข้อตกลงร่วมกันนั้นคืออำนาจเดียวที่มีอยู่

ถ้าอยากรู้ลึกกว่านั้น

ทั้งหมดข้างบนคือรูปร่างของมัน ห้าชั้นนี้คือเรื่องเดียวกันแต่เรียกด้วยชื่อจริง สำหรับคนที่อยากไปต่อ เปิดอ่านเฉพาะชั้นที่ต้องการได้เลย

1 · ตัวตนและความเป็นเจ้าของ

ไม่มีชื่อ ไม่มีเลขบัญชีธนาคาร มีแต่วิทยาการรหัสลับ

Private key
ความลับ 256 บิตที่สุ่มขึ้นมา ใช้เซ็น transaction เพื่อพิสูจน์ว่าคุณเป็นเจ้าของเหรียญ
Public key
คำนวณออกมาจาก private key ด้วยคณิตศาสตร์เส้นโค้งวงรี (secp256k1) และย้อนกลับไม่ได้
Address
คือ public key ที่ถูก hash แล้วแปลงเป็นสตริงที่คุณเอาไปให้คนอื่นโอนเข้า — Base58 สำหรับแบบเก่า Bech32 สำหรับ SegWit
2 · transaction กับโมเดล UTXO

มูลค่าเคลื่อนที่เป็นก้อนเหรียญ ไม่ใช่ยอดคงเหลือในบัญชี

Input กับ output
transaction หนึ่งรายการใช้เหรียญที่มีอยู่ (input) แล้วสร้างเหรียญใหม่ (output) ให้ผู้รับ บวกเงินทอนกลับมาหาคุณ ไม่มีช่อง "ยอดคงเหลือ" อยู่ที่ไหนเลย
ล็อกและปลดล็อก
เหรียญแต่ละก้อนถูกล็อกด้วยสคริปต์ ปกติผูกกับ key ของผู้รับ จะใช้มันได้ต้องใส่ลายเซ็นที่ทำให้สคริปต์นั้นผ่าน
ลายเซ็นครอบคลุมแค่ไหน
มีแฟล็กกำหนดว่าลายเซ็นผูกกับส่วนไหนของ transaction บ้าง แบบที่ใช้กันทั่วไปล็อกทั้ง input และ output ทุกตัว จึงแก้อะไรทีหลังไม่ได้
3 · เครือข่ายแบบ peer-to-peer

transaction ที่เซ็นแล้วถูกส่งต่อออกไปทั้งโลก

Mempool
ทุก node ตรวจ transaction ว่าลายเซ็นถูกและเหรียญยังไม่ถูกใช้ แล้วเก็บไว้ในหน่วยความจำเพื่อรอ block
การกระจายต่อ
node ส่งต่อ transaction และ block ไปยัง peer ของตัวเองต่อไป โดย block จะส่งเป็นรหัสสั้น ๆ แทนข้อมูลเต็มเมื่อทำได้ เพื่อประหยัดแบนด์วิดท์และลดความหน่วง
4 · การขุดกับ Proof-of-Work

transaction ถูกรวบรวมแล้วปิดผนึก

Coinbase transaction
transaction แรกของ block ที่ miner เขียนขึ้นเองเพื่อจ่ายรางวัล block บวก fee ทั้งหมดให้ตัวเอง
Block header
ข้อมูล 80 ไบต์ที่สรุป block ทั้งอัน: เวอร์ชัน ลายนิ้วมือของ block ก่อนหน้า สรุปของทุก transaction ข้างใน เวลา ค่าเป้า และ nonce
ตัวงานที่ทำจริง
miner ตามหา nonce ที่ทำให้ลายนิ้วมือของ header ตกลงมาต่ำกว่าหรือเท่ากับค่าเป้า ซึ่งก็คือกติกา "ขึ้นต้นด้วยศูนย์ครบจำนวน" ข้างบน เขียนแบบเป๊ะ ๆ
การปรับ difficulty
ปรับใหม่ทุก 2,016 block หรือราวสองสัปดาห์ เพื่อให้ block ยังเฉลี่ยสิบนาที และขยับได้มากสุดสี่เท่าต่อรอบ ไม่ว่าปรับขึ้นหรือลง
5 · ประวัติชุดไหนคือของจริง

เกิดอะไรขึ้นเมื่อ miner สองคนชนะพร้อมกัน

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

คำที่จะเจอบ่อย

  • Miner

    เครื่องที่แข่งกันเดาลายนิ้วมือเพื่อแลกกับรางวัล block

  • Node

    ใครก็ตามที่รันซอฟต์แวร์ของ Bitcoin คอยตรวจ block และเก็บสำเนา chain ไว้เต็ม ๆ

  • Hash

    ลายนิ้วมือดิจิทัลของข้อมูลชุดหนึ่ง เปลี่ยนข้อมูลไปแค่บิตเดียว ลายนิ้วมือเปลี่ยนทั้งชุด

  • Confirmation

    มี block ทับ transaction ของคุณอยู่กี่อัน ยิ่งมากยิ่งย้อนกลับยาก

ทีนี้ไปดูของจริง

หน้านาฬิกาคือตัวเลขชุดเดียวกันนี้ อัปเดตแบบสดบนจอเดียว