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 เลย (จริงๆตัว coinbase transaction ก็คือ one special coinbase input แต่แค่มันไม่ต้องการ previous UTXO แค่นั้นเอง) ซึ่งก็คือปล่อยโล่งๆได้เลย อยู่ดีๆก็เสกขึ้นมากลางอากาศแล้วก็ยิงเข้าไปใน 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 ตามต้องการ
พูดง่ายคือ Hash Function คือการที่เราเอาข้อมูลอะไรก็ได้ จำนวนเท่าไรก็ได้ ไม่ว่าจะสั้นหรือยาว มันจะให้ผลลัพธ์ออกมาเป็น Fix Lenght เสมอ และเมื่อเราเปลี่ยนข้อมูลทางฝั่ง Input เพียงนิดเดียว หรือแม้กระทั่งใส่ Space Bar เพียงอันเดียว มันจะมีผลทำให้ข้อมูลทางฝั่ง Output เละเทะเสมอ
แน่นอนว่า Cryptographic Hash Function นั้นเป็น One Way Function ที่ไม่สามารถคำนวณย้อนกลับได้ เพียงแค่นี้ความบรรลัยก็เกิดขึ้น
วิธีที่ใช้งานได้จึงกลายเป็น:
ลอง
แล้วก็
ลองอีก
ตรงนี้เองที่คำว่า Proof of Work เริ่มมีความหมาย
เพราะถ้าคุณเอา Block Header ที่มี Hash ถูกต้องมาให้ผมดู ผมจะสามารถทำการตรวจสอบมันได้ง่ายมาก
ผมก็เอา Block Header นั้นไปเข้า Hash เลยทันที
ตรวจว่า Hash ผ่าน Target หรือเปล่า
จบข่าวในพระราชสำนัก
แต่การที่คุณจะ หา Header แบบนั้นมาให้ผมได้…
คุณต้องไป “Work” มาก่อน ^_^
แล้ว Proof of Work คืออะไร?
ผมชอบมองแบบนี้มากกว่า
มันราคาแพงตอนสร้าง แต่มันราคาถูกตอนตรวจ
ถ้ามีใครถามผมว่า Bitcoin Mining คืออะไร แล้วให้ตอบสั้น ๆ ผมคงเริ่มจากตรงนี้แหละ Miner ต้องจ่ายต้นทุนเพื่อสร้าง Proof of Work แต่ Node สามารถตรวจสอบ Work นั้นได้ง่ายกว่าหลายขุม
Miner อาจต้องใช้ ASIC จำนวนมหาศาล
แดกทั้งไฟ
ใช้ทั้งเวลา
สร้างความร้อน สร้าง Heat
เสียค่าเครื่อง ASIC
ทดลอง Hash จำนวนมหาศาลนับครั้งไม่ถ้วน
เพื่อให้ได้ Block หนึ่งก้อน
แต่!!! Node ของผมไม่ต้องทำงานทั้งหมดนั้นซ้ำ
มันแค่ตรวจสอบ Proof of Work และตรวจสอบกฎอื่น ๆ ของ Block
ถ้าถูก…
รับ
ถ้าผิด…
ไม่รับ
Bitcoin Developer documentation อธิบาย Proof of Work ว่าเป็นการหา Hash ที่ต่ำกว่า Target ซึ่งโดยเฉลี่ยต้องใช้ brute-force จำนวนหนึ่ง และเมื่อ Block ถูกต่อกันไปเรื่อย ๆ การย้อนกลับไปเปลี่ยน Block เก่าก็ต้องทำ Proof of Work ใหม่และไล่ตามงานที่สะสมอยู่หลังจากมันด้วย
นี่เริ่มเชื่อมกับบท Bitcoin Node แล้วนะครับ
Miner ทำงานราคาแพง
Node ตรวจงานราคาถูก
แล้ว Difficulty หรือค่าความยากในการขุดนั้นมาจากไหน?
มีปัญหาอีกหนึ่งข้อที่จะชวนให้เราต้องมาปวดหัวกัน
สมมุติวันนี้มี Miner อยู่ 100 เครื่อง
พรุ่งนี้ Bitcoin ราคาแพงขึ้น ทุกคนแห่ซื้อ ASIC มาช่วยกันขุดจนกลายเป็น 10,000 เครื่อง
ถ้า Target ไม่เปลี่ยน Block ก็จะถูกหาเจอเร็วขึ้นเรื่อย ๆ ถูกป่ะ?
Bitcoin เลยมีระบบปรับ Difficulty โดยอัตโนมัติ
โดยภาพใหญ่แล้ว Bitcoin Network จะปรับ Target ทุกๆ 2,016 Blocks หรือประมาณ 2 Weeks เพื่อพยายามรักษาเวลาการสร้าง Block โดยเฉลี่ยให้อยู่แถว ๆ 10 นาที
นี่คือจุดเฉลยของ Magic Number เลยนะว่า Block Time ของ Bitcoin ทุกๆ 10 นาทีนี้มันมาจากไหน? ซึ่งคำตอบก็คือระบบของ Bitcoin มันไม่ได้ Sync Time จากหแนาฬกา Big Ben หรือ Sync Time จากกองทัพเรือ กรมอุทกศาสตร์ แต่เลข 10 นาที นั้นเกิดจากเครื่อง Miner ทั่วโลกทำการ Hash พร้อมกันแล้วจะมีสักเครื่องบนโลกใบนี้ที่เจอ Hash ที่เข้า Traget ของ Block ใหม่พอดิพอดี ^_^
เมื่อ Hashrate เพิ่มมาก?
Target ก็ต้องยากขึ้น
และเมื่อ Hashrate หายไป?
Target ก็ปรับให้ง่ายลงในรอบ Adjustment
มันไม่ได้บอกว่า
“ทุก Block ต้องออกตรง 10 นาทีเป๊ะ”
บาง Block อาจมาเร็วมากก็ได้
บาง Block รอนานจนเริ่มสงสัยว่า Internet บ้านกูเสียหรือเปล่า 😂
10 นาทีเป็นค่าเฉลี่ยที่ระบบพยายามรักษาในระยะยาว ไม่ใช่นาฬิกาจับเวลาของแต่ละ Block นะจ๊ะ
ตรงจุดนี้มันทำให้ผมเริ่มเข้าใจว่า Bitcoin Mining คืออะไร มากขึ้นอีกหน่อยแล้วล่ะ เพราะมันไม่ได้มีแค่เรื่องว่าเครื่องใคร Hash ได้เร็วกว่า แต่ Network ยังปรับ Target ตามกำลังขุดที่เข้ามา เพื่อให้การหา Block ไม่เร็วขึ้นเรื่อย ๆ ตามจำนวนเครื่องที่เพิ่มขึ้น
แล้ว Miner ได้ Bitcoin จากไหน?
ตรงนี้เรากลับมาที่ Coinbase Transaction
เมื่อ Miner หา Block ที่หา Proof of Work ถูกต้องและ Block นั้นได้รับการยอมรับตามกฎของ Bitcoin Network Protocol จากนั้น Miner ก็สามารถ claim รายได้จากสองส่วนหลัก :
อันดับแรกเลยก็คือ Block Subsidy
กับ
Transaction Fees ยิบๆย่อยๆ
ซึ่ง Block Subsidy ก็คือ Bitcoin ที่ถูกผลิตขึ้นใหม่ที่ Protocol อนุญาตให้สร้างตาม Schedule
และทุก ๆ 210,000 Blocks โดยประมาณ ตัว Block Subsidy เองจะลดลงครึ่งหนึ่ง
สิ่งนี้ที่เราเรียกว่า
Bitcoin Halving
นี่เป็นนโยบายของมัน เราแก้ไขอะไรไม่ได้เลย มันเป็นเหมือนปรากฏการณ์ทางธรรมชาติไปเสียแล้วทั้งๆที่ Bitcoin นั้นถูกสร้างขึ้นโดยเงื้อมมือของมนุษย์ แต่เรากลับควบคุมมันไม่ได้เสียอย่างนั้น เจ๋งดีแฮะ
ส่วนค่า Fees นั้นมาจาก Transaction ยิบๆย่อยๆที่ Miner เลือกเข้า Block
ดังนั้นคำว่า Block Reward ที่เราใช้กันทั่วไปจึงเกี่ยวข้องกับ Subsidy + Fees
แต่มีจุดหนึ่งที่อยากย้ำจาก Blog #5:
Miner ไม่ได้เขียน Coinbase Transaction แล้วบอกว่า
“วันนี้เหนื่อยมากๆเลย ฉะนั้นฉันขอ 1,000 BTC ละกัน”
😂
เขียนได้ครับ
แต่ Node ที่บังคับใช้กฎเดิมก็ไม่จำเป็นต้องรับ Block นั้น
กล่าวคือคุณอุตส่าห์ไปหา Hash ที่เข้าเป้ากับ Target มา แต่ Node เสือกโยนทิ้งอ่ะ ^_^
เพราะงั้นเวลาเราพูดถึง 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 ซ้ำ ๆ
เราก็ต้องมีหน่วยบอกว่ามันลอง Hash ได้เร็วแค่ไหน
นั่นคือ Hashrate
เช่น:
TH/s
PH/s
EH/s
ยิ่ง Hashrate สูง ก็ยิ่งลอง Candidate Hash ได้มากครั้งต่อวินาที
แต่ Hashrate เยอะไม่ได้แปลว่า ASIC “ฉลาดกว่า”
เครื่อง ASIC มันไม่ได้เข้าใจ Bitcoin
เครื่อง ASIC ไม่ได้รู้ Austrian Economics
เครื่อง ASIC ไม่ได้อ่าน Whitepaper
เครื่อง ASIC มันไม่ได้รู้ด้วยซ้ำว่า 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 เดิม
FAQ — คำถามที่พบบ่อยเกี่ยวกับ Bitcoin Mining
Bitcoin Mining คืออะไร?
Bitcoin Mining คือกระบวนการที่ Miner สร้าง Candidate Block แล้วใช้กำลังประมวลผลเพื่อค้นหา Block Header Hash ที่มีค่าต่ำกว่าหรือเท่ากับ Target ของ Network
ถ้าหาเจอ Miner ก็สามารถเสนอ Block นั้นเข้าสู่ Bitcoin Network ได้ แต่ไม่ได้หมายความว่า Miner อยากใส่อะไรลงไปใน Block ก็ได้ เพราะ Bitcoin Node แต่ละตัวก็ยังตรวจสอบว่า Block นั้นถูกต้องตาม Consensus Rules ที่ตัวเองใช้อยู่หรือไม่
Bitcoin Miner กำลังแก้โจทย์คณิตศาสตร์อยู่หรือเปล่า?
ถ้าพูดว่า Miner กำลัง “แก้โจทย์คณิตศาสตร์ที่ซับซ้อน” มันก็พอทำให้เห็นภาพ แต่จริง ๆ แล้วอาจทำให้เราเข้าใจผิดไปไกลเหมือนกัน
ASIC ไม่ได้นั่งแก้สมการลับอะไรอยู่แม้แต่น้อย แต่มันกำลังลอง Hash Candidate Block Header จำนวนมหาศาล แล้วตรวจว่า Hash ที่ได้ผ่าน Target หรือยัง
ไม่ผ่านก็ลองใหม่ ไม่ผ่านก็ลองใหม่ ง่าย ๆ แบบนั้นเลย
Nonce ใน Bitcoin Mining คืออะไร?
Nonce เป็นข้อมูลขนาด 32-bit ที่อยู่ใน Bitcoin Block Header และเป็นหนึ่งในค่าที่ Miner สามารถเปลี่ยนเพื่อสร้าง Hash ใหม่ได้
แต่การ Mining ไม่ได้มีแค่การไล่ Nonce ตั้งแต่ 0 ไปจนสุดแล้วจบ เมื่อพื้นที่นั้นไม่พอ Mining software ยังสามารถเปลี่ยนข้อมูลอื่น เช่น extra nonce ใน Coinbase Transaction ซึ่งทำให้ Merkle Root และ Block Header เปลี่ยนตามไปด้วย
Proof of Work คืออะไร?
Proof of Work คือหลักฐานที่แสดงว่า Miner ได้ใช้ Computational Work เพื่อค้นหา Block Header Hash ที่ผ่าน Target ตามที่ Network กำหนด
ส่วนที่ผมว่าน่าสนใจคือ การสร้างมันแพง แต่การตรวจมันถูก
Miner อาจต้องลอง Hash จำนวนมหาศาลกว่าจะเจอ แต่ Bitcoin Node ไม่จำเป็นต้องทำงานทั้งหมดนั้นซ้ำเพื่อดูว่า Proof of Work ถูกต้องหรือไม่
Bitcoin Mining กับ Bitcoin Node ต่างกันอย่างไร?
Miner และ Node ทำงานเกี่ยวข้องกัน แต่ไม่ใช่ของอย่างเดียวกัน
Miner แข่งขันกันสร้าง Proof of Work และเสนอ Block ใหม่ ส่วน Bitcoin Full Node ตรวจสอบ Transaction, Block และ Consensus Rules ด้วยตัวเอง
ดังนั้น Miner ขุด Block สำเร็จไม่ได้แปลว่า Node ทุกตัวต้องยอมรับ ถ้า Block นั้นผิดกฎที่ Node บังคับใช้ Node ก็สามารถ Reject มันได้
Miner เสนอ Block ส่วน Node ตรวจการบ้าน
รัน Bitcoin Mining แล้วได้เงินไหม?
Miner มีโอกาสได้รับรายได้จาก Block Subsidy และ Transaction Fees แต่ไม่ได้หมายความว่าซื้อ ASIC มาเสียบปลั๊กแล้วจะกำไรแน่นอน
รายได้และต้นทุนยังขึ้นอยู่กับหลายอย่าง เช่น Hashrate ของเครื่อง, Network Difficulty, ค่าไฟ, ราคา Bitcoin, Mining Pool Fee, Cooling และประสิทธิภาพของ Hardware
เพราะงั้นคำถามว่า “Mining ได้ Bitcoin เท่าไร?” กับ “Mining แล้วมีกำไรเท่าไร?” จริง ๆ เป็นคนละคำถามกัน แต่ Concept ของการ “เสียบปลั๊กรับตังค์” นั้นมีอยู่จริง ^_^
ทำไม Bitcoin ต้องแดกไฟฟ้าขนาดนี้?
นี่น่าจะเป็นคำถามที่ใหญ่ที่สุดของ Bitcoin Mining และเป็นข้อครหาเดียวที่ทำให้หลายๆคนมองว่า Bitcoin นั้นไร้สาระ
และผมไม่อยากจะตอบว่า
“ก็เพื่อรักษาความปลอดภัยของระบบไง จบ”
เพราะมันง่ายเกินไปที่จะตอบแบบนั้น
ลองกลับไปดูสิ่งที่ ASIC ทำ
มันเอา พลังงานจริง จากโลก Physical World
ผ่าน Hardware จริง
ใช้เวลาในโลกจริง
เพื่อสร้าง Proof of Work ให้กับข้อมูลใน Digital World
และ Proof of Work นั้นถูกผูกเข้ากับ Block Header
Block Header ก็ผูกกับ Previous Block
Previous Block ก็ผูกกับ Previous Block ก่อนหน้า…
ไปเรื่อย ๆ
แนวคิดนี้คือหัวใจของ Proof-of-Work Chain ที่ Satoshi อธิบายไว้ใน Bitcoin Whitepaper
ถ้าคุณย้อนกลับไปแก้ Transaction เก่า Merkle Root ของ Block นั้นก็เปลี่ยน
จากนั้น Block Header ก็จะเปลี่ยน
จากนั้น Hash ก็จะเปลี่ยน
และ Proof of Work เดิมก็จะใช้ไม่ได้
และ Block หลังจากนั้นก็อ้างถึง Hash ของ Block ก่อนหน้าอีก
ดังนั้นการแก้อดีตไม่ได้มี Cost แค่แก้ตัวหนังสือใน Database
คุณต้องกลับไปสร้าง Work ใหม่ แล้วพยายามไล่ตาม Chain ที่ยังเดินหน้าต่ออยู่ด้วย
ตอนแรกผมเองก็เคยมอง Bitcoin Mining ว่า
Computer จำนวนมหาศาลกำลังนั่งเผาค่าไฟมหาศาลเพื่อเดาตัวเลข
ซึ่งถ้ามองแค่นั้น…
ก็ไม่ผิดเท่าไร 😂
ก็มันเดาจริงๆอ่ะมึง
และมันก็แดกไฟจริง
แต่คำถามที่ผมเริ่มสนใจมากกว่าคือ
ทำไมระบบการเงินดิจิทัลที่ไม่มีบริษัท ไม่มีธนาคารกลาง และไม่มีใครมีสิทธิ์กดปุ่ม Undo ถึงยอมเอาพลังงานจริงจากโลก Physical World มาเป็นส่วนหนึ่งในการเขียนประวัติของมัน?
อันนี้ผมว่า…
น่าคิดต่อมากกว่าคำถามที่ว่า
“ขุด Bitcoin เดือนหนึ่งได้เงินกี่บาท?”