Blockchain คืออะไร? ลองสร้าง Blockchain ของ Bitcoin ขึ้นมาด้วยมือกัน
ตอนผมรู้จักคำว่า Blockchain ใหม่ ๆ ผมจำได้ว่ามันมักจะมาพร้อมกับ Diagram หน้าตาประมาณนี้

แล้วก็มีคำอธิบายประมาณว่า
Blockchain คือเทคโนโลยีบัญชีแบบกระจายศูนย์ ที่จัดเก็บข้อมูลเป็น Block และเชื่อมต่อกันด้วย Cryptography
อืม…ก็นะ
อ่านแล้วดูฉลาดขึ้นมาทันที
แต่กูก็ไม่ได้เข้าใจอะไรเลย 😂
และคำถามก็ยังคงวนเวียนอยู่ในหัวของผมว่า Blockchain คืออะไร?
ข้างใน Blockchain มันมีอะไร?
แล้วมันเอา Block มาต่อกันได้ยังไง?
ใครเป็นคนต่อ?
ใครเป็นคนเก็บ เก็บไว้ที่ไหน?
แล้วทำไมคนชอบพูดว่า Blockchain นั้นไม่สามารถแก้ไขข้อมูลย้อนหลังได้?
แล้วถ้ากูเปิด Notepad ขึ้นมาแล้วเขียน
Block #1
Block #2
Block #3
แล้ววาดลูกศรต่อกัน…
นี่คือ….กูสร้าง Blockchain แล้วหรือยังวะ?
ตอนผมเริ่มศึกษา Bitcoin จริง ๆ ผมถึงเริ่มรู้สึกว่า บางทีเราอาจเรียนเรื่อง Blockchain ผิดทางกันมาตั้งแต่แรก
ซึ่งเวลาที่มีใครสักคนจะสอนวิธีการทำงานของ Bitcoin ก็มักจะเริ่มจากคำว่า Blockchain
แล้วพยายามให้คนที่นั่งเรียนจดจำ Definition ของมัน
แต่ถ้าหากว่าเราเริ่มจากของเล็ก ๆ ก่อนล่ะ…
อย่างเช่น Bitcoin Transaction แค่หนึ่งอัน
แล้วค่อย ๆ เอาของเพิ่มเข้ามาทีละชิ้น
สุดท้าย Blockchain จะโผล่ออกมาตรงหน้าเราเอง
เพราะงั้นวันนี้ผมไม่อยากเริ่มจากการท่องว่า Blockchain คืออะไร
เพราะว่ามันน่าเบื่อและเป็นงานหินสุดๆ
แต่วันนี้เราจะลอง…
สร้าง Blockchain ขึ้นมาด้วยมือของเราเอง
ไม่ต้องเขียน Code
ไม่ต้องรู้เรื่องราวของ Bitcoin Opcode
ไม่ต้องเปิด Bitcoin Core
ไม่ต้องมี ASIC Miner
มีกระดาษกับปากกาก็พอ
แล้วเดี๋ยวเรามาดูกันว่า…
ต้องเอาอะไรมาใส่บ้าง ถึงจะกลายเป็น Bitcoin Blockchain
1. ก่อนจะมี Blockchain เราต้องมี Bitcoin Transaction ก่อน
ลืม Blockchain ไปก่อนครับ เพราะใน Blockchain นั้นอุดมไปด้วย Transaction
แน่นอนว่าสิ่งที่เล็กที่สุดใน Blockchain ก็คือเหล่าบรรกา Transaction ที่ประกอบกันขึ้นมาซึ่งมันเป็นเหมือนดั่ง Cell เล็กๆในร่างกายของมนุษย์ หรือบางทีก็อาจะเหมือน Pixel เล็กๆประกอบกันขึ้นมาจนกลายเป็นภาพใหญ่ๆ 1 ภาพ
Transaction มันก็คือการที่บ่งบอกได้ว่า อีนั่นโอนให้อีนี่ อีนี่โอนให้อีโน่น อีจิ๋มโอนให้อีจอย ไอ้ปาล์มโอนให้อีมุก สิ่งนี้เรียกว่า Transaction
ยกตัวอย่างเช่น ตอนนี้เรามีแค่ Alice กับ Bob
Alice ต้องการส่ง Bitcoin จำนวน 1 BTC ให้ Bob
ถ้าเป็นธนาคาร เราอาจคิดว่าระบบทำประมาณนี้
Alice Balance = Alice Balance - 1 BTC
Bob Balance = Bob Balance + 1 BTC
แต่ Bitcoin ไม่ได้ทำงานด้วย Account Balance แบบนั้น
Bitcoin ใช้ Model ที่เรียกว่า UTXO — Unspent Transaction Output
สมมุติ Alice มี UTXO อยู่สองก้อน

Alice ต้องการส่ง Bob 1 BTC
Wallet Application อาจสร้าง Transaction ประมาณนี้

ตรงนี้เราเคยลงหลุมกระต่ายกันมาแล้วในบท Bitcoin Transaction และ UTXO คืออะไร
และสิ่งสำคัญสำหรับวันนี้คือ…
ตอนนี้เรามี Transaction แล้วหนึ่งอัน
แค่นั้นพอ
ยังไม่ต้องมี Blockchain
ยังไม่ต้องมี Block
ยังไม่ต้องมี Mining
ขอแค่มีแค่ Transaction ที่บอกว่า UTXO เก่าก้อนไหนกำลังถูก Spend และกำลังสร้าง Output ใหม่อะไรขึ้นมาแค่นั้นพอ
ทีนี้ลองนึกภาพว่าไม่ได้มีแค่ Alice เท่านั้นที่อยากจะโอน Bitcoin
แต่ให้จินตนาการว่ามีคนใช้ Bitcoin อยู่ทั่วโลก
คนนี้ส่งให้คนนั้น
คนนั้นส่งให้อีกคน
Transaction มันก็จะวิ่งเข้ามาเรื่อย ๆ

