Sharding (sharding) ที่ Eth 2.0 จะใช้คืออะไร?
หมายเหตุบรรณาธิการ: บทความนี้มาจากค่ายบล็อคเชน (ID: blockchain_camp)หมายเหตุบรรณาธิการ: บทความนี้มาจาก
ค่ายบล็อคเชน (ID: blockchain_camp)
ค่ายบล็อคเชน (ID: blockchain_camp)
Ethereum เป็นแพลตฟอร์มพื้นฐานในบล็อคเชนทั้งหมดที่ซิงค์กับแนวคิดของ Sharding เพื่อทำความเข้าใจว่าทำไมชุมชนนักพัฒนา Ethereum ต้องการใช้ Sharding สิ่งสำคัญคือต้องเข้าใจว่า Sharding คืออะไรและเหตุใดโซลูชันนี้จึงน่าสนใจ
ตามสถิติจาก ETH Gas Station ใช้เวลาประมาณ 1.78 นาทีในการเพิ่มธุรกรรมใน Ethereum blockchain บล็อกใหม่จะถูกสร้างขึ้นทุก ๆ 32 วินาที และมีการประมวลผลธุรกรรมเฉลี่ย 15-20 รายการต่อวินาที ระบบนิเวศนี้สร้างสภาพแวดล้อมที่เอื้อประโยชน์แก่นักขุดมากกว่าผู้ใช้ ซึ่งจะต้องเพิ่มราคาน้ำมันหากต้องการให้ธุรกรรมของพวกเขาได้รับการประมวลผลก่อน
เนื่องจากทรูพุตต่ำ เวลาแฝงสูง และราคาสูงจำกัดประสิทธิภาพของเครือข่าย Ethereum ปัจจุบัน Ethereum จึงไม่เหมาะสำหรับการปรับใช้บริการและแอปพลิเคชันที่ต้องการความสามารถในการปรับขนาดสูง
ชื่อเรื่องรอง
พูดง่ายๆ ก็คือ Sharding เป็นวิธีการแบ่งพาร์ติชันที่สามารถกระจายงานคอมพิวเตอร์และปริมาณงานพื้นที่จัดเก็บในเครือข่าย P2P หลังจากวิธีการประมวลผลนี้ แต่ละโหนดจะไม่รับผิดชอบในการประมวลผลภาระธุรกรรมของเครือข่ายทั้งหมด แต่จำเป็นต้องรักษาพาร์ติชันของตนเท่านั้น (หรือ Fragmentation) ข้อมูลที่เกี่ยวข้องไม่เป็นไร
หากต้องการอธิบายเพิ่มเติมเกี่ยวกับการแบ่งส่วน เราสามารถดูตัวอย่างที่ง่ายที่สุดของการแบ่งส่วน Vitalik Buterin ผู้ก่อตั้ง Ethereum เรียกมันว่า "ความสามารถในการปรับขนาดเพิ่มขึ้น 1,000 altcoins"
ในตัวอย่างนี้ แทนที่จะเรียกใช้บล็อกเชนเดียว เราเรียกใช้หลายบล็อกเชน และเราเรียกแต่ละบล็อกเชนว่าเป็นเศษ แทนที่จะเรียกว่าบล็อกเชน ในทางกลับกัน แต่ละชิ้นส่วนมีเครือข่ายตัวตรวจสอบหรือเครือข่ายโหนดของตัวเอง ซึ่งสามารถใช้อัลกอริทึม PoW ในการขุดบล็อก และยังสามารถขุดบล็อกผ่านการปักหลักหรือการลงคะแนน
ชื่อเรื่องรอง

