ข้ามไปยังเนื้อหา

เวลาบล็อก

เวลาบล็อกอาจหมายถึง slot ที่กำหนดไว้ ช่วงเวลาเป้าหมายของ proof-of-work หรือช่วงห่างที่สังเกตระหว่างบล็อกแคนนอนิคัล คู่มือนี้อธิบายวิธีวัดแต่ละเวลาโดยไม่สับสนกับการบรรจุ การยืนยัน หรือ finality

อัปเดต

จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้

คำตอบโดยตรง

เวลาบล็อกไม่ใช่นาฬิกาจับเวลาสากลหนึ่งเดียว ใน proof-of-work คำนี้มักหมายถึงเป้าหมายระยะยาวของกระบวนการมาถึงของบล็อกแบบสุ่ม ใน proof-of-stake ที่อิง slot อาจหมายถึงระยะเวลาที่กำหนดไว้สำหรับโอกาสเสนอ block ส่วนช่วงห่างที่สังเกตระหว่างบล็อกแคนนอนิคัลสองบล็อกเป็นอีกค่าหนึ่ง และการบรรจุธุรกรรม ความลึกของการยืนยัน และ finality ต่างมีนาฬิกาแยกกัน

บน mainnet Ethereum ปัจจุบันแบ่งเวลาเป็น 12-second slots โดยมี 32 slots ต่อ epoch ผู้เสนออาจพลาด slot ทำให้บล็อกที่ผลิตติดกันห่าง 24 seconds, 36 seconds หรือมากกว่าได้ แม้ระยะเวลา slot ยังคงเป็น 12 seconds ส่วนใน Bitcoin ค่า 600 seconds คือช่วงเฉลี่ยเป้าหมายที่ระบบความยากใช้ ไม่ใช่เส้นตายของบล็อกถัดไป

ต้องระบุเชน เครือข่าย fork หน้าต่างสังเกต และนาฬิกาเสมอ timestamp ในส่วนหัวเป็นข้อมูลโปรโตคอล ไม่จำเป็นต้องเป็นเวลาที่ทุกโหนดได้รับบล็อก ช่วงเวลาที่สั้นลงอาจทำให้มีโอกาสบรรจุเร็วขึ้น แต่ไม่ได้รับประกัน throughput สูงขึ้น ค่าธรรมเนียมต่ำลง รีออร์แกไนซ์น้อยลง หรือ finality เร็วขึ้นด้วยตัวมันเอง

คาดว่าจะรอ
1.2 min
ช่วงภาพประกอบ
54s - 1.5 min

ผลลัพธ์เป็นการประมาณทางการศึกษา โดยไม่รวมกฎของสถานที่ ภาษี เวลาแฝง พฤติกรรมของ Oracle และพารามิเตอร์เฉพาะโปรโตคอลอื่นๆ เว้นแต่จะแสดงไว้