เอาล่ะ
ของเริ่มเยอะแล้ว
จะทำยังไงต่อ?
2. Transaction เยอะชิบหายขนาดนี้ เราจะเอาไปไว้ตรงไหน?
ตรงนี้ Miner จะเริ่มเข้ามาเกี่ยวข้องละ
ซึ่ง Miner ก็จะสร้างสิ่งที่เรียก ว่า Candidate Block หรือ Block Template ที่เหล่าบรรดา Miner ทั้งหลายกำลังพยายามจะขุด
ข้างในมันก็จะมี Transaction จำนวนหนึ่งที่ Miner เลือกเข้ามาใน Template
ซึ่งมันก็จะมีหน้าตาประมาณนี้

แน่นอนว่า Transaction แรกจะพิเศษกว่าเพื่อนหน่อย
มันเรียกว่า Coinbase Transaction
และอย่าไปสับสนกับบริษัท Exchange ที่ชื่อ Coinbase นะ เพราะมันคนละอย่างกัน
Coinbase Transaction ของ Bitcoin จะมีสิ่งที่เรียกว่า Coinbase Input แบบพิเศษ ซึ่งไม่ได้อ้างอิง UTXO อันก่อนหน้าเหมือนของ Transaction ทั่วไป
มันเป็น Transaction ที่ Miner ใช้ Claim Block Subsidy และรวบยอด Transaction Fees ภายใต้กฎ Consensus ที่ Bitcoin Node จะตรวจอีกที (เป็นไง? พิเศษมะ?)
ตรงนี้สำคัญนะครับ
Miner ไม่ได้พิมพ์ว่า
Reward = 1,000 BTC
แล้วบอกกับคนในระบบว่า
วันนี้กูเหนื่อย กูขอเยอะหน่อยนะ คนกันเอง
มันไม่ได้ อีดอก!!!
ถ้า Coinbase Transaction สร้าง Bitcoin เกินกว่าที่ Consensus Rules อนุญาต แน่นอนว่า Block นั้นก็ Invalid และ Node ที่ตรวจตามกฎจะไม่ยอมรับมัน
ซึ่งตอนนี้เราเลยมี
Transaction หลายอัน
ถูกเอามารวมกันอยู่ใน Candidate Block
แต่เรายังมีปัญหาอยู่อย่างนึงนั่นก็คือ
ใน Block อาจมี Transaction เป็นพัน ๆ รายการ
แล้วเราจะเอาข้อมูล Transaction ทั้งก้อนนี้ไปผูกเข้ากับ Block Header ยังไง?
เพราะอย่าลืมนะว่าใน Blockchain นั้นจะถูกแบ่งออกเป็น 2 ส่วนหลักๆ นั่นก็คือ Block Header กับ Transaction Detail
ทีนี้คำถามก็คือเราจะเอา Transaction ทุกอันยัดเข้า Header เลยเหรอ?
ซึ่งมันเป็นไปไม่ได้ เพราะถ้าหากมึงเอาทุกสิ่งทุกอย่างทุก Transaction ยัดเข้าไปใน Block Header แล้วล่ะก็ มึงลองนึกสภาพดูนะว่า Miner จะต้องเอาทั้งหมดนี่ไป Hash ทุกรอบ โอ้โหหหหหหห ผมบอกได้เลยว่า ชิบหายการช่าง แน่นอน เนื่องจากข้อมูลมหาศาล ระบบจะช้าชิบหายจนล่มได้เลยนะมึง
ตรงนี้เราต้องรู้จักต้นไม้ประหลาดต้นนึงก่อน
3. Merkle Tree คืออะไร? มันทำให้ Transaction เป็นพันย่อให้เหลือค่าเดียวได้ยังไง?
ผมสมมุติให้ Block ของเรามี Transaction แค่ 4 ตัวก่อน ดังนี้

จากนั้นเราเอา Transaction แต่ละตัวไปทำการ Hash
มันก็จะได้ประมาณนี้

จากนั้นเอา Hash มาจับคู่กัน

แล้วเอาสองตัวนั้นมารวมและ Hash ต่อ

ถ้าวาดเป็นต้นไม้จะประมาณนี้

ภาพด้านบนนี่คือ Merkle Tree
มันเป็นค่าที่อยู่บนสุดเรียกว่า
Merkle Root
มันทำหน้าที่เป็น Cryptographic Commitment ทั้งหมดของ Transaction ทั้งหมดใน Block นั้น
พูดแบบชาว Engineer หน่อยนึงก็คือ…
มันให้ความรู้สึกคล้ายๆกับ Checksum ของ Communication Protocol ที่เอาไว้สะท้อนข้อมูลทั้งก้อนว่า Data ทั้ง Set นี้มีความถูกต้องรึเปล่า
แต่ ได้โปรดอย่าเข้าใจว่า Merkle Root นั้นเป็น Checksum ธรรมดาๆนะ
เพราะโครงสร้าง Merkle Tree ทำอะไรได้มากกว่าการตรวจ Error ระหว่าง Communication
สิ่งที่เราต้องการสำหรับวันนี้ก็คือ :
เราต้องการตัว Check ตัวนึงที่จะสามารถบ่งบอกได้ว่า ถ้า Transaction ข้างในเปลี่ยน
Hash ของมันก็ต้องเปลี่ยนตามไปด้วย เรียกได้ว่าเปลี่ยนกันทั้งยวง กระทบกันทั้งพวง
↓
เมื่อข้อมูลใน Transaction มันเปลี่ยน ก็จะเป็นผลทำให้ Parent Hash เปลี่ยน
↓
และสุดท้าย…
Merkle Root ก็ต้องเปลี่ยน
สมมุติ TX2 เปลี่ยนแค่ข้อมูลบางส่วน

