Bitcoin Mining คืออะไร? Miner กำลังคำนวณหาอะไรกันแน่?
จากบทความที่แล้วเราคุยกันเรื่อง Bitcoin Full Node
ซึ่งมีประโยคนึงที่ผมเขียนเอาไว้ว่า
Miner มีหน้าที่เสนอ Block เข้ามา ส่วน Node มีหน้าที่ตรวจการบ้าน
ฟังดูง่ายดี…
แต่คำถามก็คือ แล้วพวก Miner มันไปเอา Block มาจากไหนกันวะ?
เวลาเราเห็นภาพของ Bitcoin Mining ที่เจอกันบ่อย ๆ ก็คงจะเป็นโกดังใหญ่ ๆ ที่มีเครื่อง ASIC วางเรียงกันเป็นร้อยเป็นพันเครื่อง พัดลมหมุนติ้วๆๆเสียงดังชิบหายยังกับเครื่องบิน Jet มิหนำซ้ำยังแดกไฟยังกับเป็นโรงงานอุตสาหกรรม
แล้วไอ้เครื่องพวกนี้มันกำลังทำอะไรกันอยู่กันแน่?
มันกำลังแก้สมการคณิตศาสตร์รึเปล่านะ?
มันกำลังถอดรหัส Bitcoin รึเปล่านะ?
มันกำลังตรวจ Transaction รึเปล่านะ?
หรือมันกำลัง “ขุด” Bitcoin เหรียญใหม่ๆให้มันกระเด้งออกมาจาก Blockchain เหมือนคนขุดทอง?
ตอนผมเริ่มศึกษา Bitcoin ใหม่ ๆ ผมก็เคยเข้าใจประมาณนั้นเหมือนกัน ผมคิดว่าคงมีโจทย์คณิตศาสตร์ยาก ๆ สักข้อ แล้ว Network ก็โยนโจทย์ออกมาให้กับ Miner แล้วจากนั้นพวก Miner ก็ทำการแข่งกันแก้โจทย์นี้ ซึ่งมันทำให้ผมเหมือนจะเห็นภาพว่า Computer ทั่วโลกแข่งกันแก้สมการคณิตศาสตร์ จากนั้นก็วัดว่าใครฉลาดกว่า ใครเครื่องแรงกว่า ใครแก้โจทย์ได้ก่อนก็รับ Bitcoin ไป
แต่พอเข้าไปดูจริง ๆ
แม่งไม่ได้มีโจทย์คณิตศาสตร์ลึกลับอะไรให้มันแก้เลยนี่หว่า
เพราะว่าเครื่อง ASIC หรือว่าเครื่อง Miner นี่ทำงานที่ดูโง่มากๆเลย
มันก็แค่ Hash ข้อมูลอะไรสักอย่าง
ไม่ผ่าน…
จากนั้นก็เปลี่ยนค่า
แล้วเอามา Hash ใหม่
ยังไม่ผ่าน…
เปลี่ยนค่าอีกที
แล้วเอามา Hash ใหม่
วนแม่งอยู่อย่างนั้นเป็นจำนวนนับครั้งไม่ถ้วน
จนกระทั่งมีใครสักคนเจอ Hash ที่เข้าเงื่อนไขที่ Bitcoin Network Protocol กำหนด
พอเข้าใจปุ๊บ ทีนี้ คำถามเลยเปลี่ยนจาก
“Miner กำลังแก้โจทย์อะไร?”
มาเป็น
“มันกำลัง Hash อะไร แล้วทำไมการเดาสุ่มสี่สุ่มห้าแบบนี้ถึงทำให้ Bitcoin ปลอดภัยได้วะ?”
ตรงนี้แหละครับที่เป็นจุดเิริ่มต้นของความเข้าใจที่ว่า Bitcoin Mining คืออะไร
ก่อนที่ Bitcoin จะทำการ Mining ได้นั้น มันจะต้องสร้าง Block Template ขึ้นมาก่อน
ถ้าคุณยังจำบทความ Bitcoin Transaction คืออะไร ได้นะ ผมเคยบอกไว้ว่า Transaction ที่เราสร้างและ Broadcast ออกไปนั้น จะเดินทางผ่าน Network และอาจเข้าไปอยู่ใน Mempool ของ Node ต่าง ๆ เพื่อรอการ Confirm ถูกป่ะ?
แล้วถ้าจะให้เราเห็นภาพว่า Bitcoin Mining คืออะไร จริง ๆ แล้วล่ะก็ เราเลยต้องเลิกมองภาพคนกำลัง “ขุดเหรียญ” ก่อน เพราะสิ่งที่ Miner ทำนั้นมันเริ่มมาจากการสร้าง Candidate Block ขึ้นมา แล้วพยายามหาหลักฐานว่า Work นั้นถูกทำไปแล้วหรือยัง?
กลับไปที่ Mempool จากบทความเรื่อง Bitcoin Node กันนิดหนึ่ง
ใน Network มี Transaction จำนวนมากที่กำลังรอการ Confirm ใช่มะ?
Miner หรือระบบของ Mining Pool จะเลือก Transaction บางส่วนมาประกอบเรียงกันเป็น Candidate Block
คำว่า Candidate สำคัญมากนะครับ
เพราะตอนนี้มันยังไม่ได้เป็น Block ที่ Network ยอมรับ และมันมีอีกคำถามที่แฝงอยู่นั่นก็คือ แล้วมันเรียงกันตามลำดับของอะไร?
มันก็ประมาณว่า
“กูขอเสนอ Block หน้าตาประมาณนี้แล้วกัน”
ข้างในก็มี Transaction ที่ Miner เลือกมา และมี Transaction พิเศษอีกตัวหนึ่งที่เรียกว่า
Coinbase Transaction
ปล.ไม่ใช่ Coinbase ที่เป็นเว็บ Exchange ของเมกานะ 😂
Coinbase Transaction ตัวนี้มีความพิเศษตรงที่มันไม่ได้ Spend UTXO แบบที่เราเคยคุยกันในบทความ UTXO คืออะไร และเป็น Transaction ที่ Miner ใช้ claim สิ่งที่ได้รับอนุญาตจากการสร้าง Block ได้แก่ Block Subsidy และ Transaction Fees ตามกฎของ Bitcoin. พูดง่ายๆก็คืออีตัว Coinbase Transaction เนี่ย เป็นจุดที่พวก Miner เอาไว้เสกเงินให้กับตัวเอง จบข่าว
แน่นอนว่าจุดพิเศษของ Coinbase Transaction นั้นไม่จำเป็นต้องมี Input เลย ก็คือปล่อยโล่งๆได้เลย อยู่ดีๆก็เสกขึ้นมากลางอากาศแล้วก็ยิงเข้าไปใน Address ของใครสักคนได้เลยทันที ไม่ผิดกฏ มิหนำซ้ำจุดนี้ยังสามารถรวบเอา Transaction Fee เล็กๆน้องที่พวกคนโอนเงินทิ้งไว้มาบวกเข้าไปในนี้ได้อีกด้วย
ทีนี้หายสงสัยแล้วใช่มั้ย ว่าค่า Fee ที่เราจ่ายเวลาโอนเงินนั้นมันไปเข้า Miner ได้ยังไง
เมื่อมี Transaction ทั้งหมดแล้ว ข้อมูลเหล่านั้นจะถูกนำไปสร้าง Merkle Tree และได้ค่าหนึ่งออกมาที่เรียกว่า
Merkle Root
เดี๋ยวเรื่อง Merkle Tree เราค่อยลงหลุมกันอีกที ไม่งั้นวันนี้ไม่ได้ Mining แน่นอน (อีกแล้วหรอ?) 😂
ตอนนี้จำแค่ว่า Merkle Root ผูกอยู่กับชุด Transaction ใน Block นั้นก็พอ
พูดเชิงเทคนิคก็คือ มันทำหน้าที่คล้ายๆกับ Checksum ของ Computer Communication Protocol นั่นแหละ เพื่อป้องกันข้อมูลผิดพลาด คลาดเคลื่อน ไปจากต้นฉบับเดิม ก็แค่นั้นเอง
แล้ว Merkle Root ตัวนี้จะเข้าไปอยู่ในสิ่งที่ Miner สนใจมาก ๆ
นั่นก็คือสิ่งที่เรียกว่า Block Header
Block Header มีอะไรอยู่ข้างใน?
Bitcoin Block Header มีขนาด 80 bytes
เล็กจนน่าตกใจเมื่อเทียบกับขนาด Block ทั้งก้อน
ข้างในมีข้อมูลหลัก ๆ ประมาณ 6 อย่างด้วยกัน ซึ่งประกอบไปด้วย :
Version Number
Previous Block Hash
Merkle Root
Timestamp
nBits
Nonce
และไอ้ข้อมูล 80 bytes นี่แหละครับที่เกี่ยวข้องโดยตรงกับสิ่งที่ ASIC หรือ Miner เอาไป Hash ซ้ำแล้วซ้ำอีก.
ตรงนี้มีเรื่องหนึ่งที่ผมเคยเข้าใจผิด
ผมเคยคิดว่า ASIC กำลังเอา Transaction เป็นพัน ๆ รายการมา Hash ใหม่ทั้งหมดทุกครั้ง
ซึ่งเอาเข้าจริงๆแล้วมันไม่ใช่แบบนั้น
สิ่งที่ Proof of Work ผูกอยู่ด้วยคือ Block Header
และเพราะ Header มีทั้ง Previous Block Hash กับ Merkle Root อยู่ข้างใน มันจึงผูกทั้งข้อมูลของ Block ก่อนหน้าและข้อมูลทั้งชุด Transaction ของ Candidate Block เหล่านี้เข้ามาด้วย
ทีนี้ของเริ่มสนุกแล้ว (เชิญมึงสนุกไปคนเดียวเถอะ) ^_^
Bitcoin Mining คืออะไร? แล้ว Miner กำลังหาอะไรกันแน่?
สมมุติ Miner สร้าง Block Header ขึ้นมา
จากนั้น ASIC หรือ Miner ก็เอา Block Header เหล่านี้ไปผ่าน SHA-256 ตามกระบวนการของ Bitcoin แล้วก็จะได้ Hash ออกมา (อันที่จริงแล้วมันทำ Double Hash ต่างหาก กล่าวคือ Hash 2 รอบ)
ซึ่งจะมีหน้าตาประมาณนี้ :
8f31a4c9...
พอเอาไป Hash อีกที ก็จะได้ :
91bc87e2...
อีกที ก็จะได้ :
43e107ad...
ASIC ไม่ได้มองว่า Hash ไหน “เลขสวย”
มันกำลังหา Hash ที่มีค่าตัวเลข ต่ำกว่าหรือเท่ากับ Target ที่กำหนด
สมมุติแบบง่ายมาก ๆ ว่า Target ของเกมนี้คือ :
0000FFFF...
ถ้าได้ :
83AF9213...
ก็คือ ไม่ผ่าน ❌
พอไป Hash อีกที ถ้าได้ :
12A73BC9...
ก็ยัง ไม่ผ่าน ❌
แต่ถ้าได้ :
00003F21...
เฮ้ย…
อันนี้อาจผ่าน ✅
ตัวอย่างนี้ผมย่อให้ดูง่ายนะครับ Target จริงเป็นค่าตัวเลขขนาดใหญ่ และใน Block Header จะเก็บ Target ในรูปแบบ compact ไว้ในตัวแปรที่เรียกว่า nBits หรือบางทีก็เขียนแค่ Bits นั่นเอง .
และนี่แหละที่ทำให้คนชอบพูดว่า Bitcoin Mining คือการหา Hash ที่มีเลขศูนย์นำหน้าหลาย ๆ ตัว
พูดแบบนั้นพอเห็นภาพได้
แต่ถ้าจะพูดให้ตรงกว่าเดิม:
Miner กำลังหา Block Header Hash ที่มีค่าตัวเลขไม่เกิน Target
มันไม่ได้มีกฎว่า “ต้องสวย”
มันไม่ได้มีสมการลับให้แก้ แต่สิ่งที่มันทำจริงๆก็คือ
มันเดาไปเรื่อย!!!
แล้ว Nonce คืออะไร?
ทีนี้ ASIC จะสร้าง Hash ใหม่ได้ยังไง?
หนึ่งในค่าที่สามารถเปลี่ยนแปลงได้ใน Block Header ก็คือ
ค่าในตัวแปรที่ชื่อว่า Nonce
ซึ่งตัวแปร Nonce ใน Block Header มีขนาด 32-bit.
สิ่งที่ Miner มันทำก็คือลองใส่ :
Nonce = 0
แล้วเอาไป Hash ดูซิ → ไม่ผ่าน
งั้นลองเปลี่ยนให้ Nonce = 1
แล้วเอาไป Hash ดูซิ → ไม่ผ่าน
งั้นลองเปลี่ยนให้ Nonce = 2
แล้วเอาไป Hash ดูซิ → ไม่ผ่าน
…
ทำต่อไปเรื่อย ๆ
แต่อย่าเพิ่งเข้าใจว่าการ Mining ทั้งโลกมีแค่การนับ Nonce จาก 0 ถึง 4 พันกว่าล้านค่า แล้วจบไปง่ายอย่างนั้น
ASIC สมัยใหม่วิ่งผ่านพื้นที่ Nonce ได้เร็วมาก
เมื่อจำเป็นต้องสร้างชุดงานใหม่ Mining software สามารถเปลี่ยนข้อมูลอื่นได้ เช่น extra nonce ใน Coinbase Transaction ซึ่งมีผลทำให้ Transaction ID เปลี่ยน → จากนั้น Merkle Root ก็จะเปลี่ยน → จากนั้น Block Header ก็จะเปลี่ยน → แล้วก็ได้พื้นที่ใหม่เพิ่มเติมเพื่อให้เราได้ Hash กันต่อ.
เมื่อกี้ผมบอกว่า Coinbase Transaction เป็น Transaction พิเศษที่ไม่ต้องมี Input ใช่ป่ะ จุดนี้นี่เองที่พวก Miner สามารถใส่ข้อความต่างเข้าไปได้ ใส่พวก ASCII ตัวอักษรหรืออะไรก็ได้ตามใจเลย ซึ่งไม่ผิดกฏ Bitcoin Protocol ซึ่งในจุดนี้นี่แหละเราเลยเรียกว่าเป็น extra nonce (จริงๆแล้วใน Block แรกที่ Satoshi สร้างไว้ เขาเองก็ได้ใส่ความเล่นในส่วนนี้เช่นกัน นั่นก็คือประโยคสุดฮิตว่า “The Times 03/Jan/2009 Chancellor on brink of second bailout for banks” ซึ่งเป็น Hidden Message ที่ถูกวางไว้ใน ScriptSig)
ตรงนี้แหละที่คำอธิบายว่า
“Miner แค่หา Nonce”
มันเริ่มไม่ใช่อีกต่อไปแล้ว
มันไม่ได้มีเลขวิเศษตัวเดียวซ่อนอยู่ในจักรวาลรอให้เราไปค้นพบ
Miner กำลังสร้าง Candidate Header จำนวนมหาศาลแล้วถามคำถามเดิมซ้ำ ๆ วนไป :
Hash นี้ต่ำกว่า Target หรือยัง ?
ไม่…
ต่อ…
ไม่…
ต่อ…
ไม่…
ต่อ…
ตรงนี้ทำให้ภาพของ Bitcoin Mining คืออะไร เริ่มชัดขึ้นอีกหน่อย มันไม่ใช่การตามหา Nonce วิเศษเพียงตัวเดียว แต่เป็นการสร้าง Candidate จำนวนมหาศาลแล้วลอง Hash ไปเรื่อย ๆ นั่นเอง
ทำไมถึงเดาอย่างเดียวล่ะ? ทำไมไม่หาวิธีที่คำนวณย้อนกลับเอาล่ะ?
นี่เป็นหัวใจของเรื่องนี้เลย
ถ้าเรารู้ Target อยู่แล้ว ทำไมไม่เขียนสูตรคำนวณ Nonce ที่ถูกต้องออกมาเลย ง่ายดีออก?
ถ้าทำได้ Mining คงไม่ต้องมีโกดัง ASIC แล้วล่ะครับ 😂
ถ้าคำนวณได้ง่ายๆ ขอ PC เครื่องเดียวก็พอ ใช่มะ ?
Cryptographic Hash Function ถูกออกแบบมาให้การเปลี่ยน Input แม้เพียงเล็กน้อยสามารถทำให้ Output เปลี่ยนไปอย่างคาดเดาไม่ได้ และเราไม่มี shortcut ที่รู้จักสำหรับคำนวณย้อนกลับไปหา Header ที่จะให้ Hash ต่ำกว่า Target ตามต้องการ
วิธีที่ใช้งานได้จึงกลายเป็น:
ลอง
แล้วก็
ลองอีก
ตรงนี้เองที่คำว่า Proof of Work เริ่มมีความหมาย
เพราะถ้าคุณเอา Block ที่มี Hash ถูกต้องมาให้ผมดู ผมตรวจมันได้ง่ายมาก
เอา Header ไป Hash
ตรวจว่า Hash ผ่าน Target หรือเปล่า
จบ
แต่การที่คุณจะ หา Header แบบนั้นมาให้ผมได้…
คุณต้องทำงานไปก่อนแล้ว
Proof of Work คืออะไร?
ผมชอบมองแบบนี้
มันแพงตอนสร้าง แต่ถูกตอนตรวจ
ถ้ามีใครถามผมว่า Bitcoin Mining คืออะไร แล้วให้ตอบสั้น ๆ ผมคงเริ่มจากตรงนี้แหละ Miner ต้องจ่ายต้นทุนเพื่อสร้าง Proof of Work แต่ Node สามารถตรวจสอบ Work นั้นได้ง่ายกว่ามาก
Miner อาจต้องใช้ ASIC จำนวนมหาศาล
กินไฟ
ใช้เวลา
สร้างความร้อน
เสียค่าเครื่อง
ลอง Hash จำนวนมหาศาล
เพื่อให้ได้ Block หนึ่งก้อน
แต่ Node ของผมไม่ต้องทำงานทั้งหมดนั้นซ้ำ
มันแค่ตรวจสอบ Proof of Work และตรวจสอบกฎอื่น ๆ ของ Block
ถ้าถูก…
รับ
ถ้าผิด…
ไม่รับ
Bitcoin Developer documentation อธิบาย Proof of Work ว่าเป็นการหา Hash ที่ต่ำกว่า Target ซึ่งโดยเฉลี่ยต้องใช้ brute-force work จำนวนหนึ่ง และเมื่อ Block ถูกต่อกันไปเรื่อย ๆ การย้อนกลับไปเปลี่ยน Block เก่าก็ต้องทำ Proof of Work ใหม่และไล่ตามงานที่สะสมอยู่หลังจากมันด้วย.
นี่เริ่มเชื่อมกับบท Bitcoin Node แล้วนะครับ
Miner ทำงานแพง
Node ตรวจงานถูก
แล้ว Difficulty มาจากไหน?
มีปัญหาอีกข้อหนึ่ง
สมมุติวันนี้มี Miner อยู่ 100 เครื่อง
พรุ่งนี้ Bitcoin ราคาแพงขึ้น ทุกคนแห่ซื้อ ASIC จนกลายเป็น 10,000 เครื่อง
ถ้า Target ไม่เปลี่ยน Block ก็จะถูกหาเจอเร็วขึ้นเรื่อย ๆ
Bitcoin เลยมีระบบปรับ Difficulty
โดยภาพใหญ่ Network จะปรับ Target ทุก 2,016 Blocks เพื่อพยายามรักษาเวลาการสร้าง Block โดยเฉลี่ยให้อยู่แถว ๆ 10 นาที.
Hashrate เพิ่มมาก?
Target ก็ต้องยากขึ้น
Hashrate หายไป?
Target ก็ปรับให้ง่ายลงในรอบ Adjustment
มันไม่ได้บอกว่า
“ทุก Block ต้องออกตรง 10 นาทีเป๊ะ”
บาง Block อาจมาเร็วมาก
บาง Block รอนานจนเริ่มสงสัยว่า Internet บ้านกูเสียหรือเปล่า 😂
10 นาทีเป็นค่าเฉลี่ยที่ระบบพยายามรักษาในระยะยาว ไม่ใช่นาฬิกาจับเวลาของแต่ละ Block
แล้ว Miner ได้ Bitcoin จากไหน?
ตรงนี้เรากลับมาที่ Coinbase Transaction
เมื่อ Miner หา Block ที่มี Proof of Work ถูกต้องและ Block นั้นได้รับการยอมรับตามกฎ Miner สามารถ claim รายได้จากสองส่วนหลัก:
Block Subsidy
กับ
Transaction Fees
Subsidy คือ Bitcoin ใหม่ที่ Protocol อนุญาตให้สร้างตาม Schedule
และทุก ๆ 210,000 Blocks โดยประมาณ Subsidy จะลดลงครึ่งหนึ่ง
สิ่งนี้ที่เราเรียกว่า
Bitcoin Halving
ส่วน Fees มาจาก Transaction ที่ Miner เลือกเข้า Block
ดังนั้นคำว่า Block Reward ที่เราใช้กันทั่วไปจึงเกี่ยวข้องกับ Subsidy + Fees
แต่มีจุดหนึ่งที่อยากย้ำจาก Blog #5:
Miner ไม่ได้เขียน Coinbase Transaction แล้วบอกว่า
“วันนี้เหนื่อย ขอ 1,000 BTC ละกัน”
😂
เขียนได้ครับ
แต่ Node ที่บังคับใช้กฎเดิมก็ไม่จำเป็นต้องรับ Block นั้น
เพราะงั้นเวลาเราพูดถึง Bitcoin Mining คืออะไร เราไม่ควรเอา Mining ไปเท่ากับคำว่า “สร้าง Bitcoin ใหม่” อย่างเดียว เพราะ Miner ยังมีหน้าที่สร้าง Candidate Block และแข่งขันกันด้วย Proof of Work เพื่อให้ Block ของตัวเองถูกเสนอเข้าสู่ Network ด้วย
Mining Pool คืออะไร?
ปัญหาของ Solo Mining คือความแปรปรวนมันโหด
คุณอาจมี ASIC ของตัวเอง แต่เมื่อเทียบ Hashrate กับ Network ทั้งโลก โอกาสที่เครื่องของคุณจะเป็นคนเจอ Block อาจน้อยมาก
อาจรอ…
แล้วรอ…
แล้วรอ…
จนค่าไฟหมดไปก่อนจะเห็น Block แรก 😂
Mining Pool จึงเกิดขึ้นเพื่อให้ Miner จำนวนมากเอา Hashrate มาทำงานร่วมกัน
Pool สามารถกำหนด Target สำหรับสิ่งที่เรียกว่า Share ซึ่งง่ายกว่า Network Target
Share ไม่จำเป็นต้องเป็น Block จริง
แต่มันเป็นหลักฐานให้ Pool เห็นว่า
“เออ มึงทำงานจริง”
แล้วเมื่อมี Share ตัวหนึ่งบังเอิญผ่าน Network Target ด้วย Pool ก็สามารถ Broadcast Block นั้นออกไป และรายได้จะถูกแบ่งตามระบบการจ่ายของ Pool.
นี่ทำให้ Miner สามารถมีรายรับที่ถี่และคาดการณ์ได้มากกว่า Solo Mining แม้จะต้องแบ่งรายได้กับคนอื่น
Hashrate คืออะไร?
ถ้า ASIC ทำหน้าที่ลอง Hash ซ้ำ ๆ
เราก็ต้องมีหน่วยบอกว่ามันลองได้เร็วแค่ไหน
นั่นคือ Hashrate
เช่น:
TH/s
PH/s
EH/s
ยิ่ง Hashrate สูง ก็ยิ่งลอง Candidate Hash ได้มากต่อวินาที
แต่ Hashrate เยอะไม่ได้แปลว่า ASIC “ฉลาดกว่า”
มันไม่ได้เข้าใจ Bitcoin
ไม่ได้รู้ Austrian Economics
ไม่ได้อ่าน Whitepaper
ไม่ได้รู้ด้วยซ้ำว่า Michael Saylor คือใคร 😂
มันแค่ทำสิ่งเดิมได้เร็วมาก
Hash → Check → Hash → Check → Hash → Check
แล้ว 51% Attack ล่ะ?
พอพูดเรื่อง Hashrate คำนี้ต้องมา
51% Attack
ถ้าฝ่ายหนึ่งควบคุม Hashrate ส่วนใหญ่มากพอ เขาอาจมีความสามารถในการสร้าง chain ที่มี accumulated Proof of Work มากกว่าและใช้ความสามารถนั้นเพื่อทำบางอย่าง เช่น Reorganize Block ล่าสุด หรือ Censor Transaction บางส่วน
แต่มันไม่ได้แปลว่า:
51% = ได้ Private Key ของทุกคน
ไม่ใช่
51% = ขโมย UTXO ของใครก็ได้
ไม่ใช่
51% = สร้าง Bitcoin 100 ล้านเหรียญแล้ว Node ต้องรับ
ก็ไม่ใช่อีก
เพราะเรายังมีไอ้ตัวกวนจากบทที่แล้วอยู่
Bitcoin Node
Miner สามารถเสนอ Block
แต่ Node ยังตรวจ Consensus Rules
Hashrate ให้พลังกับ Miner ในเรื่องการสร้าง Proof of Work และลำดับของ Chain
มันไม่ได้ทำให้ Digital Signature ปลอมกลายเป็น Signature จริง หรือทำให้ Block ที่ผิด Consensus Rules กลายเป็น Block ถูกต้องสำหรับ Node ที่ยังใช้ Rules เดิม
ทำไม Bitcoin ต้องเผาไฟขนาดนี้?
นี่น่าจะเป็นคำถามที่ใหญ่ที่สุดของ Bitcoin Mining
และผมไม่อยากตอบว่า
“ก็เพื่อรักษาความปลอดภัยไง จบ”
เพราะมันง่ายเกินไป
ลองกลับไปดูสิ่งที่ ASIC ทำ
มันเอา พลังงานจริง
ผ่าน Hardware จริง
ใช้เวลาในโลกจริง
เพื่อสร้าง Proof of Work ให้กับข้อมูลดิจิทัล
และ Proof of Work นั้นถูกผูกเข้ากับ Block Header
Block Header ก็ผูกกับ Previous Block
Previous Block ก็ผูกกับ Previous Block ก่อนหน้า…
ไปเรื่อย ๆ
แนวคิดนี้คือหัวใจของ Proof-of-Work Chain ที่ Satoshi อธิบายไว้ใน Bitcoin Whitepaper
ถ้าคุณย้อนกลับไปแก้ Transaction เก่า Merkle Root ของ Block นั้นก็เปลี่ยน
Header เปลี่ยน
Hash เปลี่ยน
Proof of Work เดิมใช้ไม่ได้
และ Block หลังจากนั้นก็อ้างถึง Hash ของ Block ก่อนหน้าอีก
ดังนั้นการแก้อดีตไม่ได้มี Cost แค่แก้ตัวหนังสือใน Database
คุณต้องกลับไปสร้าง Work ใหม่ แล้วพยายามไล่ตาม Chain ที่ยังเดินหน้าต่ออยู่ด้วย.
ตอนแรกผมเองก็เคยมอง Bitcoin Mining ว่า
Computer จำนวนมหาศาลกำลังเสียไฟเพื่อเดาตัวเลข
ซึ่งถ้ามองแค่นั้น…
ก็ไม่ผิดเท่าไร 😂
มันเดาจริง
มันกินไฟจริง
แต่คำถามที่ผมเริ่มสนใจมากกว่าคือ
ทำไมระบบการเงินดิจิทัลที่ไม่มีบริษัท ไม่มีธนาคารกลาง และไม่มีใครมีสิทธิ์กดปุ่ม Undo ถึงยอมเอาพลังงานจริงจากโลกภายนอกมาเป็นส่วนหนึ่งของการเขียนประวัติของมัน?
อันนี้ผมว่า…
น่าคิดต่อกว่าแค่ถามว่า
“ขุด Bitcoin เดือนหนึ่งได้เงินกี่บาท?”