ความท้าทายในการแยกชิ้นส่วน
ปัญหาแรกที่เราพบเมื่อพยายามใช้ชาร์ดดิ้งคือ เนื่องจากแต่ละชาร์ดมีชุดโหนดของตัวเอง แต่ละชาร์ดจึงมีความปลอดภัยน้อยกว่าเชนเดียวเช่น Ethereum
ดังนั้นหาก Ethereum ที่มีจำนวนโหนด x ตัดสินใจฮาร์ดฟอร์กและแยกออกเป็น shard chain และกระจายเครือข่ายทั้งหมดมากกว่า 10 shards แต่ละ shard จะมีความปลอดภัย 1% ของ chain เดิม ซึ่งหมายความว่าด้วยการควบคุม 5.1% (แทนที่จะเป็น 51%) ของโหนดของเชนเดิม เศษชิ้นส่วนทั้งหมดสามารถเสียหายได้
คำถามที่สองที่เรามีคือ: "เราจะเลือกโหนดใดเพื่อตรวจสอบความถูกต้องของชาร์ดใดได้อย่างไร" สำหรับนักแสดงที่ไม่ค่อยดี สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อ 5.1% ของโหนดของเครือข่ายทั้งหมดตรวจสอบความถูกต้องในชาร์ดเดียวกัน และควบคุมโหนดเหล่านี้ เป็นปัญหา
อันที่จริงแล้ว สถาปัตยกรรมการชาร์ดดิ้งทั้งหมดจะกำหนดโหนดให้กับชาร์ดแบบสุ่ม การกำหนดโหนดให้กับชาร์ดต้องใช้การคำนวณที่ไม่เฉพาะชาร์ด และการออกแบบเหล่านี้เกือบทั้งหมดใช้เชนแยกเพื่อจัดการการบำรุงรักษาชาร์ดและเครือข่ายโหนดทั้งหมด รู้จักในชื่อ Beacon Chain ใน Ethereum เชนนี้มีหน้าที่สร้างตัวเลขสุ่ม กำหนดโหนดให้กับ Shards จับภาพ Snapshot ของ Shards แต่ละตัว จัดการ Handshake Stakes และฟังก์ชั่นอื่นๆ
ห่วงโซ่สัญญาณมีข้อเสียบางประการ เนื่องจากพวกเขามีหน้าที่รับผิดชอบในการคำนวณการเก็บบันทึกที่กล่าวถึงก่อนหน้านี้ ยิ่งเครือข่ายใช้ชาร์ดมาก เชนบีคอนก็ยิ่งต้องทำงานมากขึ้น และเครือข่ายที่ไม่มีชาร์ดอาจประสบกับทรูพุตต่ำและเวลาแฝงสูง ดังนั้น ความสามารถในการปรับขนาดของเครือข่ายชาร์ด มีข้อจำกัดตามธรรมชาติ
อย่างไรก็ตาม เครือข่ายชาร์ดมีการทวีคูณ ดังนั้นหากประสิทธิภาพของเครือข่ายได้รับการปรับปรุง เช่น โหนดในการทำธุรกรรมของกระบวนการเครือข่ายเร็วขึ้นสี่เท่า ห่วงโซ่บีคอนจะสามารถรองรับจำนวนชาร์ดได้สี่เท่า ทำให้ความเร็วเครือข่ายเพิ่มขึ้น 16 เท่า
ชื่อเรื่องรอง
จะแยกข้อมูลออกเป็นเศษได้อย่างไร
เริ่มต้นด้วยการดูฟังก์ชันที่โหนดมักจะทำบนบล็อกเชน:
ประมวลผล/ตรวจสอบธุรกรรม
ถ่ายทอดธุรกรรมเหล่านี้และบล็อกที่พวกเขาขุดไปยังโหนดอื่นๆ บนเครือข่าย
เก็บประวัติการทำธุรกรรมทั้งหมด
เมื่อเครือข่ายเติบโตขึ้น โหนดจำเป็นต้องสามารถติดตามความต้องการของเครือข่ายและความต้องการที่เปลี่ยนแปลงไปได้
การเพิ่มจำนวนธุรกรรมที่กำลังประมวลผลทำให้แต่ละโหนดต้องเพิ่มพลังการประมวลผลมากขึ้น
ยิ่งมีการส่งต่อธุรกรรมมากเท่าใด โหนดจะต้องมีแบนด์วิธมากขึ้นเท่านั้น
ในการจัดเก็บข้อมูลทั้งหมดบน blockchain จำเป็นต้องมีโหนดเพื่อค่อยๆ เพิ่มพื้นที่จัดเก็บ
มีการเสนอพื้นที่จัดเก็บชาร์ดดิ้งแต่ไม่มีธุรกรรมก่อนโพสต์นี้ และบางโครงการได้นำชาร์ดดิ้งมาใช้ในการประมวลผลธุรกรรม (แทนที่จะเป็นสตอเรจ)
อย่างไรก็ตาม ประเภทของชาร์ดดิ้งที่พบมากที่สุดเรียกว่า "สเตทชาร์ดดิ้ง" และประกอบด้วยโหนดในแต่ละชาร์ดที่สร้างบล็อกเชนของตัวเองซึ่งมีโหนดทั้งหมดในเครือข่ายทั่วโลกที่มีผลกับโหนดนั้นเท่านั้น ธุรกรรมบางส่วน ซึ่งหมายความว่าโหนดต้องการเพียงแค่จัดเก็บ ประวัติธุรกรรมของชาร์ด ประมวลผลธุรกรรมที่ส่งผลต่อชาร์ด และถ่ายทอดธุรกรรมเหล่านั้นในชาร์ด

