หากผู้ใช้ N รายทำธุรกรรม N รายการ (หรือตามความเป็นจริง N ERC-4337 UserOperations) จำเป็นต้องพิสูจน์การอ้างสิทธิ์ข้ามเครือข่าย N ครั้ง เราสามารถประหยัดเงินได้มากโดยการรวมหลักฐานเหล่านี้เข้าด้วยกัน: การรวมธุรกรรมเหล่านี้เป็นบล็อกหรือตัวสร้างบันเดิล ที่เข้าไปในบล็อกสามารถสร้างหลักฐานที่พิสูจน์การอ้างสิทธิ์ทั้งหมดนี้ได้ในเวลาเดียวกัน
นี่อาจหมายถึง:
Buterin: ข้อมูลเชิงลึกเกี่ยวกับการอ่านข้าม L2 สำหรับกระเป๋าเงินและกรณีการใช้งานอื่นๆ
ผู้เขียน: Vitalik Buterin เรียบเรียง: Vernacular Blockchain
ในบทความก่อนหน้าของฉันเกี่ยวกับกะทั้งสาม ฉันได้อธิบายเหตุผลสำคัญบางประการว่าทำไมการเริ่มคิดอย่างชัดเจนเกี่ยวกับการสนับสนุน L1 + ข้าม L2 ความปลอดภัยของกระเป๋าเงิน และความเป็นส่วนตัวเป็นคุณสมบัติพื้นฐานที่จำเป็นของสแต็กระบบนิเวศ ที่สามารถออกแบบได้เฉพาะบุคคลในกระเป๋าสตางค์ใบเดียว
โพสต์นี้จะมุ่งเน้นโดยตรงไปที่ด้านเทคนิคของปัญหาย่อยเฉพาะ เช่น: วิธีอ่าน L1 จาก L2 ได้ง่ายขึ้น L2 จาก L1 หรือ L2 จาก L2 อื่น การแก้ไขปัญหานี้มีความสำคัญต่อการเปิดใช้งานสถาปัตยกรรมการแยกสินทรัพย์/ที่เก็บคีย์ แต่ยังมีกรณีการใช้งานที่มีคุณค่าในพื้นที่อื่นๆ โดยเฉพาะอย่างยิ่งการเพิ่มประสิทธิภาพการเรียกสายข้าม L2 ที่เชื่อถือได้ รวมถึงกรณีการใช้งาน เช่น การย้ายสินทรัพย์ระหว่าง L1 และ L2 แคตตาล็อกบทความนี้ เป้าหมายคืออะไร? การพิสูจน์ข้ามสายโซ่มีลักษณะอย่างไร? เราสามารถใช้แผนการพิสูจน์แบบใดได้บ้าง? หลักฐาน Merkle ZK SNARK ใบรับรอง KZG เฉพาะ หลักฐานต้นไม้ Verkle พอลิเมอไรเซชัน อ่านสถานะโดยตรง L2 เรียนรู้รากสถานะ Ethereum ล่าสุดได้อย่างไร กระเป๋าเงินบนโซ่ที่ไม่ใช่ L2s การป้องกันความเป็นส่วนตัว สรุป
1. เป้าหมายคืออะไร?
เมื่อ L2 กลายเป็นกระแสหลัก ผู้ใช้จะเป็นเจ้าของเนื้อหาใน L2 หลายรายการ และอาจรวมถึง L1 ด้วย เมื่อกระเป๋าเงินสัญญาอัจฉริยะ (หลายซิก การกู้คืนโซเชียล หรืออื่นๆ) กลายเป็นกระแสหลัก คีย์ที่จำเป็นในการเข้าถึงบางบัญชีจะเปลี่ยนไปเมื่อเวลาผ่านไป และคีย์เก่าจะไม่จำเป็นอีกต่อไป เมื่อทั้งสองสิ่งนี้เกิดขึ้น ผู้ใช้จะต้องมีวิธีการเปลี่ยนคีย์ที่สามารถเข้าถึงบัญชีจำนวนมากที่อยู่ในที่ต่างๆ โดยไม่ต้องทำธุรกรรมจำนวนมาก โดยเฉพาะอย่างยิ่ง เราต้องการวิธีจัดการกับที่อยู่ปลอม: ที่อยู่ที่ไม่ได้รับการ "ลงทะเบียน" บนเครือข่าย แต่อย่างใด แต่ก็ยังจำเป็นต้องรับและถือเงินอย่างปลอดภัย เราทุกคนพึ่งพาที่อยู่ปลอม: เมื่อคุณใช้ Ethereum เป็นครั้งแรก คุณสามารถสร้างที่อยู่ ETH ที่ใครบางคนสามารถใช้เพื่อชำระเงินให้คุณโดยไม่ต้อง "ลงทะเบียน" ที่อยู่ออนไลน์ (ซึ่งต้องชำระ txfee ดังนั้นจึงมี ETH บางส่วนอยู่แล้ว) สำหรับ EOA ที่อยู่ทั้งหมดจะเริ่มต้นด้วยที่อยู่ปลอม ด้วยกระเป๋าเงินสัญญาอัจฉริยะ ที่อยู่ปลอมแปลงยังคงเป็นไปได้ด้วยส่วนใหญ่ CREATE2 ซึ่งช่วยให้คุณมีที่อยู่ ETH ที่สามารถกรอกโดยสัญญาอัจฉริยะด้วยรหัสที่ตรงกับแฮชเฉพาะ
EIP-1014 (CREATE2) อัลกอริทึมการคำนวณที่อยู่
อย่างไรก็ตาม กระเป๋าเงินสัญญาอัจฉริยะนำเสนอความท้าทายใหม่: ความเป็นไปได้ของการเปลี่ยนแปลงคีย์การเข้าถึง ที่อยู่นี้เป็นแฮชของ initcode และสามารถมีได้เฉพาะรหัสยืนยันเริ่มต้นของกระเป๋าเงินเท่านั้น รหัสยืนยันปัจจุบันจะถูกเก็บไว้ในที่เก็บข้อมูลของกระเป๋าเงิน แต่บันทึกที่เก็บข้อมูลนั้นจะไม่เผยแพร่ไปยัง L2 อื่น ๆ อย่างน่าอัศจรรย์ หากผู้ใช้มีที่อยู่จำนวนมากใน L2 จำนวนมาก รวมถึงที่อยู่ที่ไม่รู้จักใน L2 ที่พวกเขาเปิดอยู่ (เนื่องจากเป็นที่อยู่ปลอมแปลง) ดูเหมือนว่าจะมีวิธีเดียวที่จะอนุญาตให้ผู้ใช้เปลี่ยนคีย์ได้: สถาปัตยกรรมการแยกสินทรัพย์/ที่เก็บคีย์ ผู้ใช้แต่ละคนมี (i) "สัญญาที่เก็บคีย์" (ไม่ว่าจะใน L1 หรือ L2 เฉพาะอย่างใดอย่างหนึ่ง) ที่จัดเก็บคีย์การยืนยันสำหรับกระเป๋าเงินทั้งหมดและกฎสำหรับการเปลี่ยนคีย์ และ (ii) "สัญญากระเป๋าเงิน" ที่อ่านข้ามห่วงโซ่สำหรับคีย์การยืนยัน
มีสองวิธีในการบรรลุเป้าหมายนี้:
รุ่นน้ำหนักเบา (ตรวจสอบเฉพาะคีย์ที่อัปเดตแล้ว): กระเป๋าเงินแต่ละรายการจะจัดเก็บคีย์การยืนยันไว้ในเครื่องและมีฟังก์ชันที่สามารถเรียกใช้เพื่อตรวจสอบการพิสูจน์แบบข้ามสายโซ่ของสถานะปัจจุบันของที่เก็บคีย์ และอัปเดตคีย์การยืนยันที่จัดเก็บไว้ในเครื่องเพื่อให้ตรงกัน เมื่อใช้กระเป๋าเงินครั้งแรกบน L2 เฉพาะ ฟังก์ชันนี้ต้องถูกเรียกเพื่อรับคีย์การพิสูจน์ตัวตนปัจจุบันจากที่เก็บคีย์ -ข้อดี: การพิสูจน์แบบข้ามโซ่จะใช้เท่าที่จำเป็น ดังนั้นจึงไม่สำคัญว่าการพิสูจน์แบบข้ามโซ่จะมีราคาแพง เงินทั้งหมดสามารถใช้ได้กับคีย์ปัจจุบันเท่านั้น ดังนั้นจึงยังคงปลอดภัย
2. การพิสูจน์ข้ามสายโซ่มีลักษณะอย่างไร?
เพื่อแสดงความซับซ้อนทั้งหมด เราจะสำรวจกรณีที่ยากที่สุด: ที่เก็บคีย์ใน L2 หนึ่ง กระเป๋าเงินใน L2 อื่น ต้องการเพียงครึ่งหนึ่งของการออกแบบนี้หากที่เก็บคีย์บนกระเป๋าเงินอยู่บน L1
สมมติว่าที่เก็บคีย์อยู่บน Linea และกระเป๋าเงินอยู่บน Kakarot หลักฐานที่สมบูรณ์ของรหัสกระเป๋าเงินประกอบด้วย:
3. เราสามารถใช้แผนการพิสูจน์ประเภทใดได้บ้าง?
มีห้าตัวเลือกหลัก:
"การรวม" หมายถึงการรวมการพิสูจน์ทั้งหมดที่ได้รับจากผู้ใช้ภายในแต่ละบล็อกเป็น meta-proof ขนาดใหญ่ที่รวมการพิสูจน์ทั้งหมด สิ่งนี้เป็นไปได้กับ SNARK และ KZG แต่ไม่ใช่กับ Merkle forks (คุณสามารถรวม Merkle forks ได้เล็กน้อย แต่จะบันทึกเฉพาะ log(txs ต่อบล็อก)/log(จำนวนที่เก็บคีย์ทั้งหมด) ในทางปฏิบัติ น่าจะเป็น 15-30% กลางๆเลยน่าจะไม่คุ้มราคา) การรวมจะคุ้มค่าก็ต่อเมื่อสถานการณ์มีผู้ใช้จำนวนมาก ดังนั้นในทางปฏิบัติ การใช้งานเวอร์ชัน 1 อาจละเว้นการรวมและนำไปใช้ในเวอร์ชัน 2
4. Merkle Proofs ทำงานอย่างไร?
อันนี้ง่าย: เพียงทำตามแผนภาพในส่วนก่อนหน้า ให้แม่นยำยิ่งขึ้น "การพิสูจน์" แต่ละรายการ (สมมติว่ากรณีการพิสูจน์ความยากสูงสุดของ L2 หนึ่งไปยังอีก L2) จะประกอบด้วย: สาขาของ Merkle ยืนยันสถานะรูทของ L2 ที่เก็บคีย์สโตร์ โดยพิจารณาจากรูทสถานะล่าสุดของ Ethereum ที่ L2 รู้จัก ที่เก็บคีย์เก็บสถานะรูทของ L2 ที่จัดเก็บไว้ในสล็อตหน่วยเก็บข้อมูลที่รู้จักในแอดเดรสที่รู้จัก (สัญญาใน L1 แทน L2) ดังนั้นพาธผ่านทรีจึงสามารถฮาร์ดโค้ดได้ สาขาของ Merkle ยืนยันคีย์การยืนยันปัจจุบัน โดยกำหนดสถานะรูทของ L2 ที่เก็บคีย์สโตร์ อีกครั้ง คีย์การตรวจสอบความถูกต้องจะถูกจัดเก็บไว้ในสล็อตที่เก็บข้อมูลที่รู้จักในที่อยู่ที่รู้จัก ดังนั้นจึงสามารถฮาร์ดโค้ดพาธได้ น่าเสียดายที่ Ethereum Proofs of State มีความซับซ้อน แต่มีไลบรารี่สำหรับตรวจสอบความถูกต้อง และหากคุณใช้ไลบรารีเหล่านั้น กลไกนี้ก็ไม่ซับซ้อนเกินไปที่จะนำไปใช้ **ปัญหาใหญ่คือค่าใช้จ่าย **การพิสูจน์ของ Merkle นั้นยาวมาก น่าเสียดายที่ Patricia tree นั้นยาวเกินความจำเป็น ~3.9 เท่า (พูดตามตรง: การพิสูจน์ของ Merkle ในอุดมคติสำหรับต้นไม้ที่ถือครองวัตถุ N ชิ้นนั้นมีความยาว 32 * log2(N) ไบต์ และเนื่องจากต้นไม้ Patricia ของ Ethereum มี 16 ใบไม้ต่อหนึ่งลูก และหลักฐานของต้นไม้เหล่านี้คือ 32 * 15 * log16(N) ~= 125 * log2(N) ไบต์ยาว) ในสถานะที่มีบัญชีประมาณ 250 ล้านบัญชี (~2²⁸) ค่านี้ทำให้การพิสูจน์แต่ละรายการมีค่า 125 * 28 = 3500 ไบต์ หรือประมาณ 56,000 ไบต์ บวกกับค่าใช้จ่ายเพิ่มเติมในการถอดรหัสและตรวจสอบแฮช เมื่อรวมกัน การพิสูจน์ทั้งสองจะมีราคาประมาณ 100,000 ถึง 150,000 ก๊าซ (หากใช้ต่อการทำธุรกรรม ไม่รวมการตรวจสอบลายเซ็น) ซึ่งสูงกว่าราคาฐานปัจจุบันที่ 21,000 ก๊าซต่อการทำธุรกรรม อย่างไรก็ตาม หากพิสูจน์ยืนยันใน L2 ความคลาดเคลื่อนจะยิ่งแย่ลงไปอีก การคำนวณภายใน L2 นั้นมีราคาถูก เนื่องจากการคำนวณนั้นทำนอกเครือข่ายและในระบบนิเวศที่มีโหนดน้อยกว่า L1 มาก ในทางกลับกัน ข้อมูลจะต้องเผยแพร่ไปยัง L1 ดังนั้นการเปรียบเทียบจึงไม่ใช่ก๊าซ 21k เทียบกับก๊าซ 15k แต่เป็นก๊าซ 21k L2 เทียบกับก๊าซ 100k L1 เราสามารถคำนวณความหมายได้โดยดูที่การเปรียบเทียบระหว่างต้นทุนก๊าซ L1 และต้นทุนก๊าซ L2:
ปัจจุบัน L1 มีราคาแพงกว่า L2 15-25 เท่าสำหรับการส่งอย่างง่าย และมีราคาแพงกว่า 20-50 เท่าสำหรับการสลับโทเค็น การส่งอย่างง่ายนั้นมีปริมาณข้อมูลค่อนข้างมาก แต่ปริมาณการแลกเปลี่ยนที่คำนวณนั้นใหญ่กว่ามาก ดังนั้นการแลกเปลี่ยนจึงเป็นเกณฑ์มาตรฐานที่ดีกว่าสำหรับค่าใช้จ่ายโดยประมาณของการคำนวณ L1 เทียบกับการคำนวณ L2 เมื่อคำนึงถึงสิ่งเหล่านี้ทั้งหมด หากเราถือว่าอัตราส่วนต้นทุน 30x ระหว่างต้นทุนการคำนวณ L1 และต้นทุนการคำนวณ L2 ดูเหมือนว่าจะบ่งบอกเป็นนัยว่าค่าใช้จ่ายในการวางหลักฐาน Merkle บน L2 อาจเทียบเท่ากับการทำธุรกรรมปกติ 50 รายการ แน่นอน การใช้ Merkle tree แบบไบนารีช่วยลดต้นทุนได้ประมาณ 4 เท่า แต่ถึงอย่างนั้น ในกรณีส่วนใหญ่ ค่าใช้จ่ายก็สูงเกินไป - หากเราเต็มใจที่จะเสียสละที่ไม่เข้ากันกับแผนผังสถานะหกเหลี่ยมในปัจจุบันของ Ethereum เราจะมองหา ตัวเลือกที่ดีกว่า
5. การพิสูจน์ ZK-SNARK จะทำงานอย่างไร?
การใช้ ZK-SNARK นั้นมีแนวคิดที่เข้าใจง่ายเช่นกัน คุณเพียงแค่แทนที่ข้อพิสูจน์ของ Merkle ในแผนภาพด้านบนด้วย ZK-SNARK เพื่อพิสูจน์การมีอยู่ของข้อพิสูจน์ของ Merkle เหล่านั้น ZK-SNARK ต้องการ ~400,000 GAS สำหรับการคำนวณ ซึ่งใช้เวลาประมาณ 400 ไบต์ (เทียบกับ: ธุรกรรมพื้นฐานต้องใช้ 21,000 แก๊สและ 100 ไบต์ ซึ่งสามารถลดลงเหลือ ~25 คำหลังจากการบีบอัดในเทศกาลในอนาคต) ดังนั้นจากมุมมองของการคำนวณ ต้นทุนของ ZK-SNARK คือ 19 เท่าของต้นทุนของธุรกรรมพื้นฐานในปัจจุบัน และจากมุมมองของข้อมูล ต้นทุนของ ZK-SNARK คือ 4 เท่าของธุรกรรมพื้นฐานในปัจจุบันและ 16 เท่า ต้นทุนของเวลาธุรกรรมพื้นฐานในอนาคต ตัวเลขเหล่านี้เป็นการปรับปรุงครั้งใหญ่เหนือข้อพิสูจน์ของ Merkel แต่ก็ยังค่อนข้างแพง มีสองวิธีในการปรับปรุงสิ่งนี้: (i) การพิสูจน์ KZG เพื่อวัตถุประสงค์พิเศษ หรือ (ii) การรวม ซึ่งคล้ายกับการรวม ERC-4337 แต่ใช้การคำนวณทางคณิตศาสตร์ของนักเล่น เราสามารถเรียนทั้งสองอย่างพร้อมกันได้
6. การปรู๊ฟ KZG เพื่อจุดประสงค์พิเศษจะทำงานอย่างไร?
คำเตือน ส่วนนี้เป็นคณิตศาสตร์มากกว่าส่วนอื่นๆ เนื่องจากเรากำลังก้าวไปไกลกว่าเครื่องมืออเนกประสงค์ และสร้างเครื่องมือวัตถุประสงค์พิเศษที่มีราคาถูกลง ดังนั้นเราจึงต้องดำเนินการ "อย่างมีชั้นเชิง" ให้มากขึ้น หากคุณไม่ชอบคณิตศาสตร์เชิงลึก ให้ข้ามไปยังส่วนถัดไปได้เลย ขั้นแรก สรุปว่าพันธสัญญาของ KZG ทำงานอย่างไร: เราสามารถแสดงชุดข้อมูล [D_1...D_n] โดยใช้การพิสูจน์ KZG ของพหุนามที่ได้จากข้อมูล: โดยเฉพาะ พหุนาม P โดยที่ P(w) = D_1, P(w²) = D _2 ... P(wⁿ) = D_n. w นี่คือ "ยูนิฟอร์มรูท" ค่าของ wN = 1 สำหรับขนาดโดเมนการประเมินบางขนาด N (ทั้งหมดนี้ทำในฟิลด์จำกัด) ในการ "ผูกมัด" กับ P เราสร้างจุดโค้งวงรี com(P) = P₀ * G + P₁ * S₁ + ... + Pk * Sk ที่นี่: -G คือจุดกำเนิดของเส้นโค้ง -Pi คือค่าสัมประสิทธิ์ ith ของพหุนาม P -Si เป็นจุด ith ในการตั้งค่าที่เชื่อถือได้ เพื่อพิสูจน์ว่า P(z) = a เราสร้างผลหารพหุนาม Q = (P - a) / (X - z) และสร้างความมุ่งมั่น com(Q) จะสร้างพหุนามดังกล่าวได้ก็ต่อเมื่อ P(z) เท่ากับ a เท่านั้น ในการตรวจสอบการพิสูจน์ เราตรวจสอบสมการ Q * (X - z) = P - a โดยดำเนินการตรวจสอบเส้นโค้งวงรีในการพิสูจน์ com(Q) และพันธะพหุนาม com(P): เราตรวจสอบ e(com(Q) ), คอม( X - z)) ? = จ(คอม(P) - คอม(ก), คอม(1)) คุณสมบัติหลักที่ควรทราบ ได้แก่ :
ดังนั้น หลักฐานฉบับเต็มจึงต้องการ:
7. ต้นไม้ Verkle จะทำงานอย่างไร?
โดยพื้นฐานแล้ว Verkle tree เกี่ยวข้องกับการรวมข้อผูกพันของ KZG เข้าด้วยกัน (หรือข้อผูกพัน IPA ซึ่งอาจมีประสิทธิภาพมากกว่าและใช้การเข้ารหัสที่ง่ายกว่า): ในการจัดเก็บค่า 2⁴⁸ คุณต้องทำสัญญากับ KZG กับรายการของค่า 2²⁴ ซึ่งแต่ละค่าเป็นข้อผูกพันของ KZG 2²⁴ ค่า ต้นไม้ Verkle ได้รับการพิจารณาอย่างมากสำหรับต้นไม้สถานะ Ethereum เนื่องจากต้นไม้ Verkle สามารถใช้เพื่อเก็บการแมปคีย์-ค่า ไม่ใช่แค่รายการ (โดยทั่วไป คุณสามารถสร้างต้นไม้ขนาด 2²⁵⁶ แต่เริ่มว่างได้ เฉพาะในกรณีที่คุณเติมเฉพาะส่วนเฉพาะของ ต้นไม้เมื่อคุณต้องการเติมจริง ๆ )
ต้นไม้ Vicker มีลักษณะอย่างไร อันที่จริง คุณสามารถให้แต่ละโหนดมีความกว้าง 256 == 2⁸ สำหรับต้นไม้ที่ใช้ IPA และ 2²⁴ สำหรับต้นไม้ที่ใช้ KZG การพิสูจน์ในทรี Verkle นั้นค่อนข้างยาวกว่าใน KZG พวกมันสามารถยาวได้หลายร้อยไบต์ นอกจากนี้ยังยากแก่การตรวจสอบ โดยเฉพาะอย่างยิ่งหากคุณพยายามรวมหลักฐานหลายอย่างเข้าด้วยกัน อันที่จริง ต้นไม้ Verkle ควรได้รับการพิจารณาเหมือนกับต้นไม้ Merkle แต่เป็นไปได้มากกว่าหากไม่มี SNARKing (เนื่องจากต้นทุนข้อมูลที่ต่ำกว่า) และ SNARKing นั้นถูกกว่า (เนื่องจากต้นทุนการพิสูจน์ที่ต่ำกว่า) ข้อได้เปรียบที่ใหญ่ที่สุดของ Verkle tree คือสามารถประสานโครงสร้างข้อมูลได้: การพิสูจน์ Verkle สามารถใช้โดยตรงกับสถานะ L1 หรือ L2 ไม่มีโครงสร้างซ้อน และใช้กลไกเดียวกันทุกประการสำหรับ L1 และ L2 เมื่อควอนตัมคอมพิวเตอร์กลายเป็นปัญหา หรือเมื่อการแตกสาขาของ Merkle พิสูจน์แล้วว่ามีประสิทธิภาพเพียงพอ ต้นไม้ Verkle จะถูกแทนที่ด้วยต้นไม้แฮชแบบไบนารีด้วยฟังก์ชันแฮชที่เหมาะกับ SNARK ที่เหมาะสม
8. การรวม
หากผู้ใช้ N รายทำธุรกรรม N รายการ (หรือตามความเป็นจริง N ERC-4337 UserOperations) จำเป็นต้องพิสูจน์การอ้างสิทธิ์ข้ามเครือข่าย N ครั้ง เราสามารถประหยัดเงินได้มากโดยการรวมหลักฐานเหล่านี้เข้าด้วยกัน: การรวมธุรกรรมเหล่านี้เป็นบล็อกหรือตัวสร้างบันเดิล ที่เข้าไปในบล็อกสามารถสร้างหลักฐานที่พิสูจน์การอ้างสิทธิ์ทั้งหมดนี้ได้ในเวลาเดียวกัน นี่อาจหมายถึง:
ไดอะแกรมจากโพสต์การใช้งานกระเป๋าเงิน BLS ที่แสดงเวิร์กโฟลว์สำหรับลายเซ็นรวม BLS ใน ERC-4337 เวอร์ชันก่อนหน้า เวิร์กโฟลว์สำหรับการรวมการพิสูจน์ข้ามสายโซ่อาจดูคล้ายกันมาก
9. การอ่านสถานะโดยตรง
ความเป็นไปได้ขั้นสุดท้ายที่มีให้สำหรับ L2 ที่อ่าน L1 เท่านั้น (และไม่ใช่ L1 ที่อ่าน L2) คือการแก้ไข L2 เพื่อให้พวกเขาทำการเรียกคงที่โดยตรงไปยังสัญญาบน L1 สิ่งนี้สามารถทำได้ด้วย opcodes หรือการคอมไพล์ล่วงหน้า ซึ่งอนุญาตให้เรียกไปยัง L1 โดยที่คุณระบุที่อยู่เป้าหมาย ข้อมูลก๊าซ และข้อมูลการโทร และส่งคืนเอาต์พุต แต่เนื่องจากการเรียกเหล่านี้เป็นแบบคงที่ จึงไม่สามารถเปลี่ยนสถานะ L1 ใดๆ ได้ L2 ต้องรู้ว่า L1 ได้ดำเนินการกับเงินฝากแล้ว ดังนั้นจึงไม่มีอะไรขัดขวางการดำเนินการดังกล่าวได้ นี่เป็นความท้าทายในการดำเนินการด้านเทคนิคเป็นส่วนใหญ่ (ดู: สิ่งนี้มาจาก RFP ในแง่ดีเพื่อสนับสนุนการเรียกแบบคงที่ไปยัง L1) โปรดทราบว่าหากที่เก็บคีย์อยู่บน L1 และ L2 รวมการเรียกแบบสแตติก L1 ไม่จำเป็นต้องมีการยืนยันเลย! อย่างไรก็ตาม หาก L2 ไม่รวมการเรียกแบบสแตติก L1 หรือถ้าที่เก็บคีย์อยู่บน L2 (ซึ่งอาจต้องทำในที่สุดเมื่อ L1 แพงเกินไปสำหรับผู้ใช้ที่จะใช้แม้แต่นิดเดียว) ก็จำเป็นต้องมีการพิสูจน์
10. L2 เรียนรู้รากสถานะ Ethereum ล่าสุดได้อย่างไร
รูปแบบข้างต้นทั้งหมดต้องการ L2 เพื่อเข้าถึงรูทสถานะ L1 ที่ใกล้ที่สุดหรือสถานะ L1 ที่ใกล้ที่สุดทั้งหมด โชคดีที่ L2 ทั้งหมดมีฟังก์ชันบางอย่างในการเข้าถึงสถานะ L1 ล่าสุดอยู่แล้ว นี่เป็นเพราะพวกเขาต้องการฟังก์ชันดังกล่าวเพื่อจัดการข้อความจาก L1 ถึง L2 โดยเฉพาะการฝาก ในความเป็นจริง หาก L2 มีฟังก์ชันฝาก คุณสามารถใช้ L2 นั้นเพื่อย้ายรูทสถานะ L1 ไปยังสัญญาบน L2: เพียงแค่มีสัญญาบน L1 เรียก BLOCKHASH opcode และส่งต่อไปยัง L2 เป็นข้อความฝาก . สามารถรับส่วนหัวของบล็อกแบบเต็มได้ที่ด้าน L2 และแยกสถานะของรูทออก อย่างไรก็ตาม แต่ละ L2 มีวิธีที่ชัดเจนในการเข้าถึงสถานะ L1 ล่าสุดแบบเต็มหรือรากสถานะ L1 ที่ใกล้ที่สุดโดยตรง ความท้าทายหลักในการเพิ่มประสิทธิภาพวิธีที่ L2 รับรูทสถานะ L1 ล่าสุดคือการได้รับความปลอดภัยและความหน่วงต่ำในเวลาเดียวกัน:
บล็อกของห่วงโซ่ L2 ไม่เพียงขึ้นอยู่กับบล็อก L2 ก่อนหน้า แต่ยังรวมถึงบล็อก L1 ด้วย หาก L1 กู้คืนจากลิงก์ดังกล่าว L2 ก็จะกู้คืนเช่นกัน เป็นที่น่าสังเกตว่านี่เป็นวิธีการที่ Sharding เวอร์ชันก่อนหน้า (ก่อน Dank) ถูกจินตนาการให้ทำงาน ดูโค้ดที่นี่
11. เชนอื่นจำเป็นต้องเชื่อมต่อกับ Ethereum มากน้อยเพียงใดในการเก็บคีย์สโตร์ที่รูทใน Ethereum หรือกระเป๋าเงิน L2
น่าแปลกใจที่ไม่มาก จริงๆ แล้วไม่จำเป็นต้องเป็นการยกเลิกด้วยซ้ำ: หากเป็น L3 หรือการตรวจสอบความถูกต้อง คุณสามารถเก็บกระเป๋าเงินไว้ที่นั่นได้ ตราบใดที่คุณเก็บคีย์สโตร์ไว้ในการยกเลิก L1 หรือ ZK สิ่งที่คุณต้องการจริงๆ คือห่วงโซ่ที่สามารถเข้าถึงรูทสถานะ Ethereum ได้โดยตรง และความมุ่งมั่นด้านเทคนิคและสังคมที่จะเต็มใจจัดระเบียบใหม่หาก Ethereum จัดโครงสร้างใหม่ และฮาร์ดฟอร์กหาก Ethereum ฮาร์ดฟอร์ก คำถามการวิจัยที่น่าสนใจคือการกำหนดขอบเขตที่ chain สามารถมีรูปแบบการเชื่อมต่อนี้กับ chain อื่นๆ (เช่น Ethereum และ Zcash) การทำเช่นนี้แบบไร้เดียงสาเป็นไปได้: หาก Ethereum หรือ Zcash จัดระเบียบใหม่ ห่วงโซ่ของคุณสามารถตกลงที่จะจัดระเบียบใหม่ (และฮาร์ดฟอร์กหาก Ethereum หรือ Zcash ทำการฮาร์ดฟอร์ก) แต่ผู้ให้บริการโหนดและชุมชนของคุณมักจะมีการพึ่งพาทางเทคโนโลยีและการเมืองสองเท่า ดังนั้นเทคนิคนี้สามารถใช้เชื่อมต่อกับเครือข่ายอื่น ๆ ได้ แต่มีค่าใช้จ่ายเพิ่มขึ้น โครงร่างที่ใช้สะพาน ZK มีคุณสมบัติทางเทคนิคที่น่าสนใจ แต่จุดอ่อนที่สำคัญคือไม่ทนทานต่อการโจมตี 51% หรือการฮาร์ดฟอร์ก อาจมีวิธีแก้ปัญหาที่ชาญฉลาดกว่าเช่นกัน
12. การคุ้มครองความเป็นส่วนตัว
เป็นการดีที่เราต้องการรักษาความเป็นส่วนตัวด้วย หากคุณมีกระเป๋าเงินจำนวนมากที่จัดการโดยที่เก็บคีย์เดียวกัน เราต้องการให้แน่ใจว่า:
ความท้าทายหลักของแนวทางนี้ในปัจจุบันคือการรวมต้องการให้ตัวรวบรวมสร้าง SNARK แบบเรียกซ้ำ ซึ่งขณะนี้ช้ามาก ด้วย KZG เราสามารถใช้งานนี้ (ดูเพิ่มเติม: เวอร์ชันที่เป็นทางการมากขึ้นของงานนี้ในเอกสาร Caulk) ในการพิสูจน์ KZG ที่ไม่เปิดเผยดัชนีเป็นจุดเริ่มต้น อย่างไรก็ตาม การรวมการพิสูจน์คนตาบอดเป็นปัญหาเปิดที่ต้องให้ความสนใจมากขึ้น น่าเสียดายที่การอ่าน L1 โดยตรงจากภายใน L2 ไม่ได้รักษาความเป็นส่วนตัว แม้ว่าการใช้ฟังก์ชันการอ่านโดยตรงจะยังมีประโยชน์อยู่มาก ทั้งเพื่อลดเวลาแฝงและเนื่องจากยูทิลิตี้สำหรับแอปพลิเคชันอื่นๆ
13. สรุป
หากต้องการมีกระเป๋าเงินสำหรับการกู้คืนทางสังคมแบบข้ามสายโซ่ เวิร์กโฟลว์ที่สมจริงที่สุดคือกระเป๋าเงินที่รักษาที่เก็บคีย์ไว้ในที่เดียว และกระเป๋าเงินที่ดูแลกระเป๋าเงินในหลาย ๆ ที่ ซึ่งกระเป๋าเงินจะอ่านที่เก็บคีย์เพื่อ (i) อัปเดตคีย์การตรวจสอบสิทธิ์ในเครื่อง ดู หรือ (ii) ในกระบวนการตรวจสอบธุรกรรมแต่ละรายการ องค์ประกอบสำคัญที่ทำให้สิ่งนี้เป็นไปได้คือการพิสูจน์ข้ามสายโซ่ เราจำเป็นต้องทำงานเพื่อเพิ่มประสิทธิภาพการพิสูจน์เหล่านี้ ZK-SNARK หรือโซลูชัน KZG แบบกำหนดเองที่รอการพิสูจน์จาก Verkle ดูเหมือนจะเป็นตัวเลือกที่ดีที่สุด ในระยะยาว โปรโตคอลการรวม (โดยที่บันเดิลสร้างการพิสูจน์รวมซึ่งเป็นส่วนหนึ่งของการสร้างบันเดิลของการดำเนินการของผู้ใช้ทั้งหมดที่ส่งโดยผู้ใช้) เป็นสิ่งจำเป็นเพื่อลดค่าใช้จ่าย สิ่งนี้น่าจะรวมอยู่ในระบบนิเวศ ERC-4337 แม้ว่าอาจต้องมีการเปลี่ยนแปลง ERC-4337 ควรปรับ L2 ให้เหมาะสมเพื่อลดเวลาแฝงของการอ่านสถานะ L1 (หรืออย่างน้อยสถานะรูท) จากภายใน L2 เหมาะอย่างยิ่งสำหรับ L2s ในการอ่านสถานะ L1 โดยตรง ช่วยประหยัดพื้นที่ในการพิสูจน์ กระเป๋าเงินไม่สามารถอยู่บน L2 เท่านั้น คุณยังสามารถใส่กระเป๋าเงินในระบบที่มีระดับการเชื่อมต่อกับ Ethereum ต่ำกว่า (L3 หรือแม้กระทั่งตกลงที่จะรวมรากสถานะ Ethereum และ chain of fork ที่เป็นอิสระ) อย่างไรก็ตาม ที่เก็บคีย์ควรอยู่บน L1 หรือ ZK rollup ความปลอดภัยสูง L2 การใช้ L1 ช่วยประหยัดความซับซ้อนได้มาก แต่ถึงแม้จะมีราคาแพงเกินไปในระยะยาว ดังนั้นจึงจำเป็นต้องใช้ที่เก็บคีย์บน L2 การรักษาความเป็นส่วนตัวจะต้องทำงานพิเศษและทำให้การเลือกบางอย่างยากขึ้น อย่างไรก็ตาม เราน่าจะหันมาใช้วิธีการรักษาความเป็นส่วนตัวอยู่ดี อย่างน้อยก็ต้องแน่ใจว่าสิ่งที่เราคิดขึ้นมานั้นสอดคล้องกับการรักษาความเป็นส่วนตัว