บล็อกบิตคอยน์
บล็อกใหม่ทุกๆ ~10 นาที — นั่นคือจังหวะการเต้นของเครือข่าย
บล็อกล่าสุด
ใหม่สุดอยู่ซ้าย- #949,512AntPool4,238 tx2.3 sat/vB4 นาที
- #949,511Foundry USA5,478 tx1.0 sat/vB27 นาที
- #949,510F2Pool4,546 tx1.1 sat/vB34 นาที
- #949,509Foundry USA5,847 tx0.3 sat/vB46 นาที
- #949,508F2Pool6,025 tx0.4 sat/vB48 นาที
- #949,507ViaBTC1,388 tx0.0 sat/vB51 นาที
- #949,506AntPool3,179 tx1.6 sat/vB55 นาที
- #949,505F2Pool3,951 tx1.6 sat/vB68 นาที
- #949,504SpiderPool3,586 tx1.0 sat/vB74 นาที
- #949,503SpiderPool3,110 tx2.0 sat/vB80 นาที
บล็อก
สด- ความสูง
- #949,513
- ช่วงเฉลี่ย
- 8.5 นาที
- ขนาดโซ่
- 1298.2 GB
ทุก ๆ ประมาณสิบนาที นักขุด Bitcoin คนใดคนหนึ่งจะหาเลขที่ทำให้ผ่าน hash puzzle ได้ broadcast บล็อกออกมา และบัญชีของเครือข่ายก็เลื่อนลงไปอีกหนึ่งแถว ในฐานะวิศวกรไทยที่รัน Bitcoin Core อยู่ในตู้เก็บของที่กรุงเทพฯ มาตั้งแต่ปี 2017 ผมเฝ้ามองโหนดของตัวเองนับบล็อกผ่านไปเป็นแสน ๆ บล็อกแล้ว แต่ละบล็อกตัวเล็ก ๆ ไม่มีบล็อกไหนตื่นเต้นเร้าใจ แต่เมื่อมารวมกัน นั่นแหละคือเหตุผลทั้งหมดว่าทำไม Bitcoin ถึงทำงานได้ ถ้าราคาคือ noise บล็อกก็คือ signal — เป็นหน่วยจริง ๆ ที่ protocol ใช้ทำงานเดียวที่มันมีหน้าที่ต้องทำ
บล็อกคืออะไรกันแน่
บล็อกคือชุดธุรกรรมที่ปิดผนึกไว้แล้ว บวกกับ header ขนาดคงที่เล็ก ๆ — มีข้อมูลดิบประมาณไม่เกิน 1 megabyte หรือราว 4 megabytes ถ้าวัดเป็น weight units (ระบบนับแบบหลัง SegWit ที่ลดน้ำหนักให้ข้อมูล witness) ข้างในมี coinbase transaction บังคับหนึ่งรายการ — ธุรกรรมพิเศษที่จ่ายให้นักขุด — แล้วตามด้วยธุรกรรมปกติเท่าที่นักขุดเลือกหยิบจาก mempool ของตัวเองเข้ามา ส่วน header ขนาด 80 ไบต์ก็ทำหน้าที่สรุปทุกอย่างที่อยู่ข้างล่าง
โซ่ที่เป็นโซ่ก็เพราะ header แต่ละอันอ้างอิงถึง hash ของบล็อกก่อนหน้า ลองไปแก้บล็อกเก่า ๆ เข้า แล้ว header ทุกอันที่ตามมาก็จะกลายเป็น invalid ทันที นี่แหละครับ security model — ที่จับมาแต่งตัวให้ดูดีนิดหน่อย
Header ของบล็อก ทีละ field
หกฟิลด์ 80 ไบต์ ระบุไว้ครบใน Bitcoin developer reference:
- Version — protocol version bits ใช้บ้างเป็นบางครั้งในการส่งสัญญาณ soft-fork
- Previous block hash — เชื่อมบล็อกนี้กับบล็อกแม่
- Merkle root — hash เดียวที่ commit ไว้กับธุรกรรมทุกรายการในตัวบล็อก
- Timestamp — เวลาที่นักขุดเคลมว่าประกอบบล็อกขึ้นมา (มี tolerance นิดหน่อย)
- Bits — ค่า difficulty target เข้ารหัสไว้แบบกระชับ
- Nonce — เลข 32-bit ที่นักขุดลองชนแบบ brute-force จนกว่า hash จะเข้าเกณฑ์ target
merkle root คือส่วนที่สวยงามที่สุด เปลี่ยนไบต์เดียวในธุรกรรมไหนก็ได้ root จะเปลี่ยน hash ของ header เปลี่ยน และ proof-of-work ก็จะเป็น invalid ทันที เนื้อทั้งหมดของบล็อกถูก commit ไว้ใน 32 ไบต์นั้นเอง
ช่วงเวลาระหว่างบล็อกไม่สม่ำเสมอ — และนั่นเป็นเรื่องปกติ
protocol ตั้งเป้าค่าเฉลี่ยช่วงเวลาไว้ที่ 10 นาที บังคับด้วย การปรับ difficulty ทุก ๆ 2,016 บล็อก แต่เวลา จริง ระหว่างบล็อกถูกแจกแจงแบบเรขาคณิต — memoryless บางทีบล็อกสองอันมาห่างกันแค่ 60 วินาที บางทีต้องรอ 40 นาที นี่ไม่ใช่ bug แต่เป็นลายเซ็นทางสถิติของกระบวนการแบบ Poisson ที่ทุกการลอง hash เป็นอิสระต่อกัน
คนที่เพิ่งเข้าวงการ Bitcoin มักจะกังวลเวลาเห็น gap 30 นาที ไม่ต้องครับ ประมาณ 5% ของเวลา gap จะเกินครึ่งชั่วโมงอยู่แล้ว และบล็อกถัดไปไม่ได้ “ติดหนี้” ความเร็วกับเรา แต่ละบล็อกเริ่มจับเวลาใหม่ตั้งแต่ศูนย์
Tip, fork และ longest chain
tip คือบล็อกล่าสุดที่ถูกยอมรับ — ปลายทางปัจจุบันของโซ่ ส่วนใหญ่แล้วเครือข่ายจะเห็นพ้องเรื่อง tip ภายในไม่กี่วินาทีของการ propagate บางครั้งนักขุดสองคนเจอบล็อก valid ที่ความสูงเดียวกันเกือบพร้อมกัน เครือข่ายก็จะแยกชั่วคราว — เกิด fork ซึ่งเกือบทุกครั้งจะคลี่คลายภายในหนึ่งหรือสองบล็อก แขนงไหนต่อยาวกว่าก็ชนะ longer chain wins ส่วนธุรกรรมในบล็อกที่ถูก orphan ก็ไหลกลับเข้า mempool ไม่มีใครเสียเงิน
นักขุด, pool และใครคือคนที่หาบล็อกได้จริง ๆ
“นักขุด” ที่ติดป้ายอยู่บนบล็อก — Foundry, AntPool, ViaBTC, F2Pool — เกือบจะเป็น pool ทั้งหมด pool ทำหน้าที่รวม hashpower จากผู้ดำเนินการอิสระเป็นพัน ๆ คนที่รันเครื่องขุดจริง ๆ แล้วแบ่งรางวัลตามสัดส่วน ชื่อ pool คือเอนทิตีที่ประสานงานและสร้าง block template ขึ้นมา ไม่ใช่บริษัทเดียวที่เปิดสวิตช์โกดังขุด ความเข้มข้นของ pool เป็นความกังวลด้านการกระจายอำนาจที่ควรจับตามอง แต่มันอยู่เหนือชั้นของเครื่องจักรทางกายภาพหนึ่งระดับ
มีบ้างเป็นบางครั้งที่บล็อกบรรจุแค่ coinbase transaction ของตัวเอง — เรียกว่า empty block คำอธิบายธรรมดา ๆ คือ พอนักขุดเพิ่งรู้ข่าวเรื่อง tip ใหม่ มักจะเริ่ม hash บน header ก่อนหน้าก่อนที่รายการธุรกรรมเต็ม ๆ จะประกอบเสร็จ เพื่อไม่ให้เปลือง hashpower พอ template พร้อม ก็สลับทันที ความไม่มีประสิทธิภาพเล็ก ๆ ไม่ใช่ข้อบกพร่อง
Block reward วันนี้
Block reward คือ subsidy บวกผลรวมของ ค่าธรรมเนียมธุรกรรม วันนี้ subsidy อยู่ที่ 3.125 BTC หลัง halving เมื่อเดือนเมษายน 2024 (คิดเป็นประมาณ 11 ล้านบาทต่อบล็อก ที่ราคาปัจจุบัน) ค่าธรรมเนียมขึ้นลงตามดีมานด์ใน mempool — ปกติประมาณ 0.05 ถึง 0.5 BTC ต่อบล็อก จะมากกว่านั้นช่วงเครือข่ายแน่น subsidy จะถูก halve อีกครั้งราว ๆ ปี 2028 และทุก ๆ สี่ปีหลังจากนั้น จนปัดเป็นศูนย์แถว ๆ ปี 2140 หลังจากนั้นนักขุดจะอยู่ได้ด้วยค่าธรรมเนียมอย่างเดียว — เป็นเหตุผลว่าทำไมเศรษฐศาสตร์ของค่าธรรมเนียมในระยะยาวถึงสำคัญต่อ security model ของ Bitcoin ขนาดนี้
ขนาดของโซ่ และโหนดของคุณเก็บอะไรบ้าง
ปลายปี 2025 blockchain ฉบับเต็มมีขนาดประมาณ 600 GB โตขึ้นปีละราว 50 ถึง 70 GB full node เก็บทุกไบต์และ verify ทุกลายเซ็นตั้งแต่ genesis ถ้าพื้นที่ดิสก์ไม่พอ ก็รัน pruned node ได้ — ทิ้งข้อมูลบล็อกเก่าหลังจาก verify เสร็จแล้ว เหลือใช้งานราว 20 GB การ prune ไม่ทำให้คุณเสียการรับประกันความปลอดภัยใด ๆ ของ Bitcoin ในการใช้งานของตัวเอง เพียงแต่คุณจะ serve บล็อกย้อนหลังให้ peer คนอื่นไม่ได้เท่านั้น เอกสารของ Bitcoin Core มีรายละเอียด trade-off ครบถ้วน
ทำไมต้องสิบนาที
ทำไมไม่หนึ่งนาที หรือหนึ่งชั่วโมง สิบนาทีคือการ compromise ที่ตั้งใจ ช่วงเวลาที่เร็วกว่านี้ทำให้รอ confirm สั้นลง แต่จะเกิด fork มากขึ้น orphan มากขึ้น และ pressure ในการ propagate ก็หนักขึ้น ช่วงเวลาที่ช้ากว่านี้ก็จะได้ consensus ที่สะอาดกว่า แต่รอกันแบบทรมานใจ การเลือกของ Satoshi ใน whitepaper — ที่ปกป้องไว้ด้วยการปรับ difficulty — ทนทานอย่างน่าทึ่ง ผ่านมาสิบห้าปีและทางเลือกอื่น ๆ มากมาย สิบนาทีก็ยังคงเป็นคำตอบที่ถูกต้อง
อ่านข้อมูลในหน้านี้ยังไง
สิ่งที่คุณเห็นแบบสด ๆ คือความสูงของ tip ปัจจุบัน, ช่วงเวลาระหว่างบล็อกล่าสุด ๆ และค่าเฉลี่ยที่กำลังวิ่ง ถ้าค่าเฉลี่ยลอยขึ้นไปเกิน 600 วินาทีอย่างมีนัย แปลว่า hashpower ลดลง — retarget ครั้งถัดไปจะปรับ difficulty ลง ถ้าต่ำกว่านั้นมาก แปลว่า hashpower โตขึ้น และ difficulty จะถูกปรับขึ้น ระบบแก้ไขตัวเองทุก ๆ 2,016 บล็อก ตรงเวลาเป๊ะ
รันโหนดของตัวเอง verify โซ่ด้วยตัวคุณเอง
ทุกอย่างในหน้านี้สรุปมาจาก API ที่ผมไว้ใจ — แต่หนทางเดียวที่จะ รู้ โซ่จริง ๆ คือต้อง verify มันด้วยตัวเอง full node ยุคนี้ sync จาก genesis ใช้เวลา 12 ถึง 24 ชั่วโมง ตรวจทุกบล็อกเทียบกับ consensus rules และจากนั้นเป็นต้นไปก็จะรับเฉพาะสิ่งที่ valid ไม่ต้องไว้ใจผม ไม่ต้องไว้ใจ mempool.space ไม่ต้องไว้ใจ block explorer เจ้าไหน นั่นแหละครับคือความหมายจริง ๆ ของ don’t trust, verify อ่าน Mastering Bitcoin แล้วรันโหนดของตัวเอง แล้วหัวใจที่เต้นในหน้านี้จะกลายเป็นสิ่งที่คุณเห็นกับตาตัวเองโดยตรง — ทีละสิบนาที