แน่นอนว่าค่า Root ข้างบนก็ต้องเปลี่ยนตาม
ตอนนี้เราเอา Transaction เป็นพัน ๆ รายการมาสรุปให้มีค่า Root ที่ Commit เข้ากับชุด Transaction ทั้งก้อนได้แล้ว
อีแมง Merkle Root เนี่ย พูดง่ายมันเหมือนกับแหที่เอาไว้คลุม Transaction ทั้งหมดไว้ไม่ให้กระดุกกระดิกนั่นเอง
และ Merkle Root ตัวนี้นี่แหละ…
กำลังจะถูกเอาไปใส่ในของสำคัญมากอีกชิ้น
4. Blockchain คืออะไรเริ่มเห็นแล้วใช่มั้ย? : จากนี้เรามาสร้าง Block Header กันเถอะ
ตอนนี้เรามี Transaction ละ
แล้วเราก็มี Merkle Tree ละ
และจาก Merkle Tree เราก็ได้มี Merkle Root ละ
ต่อไปเราจะสร้าง Block Header นะจ๊ะสาว
ใน Bitcoin Block Header นั้นมีขนาด 80 bytes แค่นั้นเอง
และมีข้อมูลหลัก 6 Field ด้วยกัน หรือบางคนอาจจะเรียกว่า 6 Variable ก็ได้ ดังนี้

ถ้าอ่าน Blog Bitcoin Mining คืออะไร? มาแล้ว ตรงนี้น่าจะเริ่มคุ้นๆนะ
มาดูทีละตัวแบบเร็ว ๆ กันเถอะ
ตัวแปรที่ชื่อ Version
อันนี้เป็นตัวแปรที่เอาไว้บอกข้อมูล Version Bits ที่เกี่ยวข้องกับการตีความหรือเอาไว้ส่งสัญญาณกฎบางอย่างของ Block
ตัวแปรที่ชื่อ Previous Block Hash
Hash ของ Block ก่อนหน้า อันนี้สำคัญมากๆเลยเพราะมันทำให้เกิดคำว่า “Chain” อย่างแท้จริง
จำตัวนี้ไว้
เดี๋ยวแม่งเป็นพระเอกของเรื่อง
ตัวแปรที่ชื่อ Merkle Root
ค่าที่ Commit เข้ากับชุด Transaction ใน Block ที่เราเพิ่งสร้างจาก Merkle Tree เพื่อควบคุมไม่ให้ Transaction ใน Block ดิ้นไปดิ้นมา
ตัวแปรที่ชื่อ Timestamp
เวลาที่ Miner ใส่ไว้ใน Header ภายใต้กฎที่ Bitcoin ใช้ตรวจ Timestamp
ตัวแปรที่ชื่อ nBits
อันนี้เป็นค่า Compact representation ของ Target ซึ่งตัวนี้สำคัญมากสำหรับพวก Miner หรือเหมืองขุด
ตัวแปรที่ชื่อ Nonce
ค่าขนาด 32-bit ที่ Miner จะเปลี่ยนไปเรื่อย ๆ เพื่อสร้าง Candidate Header Hash ใหม่ ๆ
ตอนนี้เราจึงได้ของหน้าตาประมาณนี้

แค่ 80 bytes เอง
ซึ่งไอ่ของชิ้นเล็ก ๆ ตรงนี้นี่แหละที่ Miner เอาไปกระหน่ำ Hash กันทั้งโลกอย่างเมามันส์
5. เอา Block Header ไป Hash
Bitcoin นั้นใช้ระบบ Proof of Work ที่เรียกว่า SHA-256d
หรือพูดง่าย ๆ ว่า
Double SHA-256

สมมุติว่าเราเอา Block Header ไปเข้า Double Hash แล้วได้ค่า 8fa27193…
ซึ่ง Miner ไม่ได้ถามว่า Hash เลขสวยไหม ?
ไม่ได้ถามว่ามีเลข 7 ซึ่งเป็นเลขมงคลหรือเปล่า ?
มันเอาค่า Hash ไปเทียบกับ Target
เงื่อนไขและ Concept ก็คือ

ถ้าผ่าน…
เจอ Candidate Proof of Work ที่เข้าเงื่อนไขแล้ว เย้ ไชโย Miner คนนั้นก็รับ Bitcoin ที่สร้างขึ้นใหม่ไปเลยเป็นจำนวน 50 BTC (ซึ่งเลข 50 BTC นั้นจะลดลงครึ่งนึงทุกๆ 4 ปี)
แล้วถ้าไม่ผ่านล่ะ…
ทำไง?
6. Hash ไม่ผ่าน? ก็ลองใหม่ดิ
นี่คือส่วนที่คนชอบบอกว่า
Miner กำลังแก้โจทย์คณิตศาสตร์ที่ซับซ้อน
ฟังดูเหมือนเครื่อง ASIC Miner กำลังนั่งแก้ Calculus อยู่
แต่จริง ๆ แล้วมันไม่ใช่แบบนั้น
Miner กำลังลอง Candidate Block Header จำนวนมหาศาล
เปลี่ยน Nonce
Hash
ไม่ผ่าน
เปลี่ยน Nonce
Hash อีกที
ไม่ผ่าน
เปลี่ยน Nonce
Hash อีกรอบ
ไม่ผ่าน

