ZKEVM เป็นเครื่องเสมือนที่ตั้งโปรแกรมได้โดยใช้เทคโนโลยี ZK สามารถสร้างการพิสูจน์ความรู้เป็นศูนย์ (การพิสูจน์ zk) สำหรับการดำเนินการทั้งหมดที่ดำเนินการโดยเครื่องเสมือนเพื่อพิสูจน์ความถูกต้องของการทำงานของเครื่องเสมือน สำหรับการแนะนำแผนการใช้งานต่างๆ ของ ZKEVM และการเปรียบเทียบข้อดีและข้อเสีย คุณสามารถอ้างอิงบทความของ V God:The different types of ZK-EVMs; หากคุณต้องการทราบรายละเอียดการออกแบบเพิ่มเติม คุณสามารถอ่านโครงร่าง ZKEVM ของ PSE (ระดับดั้งเดิม):privacy-scaling-explorations/zkevm-specsการออกแบบ ZKEVM ของรูปหลายเหลี่ยม (ระดับรหัสไบต์):Polygon zkEVM Documentation; การออกแบบ ZKEVM ของ Sin7y (ระดับภาษา):OlaVM: An Ethereum compatible ZKVM. โดยไม่คำนึงถึงวิธีแก้ปัญหา จำเป็นต้องใช้ zk เพื่อจำกัดพฤติกรรมทั้งหมดของ VM รวมถึง:
• ดำเนินตรรกะการคำนวณสัญญา
• ดำเนินการเข้าถึงหน่วยความจำ
• ทำการคำนวณแฮช
• ดำเนินการอัปเดตสถานะโลก
• ...
อย่างที่เราทราบกันดีว่า zk มีโอกาสในการใช้งานที่ยอดเยี่ยมในด้านการบีบอัดการประมวลผล ไม่ว่าการคำนวณดั้งเดิมจะซับซ้อนเพียงใด กระบวนการตรวจสอบก็มีประสิทธิภาพมาก ซึ่งเป็นทักษะพื้นฐานของอัลกอริทึม zk ทั้งหมด ดังนั้น zk สามารถมีบทบาทที่ดีในส่วนการคำนวณ (เช่น ลอจิกสัญญา การคำนวณแฮช เป็นต้น) ข้อมูลบางอย่างจำเป็นต้องใส่ไว้ในหน่วยความจำล่วงหน้า แล้วจึงดึงข้อมูลเมื่อทำการคำนวณ
เนื่องจาก VM ส่วนใหญ่อ่านและเขียนหน่วยความจำ ความถูกต้องของการดำเนินการเข้าถึงหน่วยความจำเหล่านี้จึงต้องถูกจำกัด (เช่น การตรวจสอบความสอดคล้องกันว่าข้อมูลที่อ่านจากที่อยู่หนึ่งๆ เหมือนกับข้อมูลที่เขียนครั้งล่าสุด) สำหรับข้อจำกัดการเข้าถึงหน่วยความจำ ตัวมันเองไม่ซับซ้อน (มีกรณีน้อยกว่า) แต่เนื่องจากการเข้าถึงหน่วยความจำจำนวนมาก ลำดับของพหุนามจึงสูงมาก ซึ่งทำให้ข้อจำกัดที่เกี่ยวข้องกับหน่วยความจำพิสูจน์ได้ว่าใช้เวลานาน
ชื่อระดับแรก
ข้อความ
โดยEVMคำอธิบายภาพ
ข้อความ
ข้อความ
ข้อความ
• MSTORE(x,ข้อความ
• MSTORE8(x,y): เริ่มต้นจากที่อยู่ x เขียน 8 ไบต์ของ y (เริ่มต้นบิตล่าง) ผู้อ่านที่สนใจสามารถค้นหาได้EVM Playgroundข้อความ
มีอยู่
มีอยู่OlaVMในส่วน 5.3.5 คุณสามารถดูหลักการออกแบบของข้อจำกัดหน่วยความจำ (คำสั่งเกี่ยวกับหน่วยความจำ OlaVM คล้ายกับ EVM)
ใน OlaVM การทำงานของ RAM ทั้งหมดสร้างตารางอิสระ และเนื้อหาในตารางประกอบด้วยสองประเภท: หน่วยความจำและพื้นที่เก็บข้อมูล ในที่นี้ เราเน้นเฉพาะข้อจำกัดในหน่วยความจำเท่านั้น ประเภทของการทำงานของหน่วยความจำสามารถแบ่งออกได้เป็นสามประเภทอย่างคร่าว ๆ ดังนี้
• เริ่มต้นการทำงาน
• การดำเนินการเขียน
• อ่านการดำเนินการ
มีสามสถานการณ์ที่ทริกเกอร์ Init ได้แก่ การเปลี่ยนแปลงของ ctx การเปลี่ยนประเภท และการเปลี่ยนแปลงของ addr เมื่อสถานการณ์ใดสถานการณ์หนึ่งถูกทริกเกอร์ จำเป็นต้องมีข้อจำกัดประเภทการดำเนินการคือ w (เขียน), v (ค่า) คือ 0。
เมื่อไม่ได้ทริกเกอร์สถานการณ์ทั้งสามข้างต้น จำเป็นต้องจำกัดตามประเภทการดำเนินการปัจจุบัน
• หากเป็นการดำเนินการ w (เขียน) จำเป็นต้องจำกัดว่า clk จะเพิ่มขึ้น (เรียกโมดูล rangecheck) และค่าที่เขียน v ถูกต้อง (ข้อ จำกัด การเรียกสำเนา ใน OlaVM ค่าทั้งหมดของคำสั่งหน่วยความจำ มาจากการลงทะเบียน)
• หากเป็นการดำเนินการ r(read) จำเป็นต้องจำกัด clk ให้เพิ่มขึ้น (เรียกโมดูล rangecheck)ค่าที่อ่านจะเหมือนกับค่าที่เขียนล่าสุด。
การปรับปรุงความเป็นไปได้บางอย่าง (เป็นมิตรกับ zk มากขึ้น)
• สำหรับการดำเนินการ Init คุณจำเป็นต้องจำกัดค่าเริ่มต้นของที่อยู่หน่วยความจำเป็น 0 หรือไม่
ฉันไม่คิดว่าจำเป็นต้องจำกัดการดำเนินการเริ่มต้น อันที่จริง สำหรับที่อยู่ใดๆ คุณสามารถจำกัดการเข้าถึงครั้งแรกได้ต้องเป็นการดำเนินการเขียน ไม่ใช่การดำเนินการอ่าน และถ้าเป็นรูปแบบหน่วยความจำแบบเขียนครั้งเดียว สิ่งนี้ ข้อจำกัดจะเป็นไปตามธรรมชาติ ดังนั้น หากโมเดลหน่วยความจำของเครื่องเสมือนเปลี่ยนเป็นโมเดลการเขียนครั้งเดียว ข้อจำกัดในการเข้าถึงหน่วยความจำจะลดลง
• สำหรับการดำเนินการอ่าน สามารถหลีกเลี่ยงข้อจำกัดที่เกี่ยวข้อง นั่นคือ เพื่อหลีกเลี่ยงการตรวจสอบว่าค่าที่อ่านสอดคล้องกับค่าที่เขียนล่าสุดหรือไม่
เนื่องจากไม่สามารถรับประกันหน่วยความจำอ่าน-เขียนของประเภทหน่วยความจำที่กำหนดโดย VM เอง ค่าของที่อยู่หน่วยความจำนี้จึงไม่ได้รับการแก้ไขก่อนที่ VM จะอ่านค่าของที่อยู่หน่วยความจำนี้ ดังนั้นจึงจำเป็นต้องเพิ่มการตรวจสอบความเท่าเทียมกัน เช่น แสดงในรูปต่อไปนี้:
จากสิ่งนี้จะเห็นได้ว่าเหตุผลหลักสำหรับข้อจำกัดนี้คือรูปแบบหน่วยความจำคือการอ่านและเขียนหน่วยความจำ และค่าของ address อาจถูกเขียนใหม่ ดังนั้น หากคุณพยายามใช้หน่วยความจำแบบอ่านอย่างเดียว ) จากนั้นคุณไม่จำเป็นต้องเขียนในหน่วยความจำ ข้อ จำกัด เพื่อให้บรรลุข้อ จำกัด ความสอดคล้องข้างต้น
หมายเหตุ: สิ่งนี้อาจเพิ่มความยากในการใช้งานเครื่องเสมือน เนื่องจากเป็นรูปแบบหน่วยความจำที่ผิดปกติ และเราไม่ควรกำหนด DSL ขั้นสูงบนเครื่องเสมือนนี้ก่อน เนื่องจากภาษานี้ค่อนข้างไม่คุ้นเคยสำหรับนักพัฒนา Dapp ที่เป็นมิตรจำเป็นต้องตัดออก ในระดับคอมไพเลอร์ ทำให้สิ่งเหล่านี้ไม่เป็นมิตรและมองไม่เห็นสำหรับนักพัฒนา ดังนั้น หากใช้โมเดลหน่วยความจำข้างต้น ข้อจำกัดของโมดูลหน่วยความจำจะเป็นข้อจำกัดสำหรับการดำเนินการเขียนเท่านั้น นั่นคือ ใช้ข้อจำกัดการคัดลอกเพื่อให้แน่ใจว่าค่าที่เขียนถูกต้องไม่มีข้อ จำกัด:
• ค่าที่อ่านจะเท่ากับค่าที่เขียนเนื่องจากหน่วยความจำสามารถเขียนได้เพียงครั้งเดียว
• clk การอ่านมีค่ามากกว่า clk การเขียน เนื่องจากสามารถเขียนได้ก่อนแล้วจึงอ่าน
• หน่วยความจำเริ่มต้นเป็น 0 (ไม่จำเป็น)
บัญชี WeChat สาธารณะ: Sin7Y
ethereum_evm_illustrated, page 51
เกี่ยวกับเรา
Sin7y ก่อตั้งขึ้นในปี 2564 และประกอบด้วยนักพัฒนาบล็อกเชนชั้นนำ เราเป็นทั้งผู้บ่มเพาะโครงการและทีมวิจัยเทคโนโลยีบล็อกเชน สำรวจเทคโนโลยีที่สำคัญและล้ำสมัยที่สุด เช่น EVM, Layer2, cross-chain, การประมวลผลเพื่อความเป็นส่วนตัว และโซลูชันการชำระเงินอัตโนมัติ
บัญชี WeChat สาธารณะ: Sin7Y
GitHub | Twitter | Telegram | Medium| Mirror | HackMD | HackerNoon
