การแบ่งปันเทคโนโลยี: การคัดแยกบล็อค Dag ที่ปลอดภัยและยุติธรรม
คำนำ
คำนำ
ในบทความที่แล้ว เราเห็นว่าปัญหาที่อาจเกิดขึ้นในโทโพโลยี DAG คือการกำหนดลำดับของบล็อกและการถ่ายโอน ในโพสต์นี้ เราจะอธิบายกลไกของ Taraxa ที่ไม่เพียงแต่รับรองการสั่งซื้อใน Block DAG เท่านั้น แต่ยังรับประกันว่ากระบวนการสั่งซื้อนั้นปลอดภัยและยุติธรรมอีกด้วย
เหตุใดการเรียงลำดับจึงท้าทาย
การจัดเรียงใน Block DAG นั้นยากอะไร
หากเราดูที่โครงสร้างข้อมูล DAG ใด ๆ เราจะสามารถสร้างการจัดลำดับได้เพียงบางส่วน ซึ่งหมายความว่าเราสามารถกำหนดความสัมพันธ์การจัดลำดับระหว่างบล็อกบางบล็อกเท่านั้น แต่ไม่ใช่บล็อกทั้งหมด นี่คือตัวอย่าง
ในภาพด้านบน เราสามารถพูดได้อย่างมั่นใจ 100% ว่าบล็อกสีน้ำเงินมาก่อนบล็อกสีเขียวและสีส้มในการจัดเรียงอย่างแน่นอน ทำไม เนื่องจากบล็อกสีเขียวและสีส้มชี้ไปที่บล็อกสีน้ำเงิน หมายความว่าเมื่อบล็อกสีส้มและสีเขียวถูกสร้างขึ้น แสดงว่าบล็อกสีน้ำเงินมีอยู่แล้ว มิฉะนั้นบล็อกสีส้มและสีเขียวจะไม่รู้ว่าพวกเขาจะชี้ไปที่บล็อกนั้น
แต่เราจะทราบความสัมพันธ์การสั่งซื้อระหว่างบล็อกสีเขียวและสีส้มได้อย่างไร ไม่มีคำตอบที่แน่นอนสำหรับคำถามนี้ คำตอบขึ้นอยู่กับประเภทของอัลกอริธึมการเรียงลำดับที่ใช้ และลำดับอาจแตกต่างกันโดยสิ้นเชิงสำหรับอัลกอริทึมต่างๆ
ในกระบวนการจัดอันดับ เราไม่เพียงแต่ต้องคงไว้ซึ่งเสรีภาพหนึ่งระดับเท่านั้น แต่ยังต้องมีทางเลือกมากมายเพื่อให้แน่ใจว่าอัลกอริทึมการจัดอันดับนั้นยุติธรรมและปลอดภัย เนื่องจากมีความจำเป็นเพื่อให้แน่ใจว่าผู้เข้าร่วมที่ไม่ซื่อสัตย์ไม่มีอคติต่อคนส่วนใหญ่ ของผู้ร่วมเครือข่ายที่สุจริตหรือโจมตี
ทีนี้มาดูอัลกอริทึมการเรียงลำดับของ Block DAG ที่ออกแบบโดย Taraxa เพื่อดูว่าเราจะแก้ปัญหาเหล่านี้ได้อย่างไร
การประกวดความนิยม
ในโทโพโลยี Block DAG ของ Taraxa แต่ละบล็อกมีพอยน์เตอร์ย้อนกลับที่ไม่เพียงแต่ชี้ไปที่บล็อกพาเรนต์เดียว (เช่นเดียวกับโทโพโลยีแบบเชนเดียว) แต่ยังชี้ไปยังสิ่งที่ผู้เสนอบล็อกได้เห็นและเชื่อ บล็อกทั้งหมดบนขอบเขต DAG (เอดจ์) . มีแนวคิดมากมายที่นี่ เรามาแกะมันทีละรายการ
ขอบเขตคืออะไร? ในบล็อก DAG (หรือโครงสร้างข้อมูล DAG ใดๆ) พรมแดนหมายถึงชุดบล็อกล่าสุดที่ไม่มีบล็อกอื่นชี้ถึง
ในภาพด้านบน บล็อกสีน้ำเงินคือบล็อก "ขอบเขต" ในขณะที่บล็อกที่เหลือไม่ใช่ บล็อกเชนชายแดนมีความน่าสนใจเพราะบล็อกเหล่านี้เป็นฐานของบล็อกทั้งหมด และบล็อกอื่นๆ ที่สร้างโดยผู้เสนอบล็อก (คล้ายกับผู้สร้างบล็อก) จะถูกเรียงลำดับตามหลัง จากมุมมองหนึ่ง บล็อกใหม่ถัดไปจะอ้างอิงถึงบล็อกเหล่านี้อย่างแน่นอน อย่างไรก็ตาม ไม่ใช่ทุกโหนดที่จะเห็นขอบเขตเดียวกัน (หรือ Block DAG เดียวกัน) เนื่องจากแต่ละโหนดประสบกับความล่าช้าในการเผยแพร่เครือข่ายที่แตกต่างกัน และเห็นสถานการณ์ที่แตกต่างกันโดยสิ้นเชิงเมื่อพบกับบล็อกที่กำหนด ดังนั้น ผู้เสนอบล็อกอาจตั้งฐานบล็อกของตนบนขอบเขตที่แตกต่างกัน ณ เวลาใดเวลาหนึ่ง
พอยน์เตอร์หรือพาเรนต์บล็อกคืออะไร ตัวชี้ ซึ่งแสดงด้วยลูกศรในไดอะแกรม คือข้อมูลที่ฝังอยู่ภายในบล็อกที่ "ชี้" หรืออ้างอิงบล็อกอื่น ในโครงสร้างบล็อก DAG ของ Taraxa ตัวชี้จะชี้ไปที่ชุดบล็อกหลัก บล็อกพาเรนต์คือบล็อกที่ชี้ไปโดยพอยน์เตอร์ จึงสามารถเข้าใจได้ว่าเป็นพาเรนต์ของบล็อกก่อนหน้า
ในภาพด้านบน เราเห็นว่าบล็อกสีน้ำเงินมีตัวชี้สองตัวไปยังบล็อกหลักสองบล็อกที่แสดงโดยบล็อกสีเขียว ซึ่งหมายความว่าเมื่อผู้เสนอสร้างบล็อกสีน้ำเงิน ผู้เสนอทราบบล็อกสอง (2) บล็อกบนขอบเขตบล็อก DAG และถือว่าบล็อกทั้งสองนี้ถูกต้อง ดังนั้นชี้บล็อกสีน้ำเงินที่สร้างขึ้นให้ทั้งสองบล็อกทราบ
กระบวนการที่พอยน์เตอร์เหล่านี้เชื่อมต่อบล็อกนั้นเป็นการแข่งขันความนิยม - บล็อกใดจะถูกชี้ไปที่บล็อกส่วนใหญ่และถือว่าถูกต้อง นอกจากนี้ หากบล็อกที่ชี้ไปยังบล็อกใดบล็อกหนึ่งนั้นเป็นตัว "ยอดนิยม" (หมายถึงบล็อกอื่นๆ จำนวนมากที่ชี้ไปที่บล็อกเหล่านั้น) ดังนั้น "ความนิยม" ก็จะส่งต่อไปยังบล็อกนั้นด้วย (บล็อกหลัก)
ทีนี้มาวัดความนิยมของแต่ละบล๊อกกัน
น้ำหนัก - คะแนนความนิยม
เพื่อวัดความนิยมของแต่ละละแวกใกล้เคียง เราใช้โปรโตคอล GHOST ที่เสนอโดย Zohar และ Sompolinsky GHOST ช่วยในการคำนวณน้ำหนักของแต่ละบล็อก ("ความนิยม" ของแต่ละบล็อก) ตามตัวชี้ที่ฝังอยู่ใน Block DAG
"น้ำหนัก" คืออะไร? ถ้าบล็อก DAG หมุนไปด้านข้าง ถือได้ว่าบล็อกย่อยแต่ละบล็อกและบล็อกถัดไปถูกแยกออกจากบล็อกหลัก ดังนั้นน้ำหนักของบล็อกใดๆ ภายใต้ GHOST คือผลรวมของน้ำหนักของบล็อกและบล็อกล่างทั้งหมด
น้ำหนักแสดงถึงความพยายามร่วมกันของความพยายามทั้งหมดที่จะค่อย ๆ สร้างบล็อกอื่น ๆ บนบล็อกนั้น แม้ว่าความพยายามนี้จะไม่พร้อมเพรียงกันและกระจายไปยังลูกหลานหลาย ๆ คนก็ตาม
>โปรโตคอล GHOST นั้นง่ายมาก
>บล็อกแต่ละก้อนมีน้ำหนัก 1 โดยธรรมชาติ
>แต่ละบล็อกมีน้ำหนักเท่ากับน้ำหนักของตัวเอง (1) บวกน้ำหนักของบล็อกทั้งหมดที่ชี้ไป
เริ่มต้นที่ขอบเขตของบล็อก DAG และวัดไปข้างหลัง
นี่คือตัวอย่าง
เริ่มต้นด้วยบล็อกเส้นขอบ เราสามารถกำหนดน้ำหนักให้กับแต่ละบล็อกได้ บล็อกสีน้ำเงินอยู่ที่ขอบของ DAG ไม่มีบล็อกใดชี้ไป ดังนั้นจึงมีน้ำหนัก 1 บล็อกสีเขียวมีเพียงบล็อกเดียวที่ชี้ไปที่บล็อกนั้น (บล็อกสีน้ำเงิน) ดังนั้นเราจึงเพิ่มน้ำหนักบล็อกของบล็อกสีเขียว (1) บวกกับบล็อกที่ชี้ไปที่น้ำหนัก (1) และเราได้ 2 ซึ่งเป็นน้ำหนักใหม่สำหรับสีเขียว บล็อก ต่อไป บล็อกสีส้มชี้ไปที่ 3 บล็อก ดังนั้นน้ำหนักของมันคือผลรวมของน้ำหนักของบล็อกทั้งสามบวกกับน้ำหนักของตัวมันเองเท่ากับ 1: 5+20+12+1=38
ดูดีทำไมตอนนี้เราเรียงลำดับตามน้ำหนักไม่ได้? ก็ไม่เชิง มีปัญหาที่ละเอียดอ่อนมากเกี่ยวกับกลยุทธ์ง่ายๆ นี้ เรามาตรวจสอบกันต่อไป
วิธีที่จะทำให้เกิดความสับสนในการสั่งซื้อ
ลองดูตัวอย่างง่ายๆ เพื่อทำความเข้าใจว่าเหตุใดการใช้ค่าน้ำหนักเป็นพื้นฐานเชิงตรรกะของกลไกการเรียงลำดับจึงไม่เพียงพอ
ในภาพด้านบน เราเริ่มต้นด้วยสถานการณ์จำลอง (a)
(a) เราเห็นว่ามีบล็อกสีส้มสองบล็อก ซึ่งทั้งสองบล็อกมีค่าน้ำหนักเท่ากับ 1 ดังนั้นลำดับของบล็อกจึงไม่ชัดเจน
(b) มีการเพิ่มบล็อกอีกบล็อกหนึ่งซึ่งชี้ไปยังสองบล็อกก่อนหน้า แต่ตอนนี้ทั้งคู่มีค่าน้ำหนักเท่ากับ 2 และยังคงมีลำดับที่ไม่ชัดเจน
(c) หลังจากเพิ่มบล็อกอีกสองสามบล็อก ปัญหาเกี่ยวกับบล็อกสีส้มไม่ได้หายไป ยังคงมีน้ำหนักเท่าเดิม ไม่เพียงแค่นั้น แต่ตอนนี้มันแย่ยิ่งกว่านั้น ปัญหาใหม่คือบล็อกสีเหลืองยังมีลำดับที่ไม่ชัดเจนอีกด้วย
ในตัวอย่างด้านบน เราถือว่าทุกคนมีความซื่อสัตย์ แต่เรายังคงพบปัญหาได้ จะเกิดอะไรขึ้นถ้าคุณแนะนำผู้เล่นที่ประสงค์ร้าย ผู้เล่นนั้นสามารถทำให้ลำดับของบล็อกบล็อก DAG สับสนได้ ลองดูตัวอย่างด้านล่าง
ในตัวอย่างนี้ เราเริ่มต้นด้วย (b)
(b) เรามีบล็อกสีส้ม 2 บล็อกที่มีการเรียงลำดับที่ไม่ชัดเจน
(d) บล็อกอื่นเข้ามาและแก้ปัญหา ตอนนี้เรามีคำสั่งที่แน่นอนแล้ว อายุยืน!
(จ) แต่ไม่นานนัก... ผู้เล่นที่มุ่งร้ายพยายามรักษาลำดับที่กำกวมและสร้างบล็อก (สีแดง) ซึ่งเพิ่มบล็อกขอบและน้ำหนักกลับไปที่ตำแหน่งก่อนหน้า ปัญหา บล็อกสีส้มสองอันก็กลับมาเหมือนเดิม สั่งไม่ดี
นัยอีกประการของการโจมตีนี้คือ ผู้เล่นที่ประสงค์ร้ายไม่เพียงแต่รักษาลำดับที่คลุมเครือเท่านั้น แต่ยังเปลี่ยนลำดับก่อนและหลังการเพิ่มบล็อก ทำให้เครือข่ายอยู่ในสถานะที่สับสนวุ่นวายอย่างต่อเนื่อง
แม้ว่าสิ่งเหล่านี้จะเป็นตัวอย่างง่ายๆ แต่ปัญหาดังกล่าวสามารถเกิดขึ้นได้ในระดับที่ใหญ่ขึ้น โดยที่กลุ่มบล็อกทั้งหมดถูกปล่อยให้อยู่ในสถานะการเรียงลำดับที่ไม่แน่นอน
แล้วเราจะแก้ปัญหานี้อย่างไรต่อไปเราจะแนะนำแนวคิดของ anchor chains และ ghost pointer
Anchor Chain - เส้นทางยอดนิยม
ขั้นตอนต่อไปหลังจากคำนวณน้ำหนักคือการกำหนดโซ่สมอใน Block DAG หากน้ำหนักคือคะแนนความนิยมของแต่ละบล็อก แสดงว่าโซ่สมอนั้นเป็นเส้นทางที่ได้รับความนิยมมากที่สุดผ่านบล็อก DAG บล็อกที่สังเกตได้ในขณะที่สำรวจเส้นทาง (เดิน) นั้นยังสังเกตได้อย่างกว้างขวาง (พบบ่อยมาก) โดยเครือข่าย
วิธีสร้างโซ่สมอ ง่ายๆ เพียงเลือกจุดเริ่มต้น — หรือในกรณีของ Taraxa บล็อกก่อนหน้าที่มีการสิ้นสุดตามเวลาจริง บล็อกของ แต่ละขั้นตอนจะเลือกบล็อกที่มีน้ำหนักสูงสุด นี่คือตัวอย่าง
ในรูปด้านบน เริ่มจากบล็อก G และเดินหน้าต่อไป มีบล็อกถ่วงน้ำหนักให้เลือก 3 บล็อก (381, 765, 381) ซึ่งหนักที่สุดคือ 765 ดำเนินการต่อในทิศทางนี้ตามตรรกะนี้ เส้นทางจากบล็อก G ไปยังจุดสิ้นสุดคือโซ่สมอที่สร้างขึ้น (สีเขียว)
นี่คือวิธีการสร้าง anchor chain ซึ่ง "ยึด" Block DAG ให้เป็นเส้นทางที่เราสามารถสร้างอัลกอริทึมการเรียงลำดับได้
แม้ว่าวิธีการคำนวณโซ่สมอนี้จะช่วยแก้ปัญหาของการมีน้ำหนักเท่ากันสำหรับบล็อกปลายแหลมแต่ละอัน แต่ก็ทำให้เกิดปัญหาอีกประการหนึ่ง เนื่องจากผู้โจมตียังคงสามารถเปลี่ยนโซ่สมอได้เรื่อยๆ (ไม่ได้บรรจบกันเร็วมาก) ดังนั้นเราจึงแนะนำตัวชี้โกสต์เพื่อช่วยให้เครือข่ายรวมกันเป็นโซ่สมอคงที่เร็วขึ้น จึงบรรลุลำดับที่กำหนดขึ้นได้
ตัวชี้ไม่ได้ถูกสร้างขึ้นเท่ากันทั้งหมด
เพื่อป้องกันไม่ให้เครือข่ายล่ม เราแนะนำตัวชี้พิเศษที่เรียกว่าตัวชี้โกสต์ แนวคิดพื้นฐานคือเมื่อมีการสร้างบล็อกแต่ละบล็อก จะชี้ไปยังบล็อกทั้งหมดบนขอบเขตที่เห็นและยืนยันว่าถูกต้องตามกฎหมาย แต่การบล็อกดังกล่าวมีความพิเศษ
บล็อกพิเศษคือบล็อกสิ้นสุดของ anchor chain นอกเหนือจากการยอมรับการมีอยู่ของบล็อกทางกฎหมายอื่น ๆ บนขอบเขตของบล็อก DAG แต่ละบล็อกที่เพิ่มใหม่จะชี้ไปที่ตัวชี้ผีของบล็อกสิ้นสุดด้วย การเปลี่ยนแปลงที่สำคัญที่นี่คือเฉพาะบล็อกที่ชี้ไปโดยตัวชี้โกสต์เท่านั้นที่จะถูกพิจารณาในการคำนวณน้ำหนักบล็อก และไม่พิจารณาบล็อกที่ชี้ไปโดยตัวชี้อื่น
บล็อกพาเรนต์กลายเป็นบล็อกที่มีตัวชี้ผีพิเศษชี้ไปเท่านั้น ในโครงสร้าง Taraxa Block DAG แต่ละบล็อกจะชี้ไปที่บล็อกหลักหนึ่งบล็อกเท่านั้น บล็อกอื่น ๆ เพียงแค่สังเกตบล็อกอื่น ๆ ของต้นไม้บล็อก (ข้อความต้นฉบับคือใบไม้สามารถเข้าใจได้ว่าเป็นบล็อก) หรือ "บรรพบุรุษ" - ใน Ethereum พวกเขาเรียกว่า "ลุง" หรือ "ommers" สิ่งนี้สามารถกล่าวถึงก่อนหน้านี้หรืออาจชัดเจนมากเกี่ยวกับจำนวนผู้ปกครองในหนึ่งบล็อก
วิธีนี้จะแก้ปัญหาพื้นฐานของวิธีการตรวจสอบให้แน่ใจว่าบล็อกทั้งหมดบนขอบเขตไม่ได้แสดงในรูปแบบที่ไม่ชัดเจนในระหว่างกระบวนการลงคะแนนโดยปริยายซึ่งแสดงโดยกราฟ DAG
>ลองมาดูตัวอย่างกัน
>ลูกศรหนาเป็นตัวชี้ผี (น้ำหนักที่คำนวณได้)
ลูกศรบางๆ คือตัวชี้ยืนยัน (ไม่มีน้ำหนัก)
(a) บล็อกสองบล็อก (1.1 และ 1.2) ชี้ไปที่บล็อกการกำเนิดแรก (0) เส้นหนาคือตัวชี้โกสต์เนื่องจากมีบล็อกหลักเพียงบล็อกเดียวและบล็อกทั้งสองชี้ไปที่บล็อกนั้น ลำดับนี้ไม่ชัดเจนในตอนนี้ แต่เราสามารถใช้แฮชต่ำสุดเพื่อเปรียบเทียบได้ โดยถือว่า (1.1) ชนะและถือเป็นตัวเลือกสำหรับตัวชี้ผีของบล็อกในอนาคต
(b) เพิ่ม 3 บล็อก แต่เนื่องจากความล่าช้าของเครือข่าย บล็อกเหล่านี้ทั้งหมดจึงไม่เห็นทุกบล็อกใหม่ในเวลาเดียวกัน ซึ่งหมายความว่าบางโหนดสามารถเห็นบางบล็อกได้เร็วขึ้น ตัวอย่างเช่น การข้ามเครือข่ายที่น้อยลงเนื่องจากระยะห่างทางกายภาพที่ใกล้ขึ้นจะทำให้โหนดเห็นบล็อกเร็วขึ้น ทั้งบล็อก (2.1) และบล็อก (2.2) ได้เห็นสองบล็อกก่อนหน้านี้ (1.1 และ 1.2) ดังนั้นทั้งคู่จึงชี้ตัวชี้ผีไปที่บล็อกทั้งสองนี้และระบุ (1.1) อย่างตรงไปตรงมาว่าอยู่บนโซ่สมอของบล็อกสิ้นสุด อย่างไรก็ตาม (2.3) ไม่เห็น (1.1) ดังนั้นจึงสามารถใช้ตัวชี้ผีเพื่อชี้ไปที่ (1.2) เท่านั้นและไม่สามารถทำอะไรได้อีก โปรดทราบว่าตามกฎของเรา น้ำหนักของบล็อกได้รับการอัปเดต แต่จะนับเฉพาะส่วนของบล็อกย่อยที่ชี้ไปโดยใช้ตัวชี้ผีเท่านั้น
(c) บล็อกของเลเยอร์ถัดไปปรากฏขึ้น บล็อก (3.1) เห็นบล็อก (2.1) และ (2.2) ในเวลาเดียวกัน และบล็อก (3.2) เห็นบล็อก (2.1) และ (2.3) พร้อมกัน เวลา บล็อก (3.3) เลื่อยบล็อก (2.1, 2.2 และ 2.3) พร้อมกัน เมื่อเปิดตัวแต่ละบล็อกจะเลือกบล็อกสิ้นสุดบนโซ่สมอที่พวกเขาเห็น ชี้ตัวชี้โกสต์ไปที่บล็อกนั้น และดำเนินการต่อ
เมื่อใช้ร่วมกับโซ่สมอ โกสต์พอยน์เตอร์จะช่วยบังคับเครือข่ายให้มาบรรจบกับโซ่สมอ ซึ่งทำให้การสั่งซื้อโดยรวมมีเสถียรภาพ ต่อไปเราจะอธิบายวิธีการสั่งซื้อบล็อกตามโซ่สมอในท้ายที่สุด
เรียงตามสมอ
ใช้ตัวชี้ผี ลองคำนวณน้ำหนักใหม่ในตัวอย่าง Block DAG ก่อนหน้า โปรดทราบอีกครั้งว่าเฉพาะบล็อกที่ชี้โดยตัวชี้ผีเท่านั้นที่จะมีน้ำหนักที่คำนวณในบล็อกหลัก
เมื่อดึงโซ่สมอแล้ว เราจะสร้างยุครอบแต่ละบล็อก (บล็อกสมอ) บนโซ่สมอ ยุคคือจำนวนบล็อกที่ anchor block สามารถสังเกตได้ หรือบล็อกที่ anchor block ชี้โดยตรงหรือโดยอ้อม คิดว่าพวกเขาเป็นเพื่อนของบล็อกสมอยอดนิยม
ในรูปด้านบน เราวางแผนแต่ละยุคของสมอบล็อกโดยใช้เส้นประสีแดง น่าเสียดายที่สมอบล็อกแรกที่มีน้ำหนัก 25 เป็นเพียงยุคของตัวเองเท่านั้น บล็อกสมอถัดไปที่มีน้ำหนัก 21 มี epoc รวมถึงตัวมันเองและบล็อกน้ำหนัก 1 อีกสองบล็อกที่สามารถสังเกตได้ บล็อกสมอที่สามมีน้ำหนัก 18 และสามารถสังเกตสมอบล็อกได้เพียงอันเดียว บล็อกถัดไปมีน้ำหนัก 17 และยุคของมันคือ 3 ซึ่งรวมถึงบล็อกที่มีน้ำหนัก 1 ที่สามารถสังเกตได้โดยตรง และอีกบล็อกที่มีน้ำหนัก 2 ที่สามารถสังเกตได้โดยอ้อม ด้วยวิธีนี้เราจะแยกความแตกต่างต่อไปจนกว่าจะมีการวาดยุคของแต่ละบล็อกสมอ
ตอนนี้เราพร้อมที่จะจัดเรียงบล็อกแล้ว บล็อกจะเรียงลำดับตามยุคจากเก่าไปใหม่ (ซ้ายไปขวา) ในแต่ละยุค ค่าน้ำหนักจะใช้เพื่อระบุว่าบล็อกใดมาก่อน โดยดูว่าบล็อกใดชี้ไปที่บล็อกใด หรือถ้าวิธีนี้ล้มเหลว ให้ใช้แฮชบล็อกเป็นวิธีการตัดสินของบล็อกที่มีระยะห่างเท่ากันกับสมอบล็อก
เมื่อดูที่กราฟยุค G คือตัวแรก (1) จะมีเพียงบล็อกเดียวในยุคถัดไป ดังนั้นบล็อกนี้ที่มีน้ำหนัก 25 จึงเป็นบล็อกที่สอง (2) การย้ายไปยังยุคถัดไป บล็อกสองบล็อกที่มีค่าน้ำหนัก 1 อยู่ก่อนหน้าบล็อกสมอที่มีน้ำหนัก 21 (เพราะชี้ไปที่บล็อกที่มีน้ำหนัก 21) วิธีเปรียบเทียบบล็อกทั้งสองนี้คือการเปรียบเทียบว่าแฮชของใคร ค่าต่ำกว่ากำหนด (3) และ (4) จากนั้นบล็อกที่ห้า (5) เป็นบล็อกที่มีค่าน้ำหนัก 21 เราดำเนินต่อไปจนกว่าจะจัดเรียงบล็อกทั้งหมดในทุกยุค
ดังที่แสดงด้านล่าง ตัวเลขในแต่ละบล็อกระบุถึงลำดับ ไม่ใช่น้ำหนัก
ในที่สุดเราก็ทำเสร็จแล้ว!
แต่เราทำเสร็จแล้วจริงๆ เหรอ แล้วบล็อกที่ไม่ได้รับการจัดเรียงล่ะ?epochมีบางบล็อกอยู่ใกล้ขอบเขตของโครงสร้าง Block DAG เสมอซึ่งไม่ได้อยู่ในห่วงโซ่สมอ
เป็นส่วนหนึ่งของ. แต่ไม่ต้องกังวล เนื่องจากมีการเพิ่มบล็อกจำนวนมากขึ้นในขอบเขต บล็อกเหล่านั้นจะถูกรวมเข้าด้วยกันในที่สุด
โซ่สมอเรือ (และลำดับผลลัพธ์) ไม่เปลี่ยนแปลงเมื่อเวลาผ่านไปใช่หรือไม่ใช่ มีความเสี่ยงในการจัดลำดับใหม่ภายในโครงสร้าง Block DAG ความเสี่ยงนี้ลดลงอย่างทวีคูณเมื่อเวลาผ่านไป แต่ไม่เคยหมดไปจริงๆ ซึ่งเป็นสาเหตุที่ Taraxa จำเป็นต้องใช้กระบวนการขั้นสุดท้ายแบบเรียลไทม์ (บทความในเร็วๆ นี้)
ความสมบูรณ์ตามเวลาจริงที่แท้จริงถูกนำมาใช้ในโครงสร้าง Block DAG โดยไม่มีความเสี่ยงในการจัดลำดับใหม่ ซึ่งเป็นพื้นฐานสำหรับการสร้าง DApps ในเครือข่าย