แน่นอนของจริงไม่ได้จำกัดอยู่แค่การไล่ Nonce อย่างเดียว
เนื่องจาก Nonce ใน Header มีเพียง 32-bit เท่านั้น ซึ่งมีความเป็นไปได้เพียง 4,294,967,295 ค่าเท่านั้น
Miner ก็มีวิธีการที่จะสามารถเปลี่ยนข้อมูลอื่นๆที่ทำให้ Candidate Header เปลี่ยนได้ เช่นข้อมูลใน Coinbase Transaction ซึ่งมักมี extra nonce อยู่ในนั้นเสมอ และเมื่อ Coinbase Transaction เปลี่ยน
TXID และ transaction data commitment ที่เกี่ยวข้องก็เปลี่ยน
↓
Merkle Root เปลี่ยน
↓
Block Header เปลี่ยน
↓
มีพื้นที่ให้ลอง Hash ชุดใหม่ต่อ
นี่คือสิ่งที่เรียกว่า Proof of Work !!!
นี่คือการสร้าง Proof ที่แพงมากๆ
แต่การตรวจสอบ Proof ถูกมากๆๆๆๆๆ
Miner อาจต้องลอง Hash จำนวนมหาศาลเพื่อหา Proof ให้เจอ
แต่ Node ที่ได้รับ Block มานั้น…
แค่คำนวณและตรวจตามสมการก็รู้ได้อย่างรวดเร็วว่า Proof of Work ผ่านหรือไม่ ?
นี่เป็นคุณสมบัติที่สวยงามมากของระบบ Bitcoin
Hard to produce.
Easy to verify.
7. เมื่อ Miner เจอ Hash แล้ว — มันจะสามารถควบคุม Bitcoin ทั้งโลกได้หรือยัง?
ไม่ครับ ไม่มีทาง ไม่มีวัน
นี่เป็นจุดที่ผมอยากเน้นมากๆ
เมื่อ Miner เจอ Block Header Hash ที่ผ่าน Target แล้ว
มันไม่ได้แปลว่า Miner จะทำอะไรก็ได้นะ
ซึ่งสิ่งที่ Miner ทำได้ก็เพียงแค่ต้องประกาศให้กับ Node ทั่วโลกได้รับรู้ว่า
กูขุดเจอแล้ว Block นี้ถูกต้องตามกฎหมายแห่ง Bitcoin ทุกประการ
ขั้นตอนนี้แหละคือขั้นตอนที่ Miner กำลัง เสนอ Block ให้ Network Bitcoin Node ที่ได้รับ Block จะต้องตรวจมันด้วยตัวเองอีกรอบหนึ่ง เพราะ Bitcoin Node ไม่ได้เชื่อ Miner เสมอไป (ก็ Code ของ Node มันเขียนไว้แบบนั้นอ่ะ)
เช่นตรวจว่า
Transaction Format ถูกต้องไหม ?
Inputs อ้างอิงในสิ่งที่ Spend ได้หรือไม่ ?
มี Double Spend หรือเปล่า ?
Scripts / Witness ผ่านไหม ?
Signature ของแต่ละ Transaction ถูกต้องไหม ?
Transaction สร้างมูลค่าเกินกว่า Input หรือเปล่า ?
Coinbase Claim เกิน Subsidy + Fees ที่อนุญาตไหม ?
Merkle Root ถูกต้องไหม ?
Block Structure ถูกต้องไหม ?
Proof of Work น้อยกว่าหรือเท่ากับ Target จริงๆไหม ?
Miner ได้กำหนดค่า Target เป็นไปตามกฏของ Difficulty Adjustment หรือเปล่า ?
และยังมีกฎ Consensus อื่น ๆ อีกเพียบ
และเมื่อ Miner บอกว่า
เชื่อกูเถอะ พวกกัน
Node จะตอบว่า
พี่ไม่เชื่อ 😂
นี่แหละแนวคิดเดียวกับที่เราเจอใน Blog Bitcoin Node คืออะไร
Don’t Trust. Verify.
เพราะงั้น Miner กับ Node มีหน้าที่คนละอย่าง
ถ้าพูดแบบง่าย ๆ เลยก็คือ :
Miner → เสนอ Block + Proof of Work
Node → ตรวจว่า Block นั้น Valid ตามกฎที่ตัวเองบังคับใช้หรือไม่ ?
ถ้า Block Invalid
Node ก็ Reject ทิ้งไป (Miner อุตส่าห์สุ่มจนเจอ Block แล้วแทนที่จะได้ 50 BTC แต่ดันเสือกเอาโยนทิ้งไปซะงั้น เปลืองค่าไปเปล่าๆไหมล่ะ)
Hashrate เยอะแค่ไหนก็ไม่ได้ทำให้ Signature ปลอมกลายเป็น Signature จริงขึ้นมาได้
ไม่ว่า Miner จะมีกันเยอะแค่ไหน จะล้นโลกมากเพียงใดก็ตาม พวกเขาก็ไม่สามารถเอาตังค์ของคุณออกไปได้
8. แล้ว Block มันต่อกันยังไงวะ?
เอาล่ะ
มาถึงของจริงแล้วนะ
คุณยังจำ Field นี้ใน Block Header ได้ไหม?
Previous Block Hash
สมมุติเรามี Block #100

Miner ที่กำลังสร้าง Block #101 จะเอา Hash ของ Block #100 ไปใส่ใน Header ของ Block #101

พอ Block #101 ถูกขุดสำเร็จ มันเองก็มี Hash เป็นของตัวเอง

