นักขุดใช้ nonce อย่างไร?
นักขุดสร้างส่วนหัวบล็อก กำหนด nonce เป็น 0 แล้วแฮชข้อมูลนั้น ถ้าแฮชสูงกว่าค่าเป้าหมาย ก็เปลี่ยน nonce เป็น 1 แล้วลองอีกครั้ง จากนั้นลอง 2 ต่อไปเรื่อย ๆ ชื่อนี้ย่อมาจาก “number used once” หรือ “หมายเลขที่ใช้ครั้งเดียว”
ไม่มี nonce ตัวไหนดีกว่าตัวอื่น คาดเดาแฮชไม่ได้ ดังนั้นทุกครั้งที่ลองจึงมีโอกาสชนะเพียงน้อยนิดเท่ากัน นี่คือสิ่งที่ทำให้การขุดยุติธรรม: ยิ่งลองได้มากครั้งต่อวินาที ก็ยิ่งมีโอกาสมากขึ้น และไม่มีอย่างอื่นช่วยได้
จะเกิดอะไรขึ้นเมื่อ nonce หมด?
ข้อมูลขนาด 4 ไบต์เก็บค่าได้ 4,294,967,296 ค่า เครื่องรุ่นใหม่ลองครบทุกค่าได้ในเวลาไม่ถึงหนึ่งในพันวินาที นักขุดจึงเปลี่ยนข้อมูลอย่างอื่นในบล็อก แล้วเริ่มลอง nonce ใหม่
ลูปของนักขุด
- 01
ลองทุก nonce
0, 1, 2 และต่อไปจนถึง 4,294,967,295 นี่คือค่าทั้งหมดที่ 4 ไบต์เก็บได้
- 02
หมดลงอย่างรวดเร็ว
เครื่องเดียวที่มีกำลังขุด 100 TH/s ใช้เวลาประมาณ 43 ในล้านวินาทีในการลองครบทั้งหมด
- 03
เปลี่ยน extra nonce
นักขุดแก้ไขช่องข้อมูลสำรองในธุรกรรมรับรางวัลของตัวเอง (coinbase)
- 04
Merkle root ใหม่
ธุรกรรมนั้นเปลี่ยนไป ทำให้ merkle root เปลี่ยน และ nonce ทุกค่าก็สร้างแฮชใหม่ได้อีกครั้ง
โดยทั่วไปจะใช้ extra nonce ซึ่งเป็นช่องข้อมูลสำรองในธุรกรรม coinbase การเปลี่ยนค่านี้จะเปลี่ยน Merkle root ทำให้ได้ส่วนหัวบล็อกชุดใหม่ทั้งหมดให้ลอง นักขุดยังปรับเวลาเล็กน้อยได้ และในเครื่องจำนวนมากที่ใช้กันในปัจจุบัน ก็ปรับบิตบางส่วนของช่องข้อมูลเวอร์ชันได้ด้วย
แหล่งข้อมูล
- Nonce · Bitcoin Wiki
- อัลกอริทึมแฮชบล็อก · Bitcoin Wiki
- ข้อมูลอ้างอิงเกี่ยวกับบล็อกเชน: ส่วนหัวบล็อก, Merkle tree, เป้าหมาย · เอกสารนักพัฒนา Bitcoin
ตัวเลขเรียลไทม์ในหน้านี้มาจาก API ของ CloudMineCrypto และข้อมูลบล็อกเชนสาธารณะ ซึ่งอัปเดตเป็นประจำและมีป้ายกำกับกำกับไว้ ใช้เพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำทางการเงิน