ความยาก Bitcoin
ปุ่มหมุนปรับตัวเองที่ทำให้บล็อกออกทุก 10 นาที — แม้นักขุดจะเข้า-ออกเครือข่ายตลอดเวลา
ความยาก
สด- ปรับครั้งหน้า
- +3.10%
- เหลือ
- 23
- ค่าเฉลี่ย epoch
- 9704.1 นาที
Difficulty คือตัวเลขที่ถูกประเมินค่าต่ำที่สุดใน Bitcoin ราคาขึ้นลงเป็นข่าว halving ขึ้นพาดหัว ค่าธรรมเนียม viral ในวันที่ mempool แน่น — แต่ difficulty คือปุ่มเงียบ ๆ ที่คอยทำให้ระบบทำงานอย่างซื่อสัตย์ และทำหน้าที่นี้มาโดยไม่มีการแทรกแซงจากมนุษย์เลยแม้แต่ครั้งเดียวตั้งแต่มกราคม 2009 ในฐานะวิศวกรไทยที่รัน Bitcoin Core มาตั้งแต่ปี 2017 ผมหลงใหลกับมันเพราะมันเป็นหนึ่งในชิ้นงาน feedback control ที่สะอาดที่สุดเท่าที่ผมเคยอ่านมาในระบบกระจายศูนย์ ไม่มี PID controller ไม่มี oracle ไม่มี governance มีแค่สูตรเดียว ที่ full node ทุกตัวคำนวณทุก 2,016 blocks แล้ว network ก็ปรับตัวเอง ขอเล่าให้ฟังว่ามันคืออะไร ทำไมมันถึงเวิร์ก และ dashboard ของคุณกำลังบอกอะไรอยู่
Difficulty จริง ๆ แล้วคืออะไร
การขุด Bitcoin คือเกมเดา miners hash block header ซ้ำไปซ้ำมา เปลี่ยน nonce ไปเรื่อย ๆ จนกว่า hash จะตกต่ำกว่า target ค่า target เป็นเลข 256-bit — target ยิ่งต่ำ hash ที่ถูกต้องก็ยิ่งหายาก แปลว่าต้องเดามากขึ้นโดยเฉลี่ย difficulty คือการ rescale ค่า target ให้มนุษย์อ่านง่ายขึ้น — difficulty 1 คือค่าที่ง่ายที่สุดที่ Bitcoin เคยใช้ และ difficulty ทุกวันนี้ (เลขขึ้นไปถึงหลักล้านล้าน) แปลว่า target เล็กลงไปเป็นล้านล้านเท่า ส่วน proof-of-work ใน Bitcoin whitepaper อธิบายกลไกนี้ในแค่สองหน้ากระดาษ และนั่นคือทั้งหมดของเรื่องนี้จริง ๆ
การหา hash ที่ใช้ได้นั้นเป็นเรื่อง probabilistic ไม่มีทางลัด ไม่มีพีชคณิต ไม่มีโครงสร้างฉลาด ๆ ให้ exploit ได้ คุณ hash คุณตรวจ คุณทำซ้ำ
Target 10 นาที
Protocol ตั้งเป้าให้ block หนึ่งเกิดทุก 600 วินาที — สิบนาที — โดยเฉลี่ย คำว่าเฉลี่ยเป็นคีย์เวิร์ดสำคัญ ช่วงเวลาระหว่าง block follow exponential distribution ซึ่งเป็น memoryless waiting time ของ Poisson process ต่อให้ hashrate และ difficulty นิ่งสนิทแค่ไหน คุณก็จะเห็น block หนึ่งมาภายใน 30 วินาที แล้วอีก block ห่างไป 45 นาทีอยู่เป็นปกติ ความ burst ฝังอยู่ในธรรมชาติของมัน ทวีตประมาณ “ไม่มี block มาตั้งชั่วโมงแล้ว” ปกติไม่ใช่ปัญหาของ difficulty — มันแค่เรขาคณิตของ memoryless arrivals
Retargeting epochs
ทุก 2,016 blocks — ราว ๆ สองสัปดาห์ — full node ทุกตัวคำนวณ difficulty ใหม่อย่างอิสระ สูตรนี้คือหัวใจของระบบ implementation จริงอยู่ใน pow.cpp ของ Bitcoin Core เขียนเป็นข้อความก็ประมาณนี้
expected_time = 2016 * 600 = 1,209,600 seconds (≈ 14 days)
actual_time = timestamp(last_block_of_epoch) - timestamp(first_block_of_epoch)
new_difficulty = old_difficulty * (expected_time / actual_time)
ถ้า 2,016 blocks ที่ผ่านมาใช้เวลาน้อยกว่าสองสัปดาห์ แสดงว่า hashrate ต้องโตขึ้น difficulty ก็จะขึ้น ถ้าใช้เวลามากกว่า แสดงว่า hashrate หดลง difficulty ก็จะลง input อย่างเดียวคือ timestamps ที่อยู่ใน chain อยู่แล้ว node ของคุณกับ node ของ miner ใน Texas คำนวณค่าเดียวกันจากข้อมูลเดียวกัน — นั่นคือเหตุผลที่เราตกลง difficulty ของ epoch ถัดไปได้โดยไม่เคยคุยกันเลย
ขอบเขตการปรับ
Protocol จำกัดการ retarget ครั้งเดียวไว้ที่ factor ของ 4 ทั้งสองทิศทาง — new_difficulty / old_difficulty ถูก clamp ให้อยู่ใน [0.25, 4.0] นี่คือ safety rail ป้องกันการ manipulate timestamp และป้องกัน shock แบบขั้นเดียวที่รุนแรงเกินไป ในความเป็นจริง การ retarget เกือบทุกครั้งที่ผม log มาอยู่ในช่วง ±10% ตัว clamp เป็น guardrail ไม่ใช่ regulator
ทำไม retargeting ถึงเวิร์ก
เหตุผลที่กฎง่าย ๆ นี้พอเพียง — ไม่ต้องมี central feed ไม่ต้องมีคณะกรรมการ — คือ timestamps เป็น output ของ miners ที่แข่งกันเอง และตลอด 2,016 ครั้งของการทดลอง law of large numbers ทำงานของมัน Memoryless block production บวกกับค่าเฉลี่ยรายสองสัปดาห์ บวกกับสูตรที่กำหนดไว้แน่ชัด เท่ากับการแก้ตัวเองได้ ถ้า hashrate เพิ่มเป็นสองเท่าข้ามคืน 2,016 blocks ถัดไปจะมาถึงในราว ๆ หนึ่งสัปดาห์ และสูตรก็จะเพิ่ม difficulty เป็นสองเท่า ถ้า hashrate ลดลงครึ่งหนึ่ง epoch จะใช้เวลาสี่สัปดาห์ และ difficulty ก็จะตก ไม่มีมนุษย์ใน loop และไม่มีมนุษย์ที่ จะเข้ามา ใน loop ได้ด้วย
ทำไม difficulty ถึงขึ้นมาเยอะขนาดนี้
ตอน Satoshi ขุด genesis block ในเดือนมกราคม 2009 เขา hash บน CPU ที่ความเร็วประมาณ 7 megahashes ต่อวินาที วันนี้ network hashrate อยู่ราว 700 exahashes ต่อวินาที — สิบสี่ orders of magnitude ห่างกัน คือ hash มากกว่าเดิมร้อยล้านล้านเท่า — และ difficulty ก็ track ตามไปแบบสัดส่วน เลื่อนดู chart hashrate ในประวัติศาสตร์ แล้วดูเส้นโค้งวิ่งผ่านยุค CPU, GPU, FPGA, และ ASIC แต่ละรุ่นทำให้ hash ถูกลงต่อ joule miners ใหม่ ๆ ก็เข้ามา epoch สั้นลง difficulty ก็ขึ้นเพื่อรองรับ ตัวเลขนี้คือบันทึกฟอสซิลของเงินทุนที่ลงไปปกป้อง chain
วิธีอ่าน dashboard
Difficulty panel ทั่ว ๆ ไป — รวมถึงของเราด้วย — แสดงข้อมูลสี่อย่าง พอรู้สูตรแล้ว ทุกอย่างก็เห็นชัดเจนทันที
- Progress % คือ
(blocks_into_epoch / 2016) * 100ตัวบ่งบอกว่ามาถึงไหนแล้วใน window ปัจจุบัน - Next Δ คือการเปลี่ยนแปลงที่คาดการณ์ตอน retarget ถัดไป โดยใช้ค่าเฉลี่ยที่กำลังวิ่งอยู่ของ epoch ค่าบวก = ยากขึ้น ค่าลบ = ง่ายลง เป็นแค่ประมาณการ ตัวเลขจริงจะ lock in ตอน block ที่ 2,016
- Blocks left คือ
2016 - blocks_into_epochคูณด้วยเวลาเฉลี่ยต่อ block ปัจจุบันเพื่อประมาณ ETA - Epoch avg คือค่าเฉลี่ยจริงของช่วงเวลาระหว่าง block จนถึงตอนนี้ เปรียบเทียบกับ 600s — ต่ำกว่า = difficulty ขึ้น สูงกว่า = ลง
Miners ดูอะไร
สำหรับ miners difficulty คือตัวเลขที่สำคัญที่สุดในโลก — สำคัญกว่าราคาด้วยซ้ำ +5% แปลว่ารายได้ต่อ joule ตกลง 5% ใน epoch ถัดไป −5% คือลาภลอย — hashprice (ตัวเลขดอลลาร์ต่อ terahash ต่อวันที่โต๊ะขุดยึดถือเป็นชีวิตจิตใจ) เด้งขึ้นทันที เมื่อ difficulty ขึ้นต่อกันหลาย epoch แล้วราคาไม่ขึ้นตาม miners ที่มีประสิทธิภาพต่ำที่สุด — เครื่องเก่า ค่าไฟแพง — จะถูกบีบจนต้องถอดปลั๊ก hashrate ออกจากระบบ epoch ถัดไปก็จะยาวขึ้น และ difficulty ก็ตกลงมา นั่นคือ capitulation การ clearing ของตลาดในการทำงานจริง
ทำไมมันสำคัญสำหรับ user
สำหรับคนทั่วไป difficulty คือความปลอดภัย Hashrate ที่อยู่เบื้องหลังมันคือพลังงานจริงที่ผู้โจมตีต้องเอามาเทียบเท่าเพื่อจะแก้ประวัติศาสตร์ การเพิ่ม difficulty เป็นสองเท่าก็เพิ่มต้นทุนของการโจมตี 51% เป็นสองเท่าโดยประมาณ การเปลี่ยนแปลง difficulty ไม่ส่งผลโดยตรงกับธุรกรรมของคุณ — ค่าธรรมเนียมและเวลายืนยันถูกควบคุมโดย mempool ไม่ใช่ retarget — แต่มัน correlate กับสุขภาพเชิงโครงสร้างของการขุด: รอบของชิป ASIC, ตลาดพลังงานใน Texas, Paraguay และ Bhutan, และจังหวะของ capitulation
เคสประวัติศาสตร์ — กรกฎาคม 2021
การปรับลงครั้งใหญ่ที่สุดในประวัติศาสตร์เกิดในเดือนกรกฎาคม 2021 หลังจากการแบน mining จากจีนปี 2021 อย่างกะทันหัน และราว ๆ ครึ่งหนึ่งของ network hashrate offline ภายในไม่กี่สัปดาห์ การ retarget เมื่อ 3 กรกฎาคม 2021 อยู่ที่ราว ๆ −27.94% ซึ่งเป็นการปรับลงที่ลึกที่สุดที่เคยมีมา Block ในช่วง epoch นั้นช้าลง — เฉลี่ยห่างกันราว ๆ 18 นาที — แล้วก็ snap กลับเมื่อ miners ที่ย้ายฐานกลับมาเสียบปลั๊กที่อื่น ภายในหกเดือน hashrate ก็ทะลุจุดสูงสุดก่อนการแบนไปแล้ว ระบบทำสิ่งที่มันถูกออกแบบมาให้ทำเป๊ะ ๆ โดยไม่มีการแทรกแซง ไม่มี patch ไม่มี governance
ตำนาน “chain death”
เป็นระยะ ๆ จะมีโพสต์ panic อ้างว่าถ้า hashrate ตกแรงพอ block จะหยุดและ Bitcoin จะตายกลาง epoch — เรียกว่า “difficulty bomb” หรือ “chain death spiral” นี่ผิด Difficulty ไม่ปรับกลาง epoch ถ้าพรุ่งนี้ 90% ของ hashrate หายไป block ก็แค่ช้าลงเป็นช่วงเวลา 100 นาที และ epoch ปัจจุบันก็จะใช้เวลาประมาณ 20 สัปดาห์แทนสองสัปดาห์ พอจบ epoch สูตรก็จะปรับ difficulty ลง (โดยถูก clamp ที่พื้น 4x ซึ่งอาจต้องใช้หลาย epoch กว่าจะดูดซับได้หมด) แล้วเวลาต่อ block ก็กลับมาปกติ ช้า น่าเกลียด เจ็บปวด — แต่ไม่ตาย Chain ก็ยังเดินต่อไปได้
ทำไมไม่มีใครเปลี่ยนกฎได้
ค่าคงที่ 2016 กับ 600 และ ±4x clamp อยู่ใน source code ของ Bitcoin Core การจะเปลี่ยนมันคือ hard fork — node operator ทุกคนบนโลกต้องดาวน์โหลด software ใหม่และรันมัน นี่คือปัญหาการ coordination ที่ไม่มี central authority มาแก้ จนถึงตอนนี้ ยังไม่มีใครพยายามจริงจังเลย กฎเหล่านี้ยืนหยัดมาตั้งแต่ปี 2009 — ไม่ใช่เพราะมีใครบังคับใช้ แต่เพราะ operator อิสระหลายพันคนเลือกที่จะไม่เปลี่ยนมัน นี่คือปาฏิหาริย์เงียบ ๆ ของ difficulty Feedback loop ที่ไม่มีใครเป็นเจ้าของ