ทางเลือกแทน Beacon Chain: แบบจำลองขั้นสุดท้ายที่อิงตามคณะกรรมการสะสม
ที่มา | ethreear.ch
ผู้แต่ง | Vitalik Buterin
นี่คือการออกแบบทางเลือกที่เสนอสำหรับ Beacon Chain ซึ่งสามารถเปลี่ยนมาใช้โมเดลนี้ได้ในอนาคตอันไกล (แทนที่ CBC ที่วางแผนไว้ในปัจจุบัน) และพยายามนำเสนอคุณสมบัติหลักดังต่อไปนี้:
➤ ภายใต้สถานการณ์ปกติ ให้ความแน่นอนทางเศรษฐกิจช่องเดียวที่มีความหมาย (เช่น คุณสมบัติคล้าย Tendermint)
แม้ว่าผู้ตรวจสอบความถูกต้องส่วนใหญ่จะมีส่วนร่วมในการสมรู้ร่วมคิดเพื่อจัดระเบียบช่องเดียวใหม่ ค่าใช้จ่ายในการดำเนินการจะสูงกว่าที่เป็นอยู่มาก ซึ่งส่งผลให้ค่า Consensus-Extractable (CEV) ลดลง
➤ กำจัดการพึ่งพาตัวเลือกส้อม LMD GHOST สูง หลีกเลี่ยงข้อบกพร่องที่รู้จักเหล่านั้น และจำเป็นต้องแนะนำกฎการเลือกส้อมไฮบริดที่ซับซ้อนเพื่อแก้ไขข้อบกพร่องเหล่านี้
➤ ศักยภาพในการเปิดใช้งานขนาดเงินฝากขั้นต่ำที่ต่ำกว่าและจำนวนตัวตรวจสอบความถูกต้องที่สูงขึ้น
ความรู้เบื้องต้น
ความรู้เบื้องต้น
ให้ CONSENSUS เป็นอัลกอริธึมฉันทามติที่ปลอดภัยแบบ async (เช่น Tendermint, Casper FFG เป็นต้น) เราถือว่าอัลกอริทึมฉันทามติได้รับการออกแบบให้เกี่ยวข้องกับสล็อตและมุมมอง (มุมมองการดู) กล่าวคือ พยายามเข้าถึงฉันทามติทุกช่วงเวลาที่กำหนด เรายังสันนิษฐานว่ามันใช้เป็นอินพุตชุดตัวตรวจสอบความถูกต้อง (คุณสมบัติที่ง่ายต่อการเพิ่มในอัลกอริทึมที่สอดคล้องกันของ BFT ที่มีอยู่)
ในการออกแบบด้านล่าง เราได้ปรับเปลี่ยน CONSENSUS เพื่อให้ชุดของโปรแกรมตรวจสอบความถูกต้องที่จำเป็นในการทำให้เสร็จสมบูรณ์นั้นแตกต่างกันสำหรับการค้นหาแต่ละครั้ง นั่นคือ ใช้ CONSENSUS แทนชุดเครื่องมือตรวจสอบความถูกต้องเป็นอินพุตของฟังก์ชัน get_validator_set(view_number: int) -> แผนที่[Validator, int] (โดยที่ int แสดงถึงยอดคงเหลือของเครื่องมือตรวจสอบความถูกต้อง) ซึ่งสามารถสร้างมุมมองใหม่ มุมมองของเครื่องมือตรวจสอบความถูกต้อง ชุด . get_validator_set ควรมีคุณสมบัติที่ตัวตรวจสอบความถูกต้องตั้งค่าไว้แตกต่างกันมากสุด 1/r จากมุมมองหนึ่งไปยังอีกมุมมองหนึ่ง โดยที่ r (r=65536 ) คือระยะเวลาการกู้คืน เราหวังว่า:
ในหมู่พวกเขา |x| ส่งคืนผลรวมของค่าสัมบูรณ์ของค่า x และ diff ส่งคืนค่าหลังจากการลบค่าคีย์แต่ละค่า (เช่น diff({a: 0.1, b:0.2}, {b:0.1 , c:0.3}) = {a: 0.1, b: 0.1, c: -0.3})
ในทางปฏิบัติ ความแตกต่างระหว่างชุดเครื่องมือตรวจสอบสองชุดที่อยู่ติดกันจะรวมยอดคงเหลือที่หักออกของเครื่องมือตรวจสอบความถูกต้องที่มีอยู่ และอัตราส่วนของเครื่องมือตรวจสอบความถูกต้องที่เพิ่มเข้ามาใหม่จะเท่ากับอัตราส่วนของยอดคงเหลือที่หักออก
โปรดทราบว่าฟังก์ชัน delta ชุดตัวตรวจสอบความถูกต้องสูงสุดที่ 1/r จะใช้งานได้ก็ต่อเมื่อตัวตรวจสอบความถูกต้องก่อนหน้านี้ยังไม่สิ้นสุด หากชุดเครื่องมือตรวจสอบก่อนหน้านี้ได้รับการสรุปแล้ว ตัวอย่างของ CONSENSUS จะเปลี่ยนไป ดังนั้นการสุ่มภายในของฟังก์ชัน get_validator_set ก็จะเปลี่ยนไปโดยสิ้นเชิง ในกรณีนี้ ชุดเครื่องมือตรวจสอบสองชุดที่อยู่ติดกันจะแตกต่างกันโดยสิ้นเชิง
กลไก
กลไก
เราใช้การเลือกส้อมสองระดับ:
➤ เลือก LATEST_FINALIZED_BLOCK (บล็อกสุดท้ายที่สรุปแล้ว)
➤ เริ่มต้นด้วย LATEST_FINALIZED_BLOCK ให้ใช้ตัวเลือกทางแยกอื่นๆ (เช่น LMD GHOST) เพื่อเลือกส่วนหัวของบล็อก
อัลกอริทึม CONSENSUS สามารถดูได้หนึ่งครั้งต่อสล็อต โดยถือเป็นอินพุตของฟังก์ชันการสร้างชุดเครื่องมือตรวจสอบความถูกต้องตามข้อมูลที่สร้างขึ้นโดย get_post_state(LATEST_FINALIZED_BLOCK) ข้อเสนอที่ถูกต้องต้องมีบล็อกย่อยที่ถูกต้องของ LATEST_FINALIZED_BLOCK ผู้ตรวจสอบความถูกต้องเตรียมและลงคะแนนข้อเสนอบล็อกก็ต่อเมื่อส่วนนั้นชนะตัวเลือกทางแยกและกลายเป็นส่วนหนึ่งของบล็อกเชน
คำอธิบายภาพ
หมายเหตุ: สล็อตควรเท่ากับจำนวนการดูปัจจุบันเสมอ บวกกับผลรวมของจำนวนการดูของชุดเครื่องมือตรวจสอบที่สรุปผลสำเร็จก่อนหน้านี้แต่ละชุด
เรามีบทลงโทษดังต่อไปนี้:
➤ การลงโทษอย่างเจ็บแสบเป็นประจำกำหนดโดยอัลกอริทึมที่สอดคล้องกัน
ชื่อระดับแรก
ทางเลือก FFG: ยุคช่องเดียว Casper FFG
อีกทางเลือกหนึ่งนอกเหนือจากการออกแบบข้างต้นคือการใช้ Casper FFG แต่ทำให้ยุคนั้นเท่ากับความยาวของสล็อต Casper FFG ทำงานแตกต่างออกไปเนื่องจากไม่ได้พยายามขัดขวางคณะกรรมการชุดเดียวกันจากการปิดบล็อกและลำดับรองลงมา เพื่อรองรับความแตกต่างนี้ เราจำเป็นต้องบังคับใช้ (i) เกณฑ์ความปลอดภัยที่ 1/4 แทนที่จะเป็น 1/3 (ii) กฎที่ว่าหากสล็อตสิ้นสุด ชุดเครื่องมือตรวจสอบจะแทนที่มากที่สุด 1/4 แทนที่จะเป็นทั้งหมด
โปรดทราบว่าในการออกแบบดังกล่าว ในทางทฤษฎีแล้ว การปรับโครงสร้างองค์กรใหม่หนึ่งช่อง (แต่ไม่เกินหนึ่งช่อง) นั้นไม่มีค่าใช้จ่ายในทางทฤษฎี นอกจากนี้ ที่ส่วนท้ายของกราฟ "จนถึงช่องสำหรับจุดสิ้นสุดสูงสุด"ชื่อระดับแรก
ลักษณะ
หากการบล็อกเสร็จสิ้น จะต้องดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้เพื่อให้การบล็อกที่แข่งขันกันสิ้นสุดลง:
➤ มีบางอย่างผิดพลาดกับคณะกรรมการและผู้ตรวจสอบความถูกต้อง ≥1/3 ถูกตัดออกเนื่องจากการปิดบล็อกอีกสองครั้ง
➤ คณะกรรมการชุดล่าสุดอยู่ในสถานะออฟไลน์ และหลังจากสล็อต r/3 คณะกรรมการได้สับเปลี่ยนมากพอที่จะทำให้บล็อคอื่นเสร็จสิ้นโดยไม่ถูกเฉือน อย่างไรก็ตาม สิ่งนี้มาพร้อมกับบทลงโทษการก่อวินาศกรรมอย่างหนัก (≥1/3 ของความสมดุลของผู้โจมตี)
ไม่ว่าในกรณีใด การย้อนกลับบล็อกที่เสร็จสิ้นแล้วจะต้องมีอย่างน้อย DEPOSIT_SIZE * COMMITTEE_SIZE / 3 (จำนวนเงินฝาก * ขนาดคณะกรรมการ / 3) ETH ที่เผา หากเราตั้งค่า COMMITTEE_SIZE = 131,072 (จำนวนผู้ตรวจสอบความถูกต้องต่อสล็อตของคณะกรรมการ Eth2 สูงสุดตามทฤษฎีคือ 4 ล้านคน) ค่านี้จะเป็น 1,398,101 ETH
คุณสมบัติที่สำคัญอื่น ๆ ในโซลูชันประกอบด้วย:
➤ ไม่ว่าผู้ตรวจสอบความถูกต้องจะฝากเงินจำนวนเท่าใด โหลดเครื่องมือตรวจสอบความถูกต้องจะคงที่เมื่อประมวลผลธุรกรรม COMMITTEE_SIZE (ขนาดคณะกรรมการ) ต่อสล็อต
➤ ภาระงานของ Validator จะลดลง เนื่องจากพวกเขาสามารถเข้าสู่โหมดสลีปได้เมื่อไม่จำเป็นต้องเข้าร่วมคณะกรรมการ
ชื่อระดับแรก
Scaling: การยืนยันแบบลูกโซ่กับคณะกรรมการขนาดเล็ก
ถ้าเราต้องลด COMMITTEE_SIZE เพื่อประสิทธิภาพ เราสามารถทำการปรับเปลี่ยนดังต่อไปนี้:
➤ เราเปลี่ยนชื่อ "การสิ้นสุด" เป็น "การยืนยัน" เพื่อสะท้อนให้เห็นว่าการยืนยันเพียงครั้งเดียวไม่ได้แสดงถึงการสิ้นสุดที่แท้จริงอีกต่อไป
➤ แตกต่างจากการเลือกบล็อกที่ได้รับการยืนยันล่าสุด เราเลือกบล็อกที่ยืนยันแล้วซึ่งมีหัวห่วงโซ่ที่ยาวที่สุดของบล็อกที่ยืนยันแล้ว (แต่ปฏิเสธที่จะย้อนกลับบล็อกที่ยืนยันโดย COMMITTEE_LOOKAHEAD ดังนั้นการยืนยันของ COMMITTEE_LOOKAHEAD จึงแสดงถึงจุดสิ้นสุดที่แท้จริง)
➤ get_validator_set ควรใช้เฉพาะข้อมูลสถานะ ไม่ใช่ COMMITTEE_LOOKAHEAD ก่อนการยืนยัน
➤ จำนวนการดูควรเป็นจำนวนของสล็อต (ทำให้อนุมานได้ง่ายขึ้นว่าชุดเครื่องมือตรวจสอบความถูกต้องชุดเดียวกันกำลังพยายามบรรลุฉันทามติในเชนต่างๆ ซึ่งจะเกิดขึ้นได้ก็ต่อเมื่อการยืนยันบางอย่างล้มเหลว)
โครงร่างนี้ยังคงคุณลักษณะข้างต้นไว้ทั้งหมด แต่ยังแนะนำคุณลักษณะใหม่: หากบล็อกได้รับการยืนยันหลายครั้ง (เช่น บล็อกได้รับการสรุป และบล็อกที่สืบทอดมาของเชนจะได้รับการยืนยัน k-1 เนื่องจากการยืนยันต่อเนื่องกันทั้งหมด k ครั้งจะ ส่งผลกระทบต่อบล็อก) แล้วการย้อนกลับบล็อกจำเป็นต้องละเมิดการรับรองฉันทามติในคณะกรรมการหลายชุด ซึ่งช่วยให้ระดับความปลอดภัยจากคณะกรรมการหลายชุดเพิ่มขึ้น การย้อนกลับ k การยืนยันต้องใช้ COMMITTEE_SIZE * DEPOSIT_SIZE * k / 3 ETH และต้องใช้ k = COMMITTEE_LOOKAHEAD เพื่อให้คณะกรรมการแยกจากกัน
ชื่อระดับแรก
ตัวอย่างของค่าเฉพาะ
โปรดทราบว่า "จำเป็นต้องใช้ ETH เพื่อทำลายขั้นสุดท้าย"จำนวนนี้ถือว่าผู้โจมตีควบคุมจำนวนผู้ตรวจสอบเทียบเท่ากับการควบคุมมากกว่าครึ่งหนึ่งของ ETH ที่วางเดิมพันทั้งหมด (เช่น ล้าน ETH) จำนวนนี้คือ ETH ที่ผู้โจมตีจะสูญเสีย แต่นี่ไม่ได้หมายความว่าใครก็ตามที่มี 2,730, 174,762 ETH สามารถย้อนกลับช่องเดียวได้โดยการเบิร์น ETH เหล่านี้แบบสุ่ม
ลิงค์ต้นฉบับ: https://ethresear.ch/t/a-model-for-cumulative- คณะกรรมการ-based-finality/10259