ต่อไป เราจะกล่าวถึงธุรกรรมข้ามชาร์ด ธุรกรรมที่ไม่ถูกต้อง และพฤติกรรมที่เป็นอันตราย
ชื่อเรื่องรอง
Blockchain Sharding และการปรับขนาด
Sharding ประเภทพื้นฐานตามที่อธิบายไว้ข้างต้นไม่ใช่แนวทางที่มีประสิทธิภาพหรือปฏิบัติได้จริงในการ Sharding เนื่องจากไม่สามารถสื่อสารกันได้ ดังนั้นพวกเขาจึงทำหน้าที่เป็นบล็อกเชนเดียว ยกตัวอย่างการชำระเงินง่ายๆ หากผู้ใช้ A และผู้ใช้ B อยู่ใน Shard เดียวกัน Validator ใน Shard จะสามารถประมวลผลธุรกรรมได้โดยไม่มีอุปสรรค แต่จะเกิดอะไรขึ้นเมื่อบัญชีของพวกเขาอยู่ใน Shards ที่แตกต่างกัน ผ้าขนสัตว์?
ผู้ใช้ A อยู่ในส่วนแบ่ง 1# และผู้ใช้ B อยู่ในส่วนแบ่ง 2# Validator ในแต่ละ Shards จะไม่สามารถเดบิตหรือเครดิตบัญชีผู้ใช้ได้ เนื่องจากไม่มีสิทธิ์เข้าถึง Shards ของกันและกัน
อย่างไรก็ตาม มีวิธีแก้ไขปัญหานี้ ดังนั้นเรามาดูรายละเอียดเพิ่มเติมบางส่วน:
ชื่อเรื่องรอง
ย้อนกลับไปเมื่อต้นปี 2018 Vitalik Buterin ได้เสนอการผสานบล็อกเข้ากับโซลูชันนี้https://ethresear.ch/)
ธุรกรรมข้ามส่วนแบบอะซิงโครนัส
(ดูที่มา:
ชื่อเรื่องรอง
ธุรกรรมข้ามส่วนแบบอะซิงโครนัส
นี่เป็นการดำเนินการที่ง่ายกว่าและง่ายกว่ามากในการประสานงาน ดังนั้นจึงเป็นที่ต้องการมากกว่าการทำธุรกรรมแบบซิงโครนัส

ในทำนองเดียวกัน เราจะใช้ตัวอย่างที่ผู้ใช้ A บนส่วนแบ่ง 1# ต้องการส่งเงินไปยังผู้ใช้ B ในส่วนแบ่ง 2# ในสถานการณ์สมมตินี้ ส่วนย่อยที่รับผิดชอบในการให้เครดิตบัญชีผู้ใช้ B จะตรวจสอบเฉพาะส่วนของธุรกรรมของ B หลังจากมีหลักฐานเพียงพอที่จะพิสูจน์ว่าส่วนย่อยที่รับผิดชอบในการหักบัญชีผู้ใช้ A เสร็จสมบูรณ์แล้ว
อย่างไรก็ตาม วิธีการนี้ไม่สมบูรณ์แบบ และมีโอกาสไม่เป็นศูนย์ที่บล็อกจากชาร์ดจะถูกทิ้ง เมื่อความน่าจะเป็นไม่เป็นศูนย์ ไม่ว่าความน่าจะเป็นจะน้อยเพียงใด มันก็ยังเป็นจุดอ่อนที่ละเลยไม่ได้
เราสามารถอธิบายเหตุผลได้อย่างละเอียดตามรูปดังนี้
เมื่อส้อมดังกล่าวเกิดขึ้น เศษหนึ่งต้องทิ้งโซ่เส้นหนึ่งและยอมรับอีกเส้นหนึ่ง ในเวลานี้ หากเชน A, B ฯลฯ กลายเป็นเชนที่ยอมรับในชาร์ด 1# และ W', X' ฯลฯ กลายเป็นเชนที่ยอมรับในชาร์ด 2# การทำธุรกรรมจะเสร็จสมบูรณ์และทุกคนมีความสุข
หากชาร์ดอันดับ 1 ยอมรับ A', B' ฯลฯ และชาร์ดอันดับ 2 ยอมรับ W, X เป็นต้น ธุรกรรมทั้งหมดจะล้มเหลว แต่ก็เป็นผลลัพธ์ที่ยอมรับได้ เนื่องจากธุรกรรมสามารถส่งซ้ำได้
แต่จะเกิดอะไรขึ้นถ้าแฟรกเมนต์ที่ 1# ยอมรับเชน A, B และอื่นๆ และแฟรกเมนต์ที่ 2# ยอมรับเชน W, X และอื่นๆ ธุรกรรมบางส่วน (A, B, ฯลฯ.) เสร็จสมบูรณ์ แต่อีกส่วนหนึ่ง (W, X, ฯลฯ.) ถูกละทิ้ง
ชื่อเรื่องรอง
โหนดที่เป็นอันตรายในเศษ
ตอนนี้คุณมีความเข้าใจที่ดีขึ้นเกี่ยวกับการแบ่งส่วนย่อยและวิธีการทำงานแล้ว คุณอาจพอใจแล้ว หรือคุณอาจมีคำถามเพิ่มเติม แต่ยังมีอย่างน้อยหนึ่งสิ่งที่ควรพิจารณา นั่นคือ โหนดที่เป็นอันตราย
1. โหนดที่เป็นอันตราย
สิ่งนี้เกิดขึ้นบ่อยมาก เมื่อมีความเป็นไปได้ที่จะมีการซื้อขายครั้งใหญ่ ไม่ว่าระบบจะเป็นอย่างไร ใครบางคนจะต้องการโจมตีระบบ
2. อนุมัติบล็อกที่ไม่ถูกต้อง
โหนดที่เป็นอันตรายอาจโจมตีเครือข่ายโดยการสร้างบล็อกที่พยายามเปลี่ยนเครือข่าย สมมติว่าผู้ใช้ 1 มี 10 เหรียญ และผู้ใช้ 2 มี 0 เหรียญ เมื่อผู้ใช้ 1 ต้องการส่ง 10 เหรียญเหล่านี้ไปยังผู้ใช้ 2 โหนดที่เป็นอันตรายบนเครือข่ายอาจพยายามสร้างบล็อก และท้ายที่สุด ผู้ใช้ 1 จะสูญเสียเหรียญทั้งหมด ในขณะที่ผู้ใช้ 2 จะมี 1,000 เหรียญ
ในบล็อกเชนปกติที่ไม่ได้แยกย่อย การโจมตีประเภทนี้เป็นไปไม่ได้เพราะทุกโหนดจะตรวจสอบทุกบล็อก และหากพบบล็อกที่ไม่ถูกต้อง โหนดทั้งหมด (ไม่ว่าจะเป็นคนงานเหมืองหรือไม่ก็ตาม) จะปฏิเสธบล็อกนั้น

สำหรับบล็อกเชนแบบคลาสสิก ไม่ว่าจะสร้างบล็อกที่เป็นอันตรายกี่บล็อก หรือสร้างเร็วเพียงใด โหนดที่ซื่อสัตย์ของเครือข่ายจะเพิกเฉยต่อบล็อกเหล่านี้เสมอ และสร้างบล็อกเชนที่ซื่อสัตย์ต่อไป
หากโหนดที่เป็นอันตรายต้องการเติมโทเค็นจำนวนมากในบัญชีของตนโดยการสร้างบล็อกที่ไม่ถูกต้อง จะทำให้ห่วงโซ่แยกออกเป็นสองส่วน ในกรณีนี้ จำนวนโหนดที่เป็นอันตรายอาจเกินจำนวนโหนดที่ซื่อสัตย์ด้วยซ้ำ โซ่ที่สั้นกว่าคือโซ่ที่ซื่อสัตย์และโซ่ที่ยาวกว่าคือโซ่ที่ไม่ถูกต้อง
ใน blockchain แบบ non-sharded ปกติ ผู้เข้าร่วมแต่ละคนมีหน้าที่ตรวจสอบความถูกต้องของ block ทั้งหมดที่ได้รับและยืนยันสถานะ ดังนั้นใครก็ตามที่มีส่วนได้เสียใน blockchain จะจดจำ chain ที่ไม่ถูกต้องทันที และไม่ต้องสนใจ chain ที่สั้นกว่า (ในกรณีนี้)
Sharded chains นั้นซับซ้อนกว่าเล็กน้อยเนื่องจากผู้เข้าร่วมไม่สามารถตรวจสอบทุกธุรกรรมในทุก ๆ shard ดังนั้นเราต้องหาวิธีตรวจสอบว่าไม่มีบล็อกที่ไม่ถูกต้องในประวัติทั้งหมดของชาร์ด