วิธีการทำงาน

  1. ระบุเชน เครือข่าย layer, fork ที่ใช้งาน head แคนนอนิคัล โหนดหรือผู้ให้บริการ RPC และหน้าต่างสังเกต UTC บันทึกแฮชบล็อกแทนการถือว่าความสูงเพียงอย่างเดียวเป็นตัวระบุที่ไม่ซ้ำ
  2. กำหนดเมตริกก่อนคำนวณ ได้แก่ ช่วงเป้าหมายของโปรโตคอล ระยะเวลา slot ที่กำหนดไว้ ผลต่าง timestamp ของบล็อกแคนนอนิคัลที่ติดกัน ผลต่างเวลารับในเครื่อง ความหน่วงในการบรรจุธุรกรรม ความลึกของการยืนยัน หรือเวลา finality
  3. เก็บแฮช แฮช parent ความสูงหรือ slot, timestamp โปรโตคอล และเวลารับแบบ monotonic ในเครื่องของแต่ละบล็อก เก็บ slot ที่พลาด บล็อก stale และบล็อกที่ถูกรีออร์แกไนซ์เป็น state ชัดเจนแทนการลบทิ้งเงียบๆ
  4. ไล่สายบรรพบุรุษแคนนอนิคัล คำนวณช่วงห่างที่ติดกัน และเผยแพร่จำนวนตัวอย่าง หน้าต่าง ค่าเฉลี่ย มัธยฐาน เปอร์เซ็นไทล์ ค่าต่ำสุด ค่าสูงสุด และอัตรา slot ที่พลาด ค่าเฉลี่ยเดียวอธิบายการกระจายเวลารอที่เบ้ไม่ได้
  5. ใช้แบบจำลองฉันทามติ สำหรับ Ethereum ให้แยก slot, epoch, head และ checkpoint แบบ safe กับ finalized สำหรับ Bitcoin ให้แยก 600-second target, การมาถึงแบบสุ่มที่ขึ้นกับ hash rate, chainwork, หน้าต่างปรับความยาก 2,016-block และกฎความถูกต้องของ timestamp
  6. แยกความหน่วงของผู้ใช้ออกเป็นการ broadcast การรอใน mempool ท้องถิ่นหรือ sequencer การเสนอบล็อก การเผยแพร่ การบรรจุแบบแคนนอนิคัล การยืนยัน สถานะ safe หรือ finalized และการประมวลผลของ bridge, exchange หรือแอปพลิเคชัน
  7. ตรวจเทียบโหนดอิสระและทดสอบ clock skew, ช่องว่าง RPC, ผู้เสนอที่พลาด การเปลี่ยน hash rate, การแบ่งเครือข่าย รีออร์แกไนซ์ finality ล่าช้า sequencer หยุดทำงาน และพารามิเตอร์ fork เปลี่ยน ก่อนกำหนด SLA

ตัวอย่างคำนวณ

  • บล็อก Ethereum ผลิตที่ slot 1,000 และ 1,003 ผลต่าง timestamp ตามกำหนดคือ (1,003 - 1,000) * 12 = 36 seconds โดย slot 1,001 และ 1,002 ถูกพลาด ความสูงบล็อกเพิ่มหนึ่งบล็อกที่ผลิต แต่หมายเลข slot เพิ่มสาม
  • ใน 300 slots หน้าต่างตามกำหนดคือ 300 * 12 = 3,600 seconds หากผลิต 294 canonical blocks จะมี 6 missed slots อัตราส่วนการผลิตคือ 294 / 300 = 98% อัตราหน้าต่างคือ 294 / 3,600 = 0.0816666667 blocks/second และส่วนกลับคือ 12.2448979592 seconds/block นี่เป็นสถิติของหน้าต่าง ไม่ใช่คำรับรอง
  • หนึ่ง epoch ของ Ethereum คือ 32 * 12 = 384 seconds = 6.4 minutes และสอง epoch ยาว 768 seconds = 12.8 minutes เสียงโหวต checkpoint กับการมีส่วนร่วมเป็นตัวกำหนด finality ดังนั้นเลขคำนวณนี้ไม่ใช่ SLA finality คงที่ ปัจจุบัน Ethereum อธิบาย finality ปกติไว้ที่ประมาณ 15 minutes
  • ภายใต้แบบจำลองการมาถึงแบบเอ็กซ์โพเนนเชียลอย่างง่ายของ Bitcoin ซึ่งมีค่าเฉลี่ย 600 seconds ความน่าจะเป็นที่จะไม่มีบล็อกใน 1,200 seconds คือ e^(-1,200/600) = e^-2 = 13.5335283237% ดังนั้นความน่าจะเป็นที่จะมีอย่างน้อยหนึ่งบล็อกคือ 86.4664716763% หน้าต่างเป้าหมายความยากคือ 2,016 * 600 = 1,209,600 seconds = 14 days ไม่มีตัวเลขใดกำหนดเวลาของบล็อกรายบล็อก