จากนั้น Miner สร้าง Block #102
Header ของ #102 ก็อ้าง Hash ของ #101

แล้ว #103 ก็อ้าง #102
#104 ก็อ้าง #103
#105 ก็อ้าง #104
เดี๋ยวนะ…
Block ใหม่มันมี Hash ของ Block ก่อนหน้า
แล้ว Block ต่อไปก็ทำเหมือนกัน
Block…
ต่อ…
Block…
เชี่ย
นี่แม่ง Blockchain นี่หว่า !!!
นี่แหละครับจุดที่ผมอยากให้เราเข้าใจคำว่า Blockchain คืออะไร
มันไม่ได้เริ่มจากคำว่า Distributed Ledger
เราเริ่มจาก Transaction
เอา Transaction มารวมกัน
สร้าง Merkle Root
ใส่ลง Block Header
ทำ Proof of Work
แล้ว Header ของ Block ใหม่ก็อ้างถึง Hash ของ Block ก่อนหน้า
Block จึงถูกเชื่อมเข้าหากันทาง Cryptography
Block + Chain
ชื่อแม่งตรงกว่าที่คิดอีก 😂
9. ถ้า Blockchain เป็นแค่ Block ต่อกัน งั้นกูกลับไปแก้ Block เก่าได้ไหม?
ได้สิ
ก็ไฟล์ Transaction และข้อมูลของ Block ทั้งหมดอยู่ใน Computer มึงนี่ (หากคุณติดตั้ง Node Software)
แก้เลย เอาสิ เอาเล๊ย
สมมุติเรากลับไปเปลี่ยน Transaction ใน Block #100
จาก

เป็น

ปัญหาแรกที่มึงจะเจอก็คือ :
Transaction เปลี่ยน
↓
Transaction Hash / Merkle structure เปลี่ยน
↓
Merkle Root เปลี่ยน
↓
Block Header #100 เปลี่ยน
↓
Hash ของ Block #100 เปลี่ยน
สมมุติเดิม:

หลังแก้ข้อมูลบางอย่างใน Transaction แล้วคุณจะพบว่า :

โอ้โห
ทีนี้ Proof of Work อันเดิมก็ไม่ตรงแล้วสินะ
ที่นี้ต้องทำใหม่ นั่งหา Proof of work ใหม่อีกรอบ
แต่สมมุติมึงมีเครื่องขุดที่โคตรพ่อโคตรแม่แรงและเร็วทะลุนรก
ขุด Block #100 ใหม่สำเร็จ
จบไหม?
ยัง 😂
เพราะแม่ง Block #101 เดิมเสือกเขียนไว้ว่า

แต่ Block #100 เวอร์ชันใหม่ของคุณมี Hash คนละตัวแล้ว
ดังนั้น Link ระหว่าง #100 กับ #101 มันก็จะพัง
แต่ถ้าคุณอยากให้ Chain ดำเนินต่อเนื่อง ?
คุณจะต้องแก้ #101 ให้ชี้มาที่ Hash ใหม่
พอแก้ Header #101 เสร็จปุ๊บ…
ทีนี้ Hash #101 ก็จะเปลี่ยนไป
ทีนี้คุณก็ต้องมานั่งหา Proof of Work #101 ใหม่อีก
แล้วจากนั้น #102 ก็จะพัง
ละก็ #103 ก็จะพัง
ละก็ #104…
ละก็พังไปเรื่อย ๆ

และระหว่างที่คุณกำลังนั่งขุดประวัติศาสตร์ใหม่นั้น…
Network ฝั่งที่เหลือไม่ได้หยุดรอคุณนะครับ
มันยังสร้าง Block ใหม่และสะสม Chainwork ต่อไปเรื่อยๆ
และนี่จึงเป็นที่มาของประโยคที่ว่า
ข้อมูลใน Blockchain นั้นแก้ไขไม่ได้
ซึ่งมันเป็นคำอธิบายที่ผมไม่ค่อยชอบเท่าไรนัก
เนื่องจากว่าข้อมูลใน Computer นั้น ไม่มีเวทมนตร์อะไรที่ห้ามคุณแก้ไข Byte
มันแก้ได้เว้ย
แต่ประเด็นคือ…
ถ้าคุณเปลี่ยนประวัติศาสตร์ คุณจะต้องสร้าง Proof of Work ที่เกี่ยวข้องใหม่และสร้าง Chain ที่มี Proof of work สะสมเพียงพอเพื่อให้ Node พิจารณาตามกฎ Consensus
ยิ่ง Block นั้นถูกฝังลึกลงไปและมี Block ใหม่สร้างต่อด้านบนมากขึ้น
Proof of work ที่ต้องตามให้ทันก็ยิ่งมากขึ้น
คือมันไม่ได้บอกว่า Blockchain ของ Bitcoin นั้น
แก้ไม่ได้
แต่มันคือประโยคที่ว่า
แก้ได้นะ แต่มึงต้องจ่ายค่าความจริงใหม่ด้วยพลังงานและการคำนวณ
อันนี้ผมว่าคนละความรู้สึกเลย
แล้ว Bitcoin Node รู้ได้ยังไงว่า Blockchain ไหนคือของจริง?
ตรงนี้มี Trap อีกแล้วคร้าบท่านผู้ชม !!!
เพราะมีบางคนที่พูดว่า
Bitcoin เลือก Chain ที่ยาวที่สุด
ซึ่งถ้าพูดแบบประโยคด้านบนก็พอที่จะเห็นภาพได้
แต่ถ้าจะให้แม่นขึ้นจะต้องบอกว่า “Bitcoin สนใจ Valid chain ที่มี cumulative Proof of Work หรือ chainwork มากกว่า ตามกฎที่ Node บังคับใช้”
ระบบมันไม่ใช่แค่ นับว่าใครมีจำนวน Block เยอะกว่ากันเท่านั้นนะ ?
เพราะคุณสามารถสร้าง Block ที่มี Difficulty ต่ำ ๆ จำนวนมหาศาลในโลกสมมุติของคุณได้
ซึ่งมันไม่ได้แปลว่า Node จะมองว่าสิ่งที่คุณหลอกลวงขึ้นมานั้นจะมี Proof of work มากกว่า Bitcoin chain ปัจจุบัน
และคำว่า Valid นั้นสำคัญมากๆ
ถ้าคุณสร้าง Chain ที่มี Proof of Work เยอะ แต่ Block ข้างในละเมิด Consensus Rule ที่ Node ของผม enforce…
สำหรับ Node ของผมแล้วนั้น
มันก็ Invalid แหละ
ซึ่ง Proof of Work ไม่ใช่ใบอนุญาตให้ทำอะไรก็ได้นะครับ
นี่เป็นอีกครั้งที่เราเห็นว่า
Bitcoin ไม่ได้มีของชิ้นเดียวที่ทำให้มันทำงานได้
มี Mining เพียงอย่างเดียวไม่พอ
มี Node เพียงอย่างเดียวไม่พอ
มี Cryptography เพียงอย่างเดียวไม่พอ
มันเป็นระบบที่ของหลายชิ้นทำงานร่วมกัน
แล้ว Blockchain มันไปอยู่ที่ไหน?
คำถามนี้ผมชอบมาก
เพราะพอเราพูดคำว่า Blockchain เรามักจินตนาการเหมือนมันมี Cloud ก้อนหนึ่งลอยอยู่บน Internet
แล้วทุกคน Login เข้าไปดู
แต่ Bitcoin ไม่มีสิ่งที่ว่ามานี้
มันไม่ได้มี www.blockchain.com
เครื่องกลางหนึ่งเครื่องที่เก็บความจริงให้ทุกคน
Bitcoin Full Node สามารถดาวน์โหลดและตรวจสอบประวัติ Block ตั้งแต่ต้นได้ทันทีด้วยตัวคุณเอง เมื่อคุณโหลด Node Software มาแล้วติดตั้งในเครื่อง Computer ของคุณ จากนั้นมันจะทำงานตามความสามารถและโหมดการทำงานของมัน แล้วสร้าง State ที่มันต้องใช้ เช่น UTXO set โดยทันที
Node ต่าง ๆ เชื่อมต่อกันแบบ Peer-to-Peer ซึ่งคุณกำหนดได้ด้วยว่าจะให้เชื่อมกี่ Peer
จากนั้นมันจะทำการรับ Transaction
มันจะทำการรับ Block
มันจะทำการตรวจสอบ
แล้วส่งต่อข้อมูลที่ผ่าน Policy/Rules ที่เกี่ยวข้องไปยัง Peer อื่น
เพราะงั้นถ้าถามว่า
Blockchain อยู่ที่ไหน?
คำตอบแบบง่ายคือ…
สำเนาและข้อมูลที่เกี่ยวข้องกับ Chain ถูกเก็บอยู่บน Bitcoin Nodes จำนวนมากทั่วโลก แน่นอนว่ามันสามารถอยู่บนเครื่องของคุณได้ด้วยหากคุณติดตั้ง Node Software
แต่ผมอยากระวังคำว่า
“ทุก Node มี Blockchain เหมือนกันทุก Byte”
เพราะ Node สามารถทำงานแบบ Pruned Node ได้ นั่นก็แปลว่า Pruned Node จะไม่ได้มี Full Block เหมือนชาวบ้านเขา
ซึ่งสิ่งที่ Pruned Node ทำก็คือมันสามารถตรวจสอบ Chain แล้วลบ Block เก่าบางส่วนออกจาก Storage หลังจากตรวจสอบเรียบร้อย เพื่อประหยัดพื้นที่ Harddisk
ดังนั้นการเป็น Full Node ไม่ได้แปลว่าต้องเก็บ Block ทุก Block ไว้บน Disk ตลอดชีวิตเสมอไป
สิ่งสำคัญคือมันต้อง ตรวจสอบกฎด้วยตัวเอง
แล้ว Blockchain คือ Bitcoin หรือเปล่า?
ไม่ใช่
นี่เป็นอีกเรื่องนึงที่ผมเคยสับสนสมัยตอนยังเป็นวัยรุ่น
ถ้าจะตอบให้ถูกก็คือ Bitcoin ใช้ Blockchain เป็นส่วนหนึ่งของระบบ
แต่
Blockchain ≠ Bitcoin
Bitcoin ยังต้องมีอีกหลายอย่าง
Private Key
UTXO
Script
Peer-to-Peer Network
Consensus Rules
Proof of Work
Difficulty Adjustment
Mining
Monetary Policy
ฯลฯ
ถ้าเอาแค่ Data Structure มาสร้างข้อมูลแบบ Block ต่อ Block แล้วบอกว่า
กูสร้าง Bitcoin ใหม่แล้ว
มันไม่ใช่
เหมือนคุณเอา SQL Database มาตัวหนึ่งแล้วบอกว่า
กูสร้างธนาคารแล้ว ซึ่งมันบ่อแม่นเด้อหล่า
Database เป็นแค่ส่วนหนึ่ง
สิ่งที่น่าสนใจของ Bitcoin คือ…
ของทุกชิ้นมันถูกเอามาประกอบเข้าด้วยกันได้ยังไง ?
อันนี้เรียกว่าสุดจริง
ถ้างั้น Blockchain ทุกอันก็เหมือน Bitcoin สิ?
ไม่ครับ ไม่มีวัน ไม่มีทาง
ถ้าหากคุณอยากเข้าใจว่า Blockchain คืออะไร ? คุณจะดูแค่ตื้นๆไม่ได้
คำว่า Blockchain ถูกเอาไปใช้กับระบบสารพัดอย่างในช่วงหลายปีที่ผ่านมา
Private Blockchain
Enterprise Blockchain
Permissioned Blockchain
Consortium Blockchain
และอื่น ๆ อีกมากมายหลายขุม
ผมไม่ได้บอกว่าระบบพวกนั้นมันไม่มีประโยชน์
มันอาจมี Use Case ของมันก็ได้มั้ง
แต่แค่ Data ถูกจัดเป็น Block แล้วมี Hash เชื่อมกัน…
มันไม่ได้ทำให้ระบบนั้นมี Security Model แบบ Bitcoin โดยอัตโนมัตินะครับ
ทีนี้เราต้องถามต่อว่า
แล้วใครสร้าง Block?
แล้วใคร Validate?
ใครสามารถเปลี่ยนกฎได้?
ใครสามารถเข้าร่วม Network ได้?
ระบบ Consensus ทำงานยังไง?
แล้ว Sybil Resistance มาจากไหน?
ใครสามารถ Rewrite History ได้?
ถ้ามีปัญหา ใครมีสิทธิ์ Override ได้ป่ะ?
เพราะงั้นเวลาได้ยินบริษัทพูดว่า
Powered by Blockchain Technology
ผมยังไม่อยากให้คุณตื่นเต้น
ซึ่งคำถามแรกที่ผุดขึ้นมาในหัวของผมก็คือ
แล้วใครเป็นคนควบคุมมัน?
แล้วทำไม Bitcoin ต้องใช้ Blockchain?
ทีนี้คำถามเริ่มกลับหัวละ
เราไม่ได้ถามว่า
เอา Blockchain ไปใช้ทำอะไรได้บ้าง?
แต่ถามว่า
Bitcoin มีปัญหาอะไร ถึงต้องสร้างระบบแบบนี้ขึ้นมา?
โลกของเรามีปัญหาอะไร ถึงต้องสร้างระบบแบบ Bitcoin ขึ้นมา?
ซึ่งไอเดียของ Bitcoin คือต้องการให้คนที่ไม่ได้รู้จักกัน
ไม่ได้ Trust กัน
ไม่มีธนาคารกลาง
ไม่มี Database Administrator
ไม่มีบริษัทเจ้าของระบบ
สามารถเห็นและตรวจสอบประวัติการ Spend ของเงินชุดเดียวกันได้ ทำงานร่วมกันได้
ถ้า Alice พยายาม Spend UTXO เดียวกันสองครั้ง
เราต้องมีวิธีทำให้ Network มาบรรจบกันว่า History ไหนถูกยอมรับ ?
นั่นจึงเป็นที่มาของ Proof of Work
นั่นจึงเป็นที่มาของ Block ordering
นั่นจึงเป็นที่มาของ Consensus validation
และ Chainwork จึงเข้ามาทำงานร่วมกัน
Blockchain ของ Bitcoin ไม่ได้มีค่าเพราะ
Block ต่อกันยาวๆแล้วมันดูเท่
มันมีค่าขึ้นมาได้ก็เพราะ Bitcoin มีวิธีการสำคัญที่ Network ใช้จัดลำดับเหตุการณ์ประวัติศาสตร์ของ Transaction ภายใต้กฎที่ไม่มีศูนย์กลางคนเดียวเป็นผู้ตัดสิน
ตรงนี้แหละที่ผมว่าเริ่มน่าสนใจจริง ๆ
Blockchain คืออะไร? ลองประกอบเครื่องทั้งหมดอีกครั้ง
ตอนนี้เรามีทุกชิ้นครบแล้ว