ความเสี่ยง

  • ใช้เชน เครือข่าย layer, fork หรือพารามิเตอร์ในอดีตผิด
  • เปรียบเทียบ slot ที่กำหนดไว้กับเป้าหมาย proof-of-work หรือช่วงห่างบล็อกที่สังเกต
  • ถือว่าเป้าหมายโปรโตคอลหรือค่าเฉลี่ยตัวอย่างรับประกันเวลารอสูงสุด
  • เลือกหน้าต่างสังเกตสั้น เงียบ หรือคัดมาเพื่อสนับสนุนข้อสรุป
  • ถือว่า timestamp ของส่วนหัวบล็อกคือเวลาผลิตหรือรับจริงที่แม่นยำ
  • ผสมนาฬิกาของผู้สังเกตที่เวลาในเครื่องไม่ตรงกัน
  • ตัด slot ที่พลาดออกหรือสับสนระหว่างบล็อกว่างที่ผลิตกับ slot ที่พลาด
  • รวมบล็อก stale หรือบล็อกที่ถูกรีออร์แกไนซ์ในชุดช่วงห่างแคนนอนิคัล
  • นับการเปลี่ยนความสูงโดยไม่ตรวจแฮช parent และสายบรรพบุรุษ
  • ซ่อนช่องว่าง RPC, indexer, websocket หรือ log ในเครื่องเป็นพฤติกรรมเครือข่าย
  • รายงานค่าเฉลี่ยโดยไม่มีมัธยฐาน เปอร์เซ็นไทล์ ช่วง และจำนวนตัวอย่าง
  • สับสนระหว่างเวลารอ mempool หรือ sequencer กับเวลาผลิตบล็อก
  • สับสนระหว่างการบรรจุครั้งแรกหรือหนึ่งการยืนยันกับ finality ทางเศรษฐกิจ
  • แปลงจำนวนการยืนยันเป็นจำนวนนาทีตายตัว
  • ถือว่า 10-minute target ของ Bitcoin เป็น SLA การชำระเงินหรือขุด
  • มองข้ามการเปลี่ยน hash rate, ความล่าช้าในการปรับความยาก และขอบเขต timestamp ของผู้ขุด
  • มองข้ามแรงกดดันด้านการเผยแพร่ การตรวจสอบ และ fork ชั่วคราวเมื่อช่วงสั้นลง
  • ถือว่า 12-second slot ของ Ethereum รับประกันบล็อกที่ไม่ว่าง
  • ถือว่าบล็อก sequencer ของ L2 คือการเผยแพร่ settlement หรือ finality บน L1
  • สรุป TPS ค่าธรรมเนียม ความปลอดภัย หรือการกระจายศูนย์จากเวลาบล็อกเพียงอย่างเดียว

ความเข้าใจผิดที่พบบ่อย

  • ทุก slot ของ Ethereum มีบล็อก slot เป็นโอกาสเสนอ ผู้เสนอที่พลาดหรือการเผยแพร่ล้มเหลวอาจทำให้ว่าง
  • Bitcoin ผลิตหนึ่งบล็อกทุกสิบนาทีพอดี สิบนาทีคือเป้าหมายความยากและพารามิเตอร์ค่าเฉลี่ยของแบบจำลอง เวลารอแต่ละครั้งแตกต่างกันมาก
  • timestamp ของบล็อกคือเวลาที่ทุกโหนดได้รับบล็อก timestamp โปรโตคอลกับ log การมาถึงในเครื่องมีผู้สร้าง ข้อจำกัด และนาฬิกาต่างกัน
  • การลดเวลาบล็อกครึ่งหนึ่งเพิ่ม TPS ที่ปลอดภัยเป็นสองเท่า และลดค่าธรรมเนียมหรือ finality ครึ่งหนึ่งโดยอัตโนมัติ ความจุ ภาระงาน ความต้องการ การเผยแพร่ และเสียงโหวตฉันทามติยังเป็นข้อจำกัดอิสระ
  • บล็อก L2 ที่เร็วมี finality ของ Ethereum แล้ว การบรรจุโดย sequencer การเผยแพร่ข้อมูลบน L1 การบรรจุแคนนอนิคัลบน L1 และ finality เป็นคนละ state

หัวข้อที่เกี่ยวข้อง

แหล่งข้อมูล

การนำทาง

ค้นหาในวิกิ...