ทีนี้ถ้ามีใครมาถามผมว่า
Blockchain คืออะไร?
ผมคงไม่เริ่มด้วย
Distributed Immutable Decentralized Ledger Technology…
เพราะกูเองยังปวดหัว 😂
ผมจะเริ่มจาก Transaction หนึ่งอันก่อน
แล้วค่อยประกอบมันขึ้นมา
เพราะพอเห็นของทุกชิ้นทำงาน…
คำว่า Blockchain แทบไม่ต้อง Definition แล้ว เนื่องจากมันครบและจบได้ด้วยตัวมันเอง
FAQ — Blockchain คืออะไร? คำถามที่คนเริ่มศึกษา Bitcoin มักสงสัย
Blockchain คืออะไร?
Blockchain คือโครงสร้างข้อมูลที่ Block ถูกเชื่อมโยงต่อกัน โดย Block ใหม่อ้างอิง Hash ของ Block ก่อนหน้า สำหรับ Bitcoin โครงสร้างนี้ทำงานร่วมกับ Proof of Work, Consensus Rules และการตรวจสอบโดย Bitcoin Nodes เพื่อสร้างประวัติ Transaction ที่ Network สามารถตรวจสอบได้
Bitcoin กับ Blockchain เป็นสิ่งเดียวกันไหม?
ไม่ใช่
Blockchain เป็นส่วนหนึ่งของ Bitcoin แต่ Bitcoin ยังประกอบด้วย UTXO, Digital Signatures, Script, Proof of Work, Peer-to-Peer Networking, Consensus Rules, Mining และ Node Validation รวมถึงส่วนประกอบอื่น ๆ
Blockchain แก้ไขข้อมูลย้อนหลังไม่ได้จริงไหม?
พูดว่า “แก้ไม่ได้” ไม่แม่นนัก
ข้อมูลดิจิทัลสามารถถูกเปลี่ยนได้ แต่การเปลี่ยน Transaction เก่าใน Bitcoin จะทำให้ Merkle Root และ Block Hash เปลี่ยน ส่งผลให้ความเชื่อมโยงกับ Block หลังจากนั้นเสียไป และ Proof of Work ที่เกี่ยวข้องต้องถูกสร้างใหม่เพื่อสร้างประวัติทางเลือกที่สามารถแข่งขันด้าน chainwork ได้
Miner เป็นคนตัดสินว่า Block ไหนถูกต้องหรือไม่?
Miner สร้าง Candidate Block และทำ Proof of Work แต่ Bitcoin Node แต่ละตัวตรวจสอบ Block ตาม Consensus Rules ของตัวเอง
Block ที่มี Proof of Work แต่ละเมิด Consensus Rules ยังสามารถถูก Node ปฏิเสธได้
Bitcoin Blockchain อยู่ที่ไหน?
ข้อมูล Blockchain ถูกกระจายอยู่ใน Network ของ Bitcoin Nodes ไม่ได้อยู่ใน Server กลางเพียงเครื่องเดียว
Node บางตัวเก็บ Block History ไว้ทั้งหมด ขณะที่ Pruned Full Node สามารถตรวจสอบ Chain แล้วลบ Block เก่าบางส่วนออกจาก Storage ได้
Previous Block Hash สำคัญอย่างไร?
มันเชื่อม Block ใหม่เข้ากับ Block ก่อนหน้า
หากข้อมูลใน Block เก่าเปลี่ยน Hash ของ Block นั้นก็เปลี่ยน ทำให้ Reference ที่ Block ถัดไปเก็บไว้ไม่ตรงกัน และ Chain หลังจากจุดนั้นต้องถูกสร้างใหม่หากต้องการสร้างประวัติทางเลือกที่สอดคล้องกัน
Blockchain ปลอดภัยเพราะข้อมูลถูก Encrypt หรือไม่?
ไม่ใช่
Bitcoin Blockchain ไม่ได้ปลอดภัยเพราะ Transaction History ทั้งหมดถูก Encrypt แล้วไม่มีใครอ่านได้
ตรงกันข้าม ข้อมูล Blockchain จำนวนมากเป็น Public และสามารถตรวจสอบได้
Security ของ Bitcoin มาจากหลายองค์ประกอบร่วมกัน เช่น Cryptographic Hashing, Digital Signatures, Proof of Work, Consensus Rules และ Independent Node Validation
Blockchain ทุกระบบปลอดภัยเหมือน Bitcoin ไหม?
ไม่
การใช้ Data Structure แบบ Blockchain ไม่ได้ทำให้ระบบมี Security Properties แบบ Bitcoin โดยอัตโนมัติ
ต้องดูว่าใครสามารถสร้างและตรวจสอบ Block, Consensus ทำงานอย่างไร, ใครเปลี่ยนกฎได้ และระบบป้องกันการ Rewrite History หรือการควบคุม Network อย่างไร
แล้วของที่น่าสนใจจริง ๆ คือ Blockchain หรือเปล่า?
ตัวผมเองครั้นเมื่อยังเด็ก ก็จะได้ยินคำว่า Blockchain เสมอมา แล้วก็จะตั้งคำถามแรกๆเลยว่า Blockchain คืออะไร ?
ตอนแรกผมคิดว่า Blockchain เป็น Technology ที่ฉลาดมากๆแน่ๆเลย
เหมือนมันต้องมี Algorithm ลึกลับอะไรสักอย่างอยู่ข้างใน
แต่พอเราแกะมันออกทีละชิ้นแล้วพบว่ามันมี…
Transaction
Hash
Merkle Tree
Merkle Root
Block Header
SHA-256
Proof of Work
Node
ของแต่ละอย่างไม่ได้ดูเหมือนเวทมนตร์เลย
ซึ่ง Hash Function ก็มีมาก่อน Bitcoin
และ Digital Signature ก็มีมาก่อน Bitcoin
และ Merkle Tree ก็ไม่ได้ถูก Satoshi คิดขึ้นมา
และ Proof of Work Concept ก็มีการใช้งานก่อน Bitcoin
และ Peer-to-Peer Network ก็มีมาก่อน (หากใครเคยโหลด Bit Torrent ก็จะคุ้นเคยสิ่งนี้)
แล้ว Satoshi ทำอะไร?
อ๋อ….เขาเอาของพวกนี้มาประกอบกัน
จนเกิดระบบที่คนแปลกหน้าทั่วโลก
ไม่รู้จักกัน
ไม่ต้อง Trust กัน
ไม่ต้องมีบริษัทเจ้าของ Database
แต่สามารถตรวจสอบกฎและมาบรรจบกับประวัติของเงินชุดเดียวกันได้
ตอนแรกผมถามว่า
Blockchain คืออะไร?
แต่พอประกอบมันเสร็จแล้ว…
ผมกลับรู้สึกว่าคำถามนั้นอาจไม่ใช่คำถามที่น่าสนใจที่สุดแล้ว
เพราะ Blockchain ก็แค่ Block ที่ต่อกัน
คำถามที่เริ่มกวนหัวผมมากกว่าคือ…
ของที่น่าสนใจจริง ๆ คือ Blockchain…
หรือกฎที่ทำให้คนทั้งโลกยอมรับ Blockchain เส้นเดียวกันวะ?