หลักการและโครงสร้างของ zkRollup

ขั้นสูง5/7/2024, 1:51:10 AM
ด้วยการพัฒนาและการเจริญเติบโตของเครื่องจำลองเสมือน zk การรองรับการดำเนินการที่สามารถทำงานเหมือน Turing ของสัญญาอัจฉริยะอย่างไม่จำกัดได้เป็นไปได้ ศักยภาพของ zkRollup จะถูกปลดล็อคอย่างแท้จริง การที่จะเข้าใจวิสัยทัศน์ของการแตกกระจายบล็อกเชน

ภาพรวมของ Rollup

Rollup เป็นหมวดหมู่ของโซลูชันการขยายของ Layer 2 บนบล็อกเชน ในโครงการ Rollup ผู้ดำเนินการเป็นผู้ทำงานของแพลตฟอร์ม Layer 2 ที่เป็นอิสระอย่างสมบูรณ์ภายใต้เชนหลักที่ขยายออกไป (เช่น Layer 1) ผู้ใช้สามารถดำเนินการสัญญาหรือโอนโทเคนบนแพลตฟอร์ม Layer 2

ความปลอดภัยของแพลตฟอร์ม Layer 2 รับประกันโดยบล็อกเชนเลเยอร์ 1 ที่อาศัย เมื่อบล็อกใหม่ถูกสร้างขึ้นในเลเยอร์ 2 ข้อมูลธุรกรรมจากบล็อกเลเยอร์ 2 รวมถึงรากสถานะหลังการทําธุรกรรมของเลเยอร์ 2 จะถูกรวมเป็นธุรกรรม Rollup และเผยแพร่บนห่วงโซ่เลเยอร์ 1 การดําเนินการธุรกรรมจริงและการเปลี่ยนแปลงสถานะจะได้รับการประมวลผลบนแพลตฟอร์มเลเยอร์ 2 ด้านล่างห่วงโซ่หลัก และเลเยอร์ 1 จําเป็นต้องตรวจสอบความถูกต้องของการเปลี่ยนสถานะของเลเยอร์ 2 เท่านั้น เนื่องจากค่าใช้จ่ายในการตรวจสอบความถูกต้องของการเปลี่ยนสถานะต่ํากว่าการดําเนินการธุรกรรมเหล่านี้ในเลเยอร์ 1 เลเยอร์ 2 จึงสามารถบรรลุการขยายตัวของแพลตฟอร์มเลเยอร์ 1 แพลตฟอร์มเลเยอร์ 2 สามารถให้ปริมาณธุรกรรมที่สูงขึ้นและต้นทุนการทําธุรกรรมที่ต่ํากว่าเมื่อเทียบกับเลเยอร์ 1 ในขณะที่ยังคงความปลอดภัยที่เท่าเทียมกัน

เมื่อเปรียบเทียบกับระบบธุรกรรมแบบออฟเชนท์อื่น ๆ Rollups มีลักษณะสองอย่าง:

  • ความพร้อมใช้งานของข้อมูลรัฐสำหรับเลเยอร์ที่สองได้รับการแก้ไขโดยการเก็บข้อมูลในเครือข่ายหลัก เพลตฟอร์มเลเยอร์ที่สองบันทึกข้อมูลการทำธุรกรรมทั้งหมดหรือการเปลี่ยนแปลงสถานะเลเยอร์ที่สองในบล็อกบนเครือข่ายหลัก หากสถานะเลเลอร์ที่สองหายไป ใครก็สามารถกู้คืนสถานะที่หายไปจากข้อมูลที่เก็บไว้บนเครือข่ายหลัก
  • ในโครงการ Rollup รากสถานะชั้น 2 เปลี่ยนแพคและเก็บไว้บนโซ่หลักจำเป็นต้องได้รับการตรวจสอบในทางใดทางหนึ่งบนโซ่หลักหลังจากการตรวจสอบสถานะของชั้น 2 จะถูกล็อคบนโซ่หลักชั้น 1 ดังนั้นภายใต้เงื่อนไขของโครงการตรวจสอบที่ปลอดภัยชั้น 2 สามารถเพลิดเพลินกับระดับความปลอดภัยเดียวกับชั้น 1

ตามวิธีการตรวจสอบของการอัปเดตสถานะเลเยอร์ 2 โดยห่วงโซ่หลักปัจจุบันมีโซลูชันเทคโนโลยี Rollup สองประเภทหลัก หนึ่งคือ Optimistic Rollup ในโครงการประเภทนี้สัญญาโซ่หลักไม่ได้ตรวจสอบสถานะใหม่ที่ส่งโดยเลเยอร์ 2 โดยตรง แต่จะมีการเตรียมช่วงเวลาท้าทายสําหรับแต่ละรัฐใหม่ที่ส่งมา เนื่องจาก Rollup ส่งข้อมูลธุรกรรมทั้งหมดไปยังห่วงโซ่หลักและทําให้เป็นสาธารณะทุกคนสามารถตรวจสอบการอัปเดตสถานะได้ (โดยเฉพาะอย่างยิ่งเมื่อการอัปเดตเกี่ยวข้องกับกระเป๋าเงินของตนเอง) หากสถานะใหม่ไม่ถูกต้องผู้ตรวจสอบสามารถสร้างหลักฐานการทุจริตต่อรัฐที่ผิดพลาดนั้นและส่งภายในระยะเวลาท้าทายจึงทําให้การอัปเดตสถานะที่ไม่ถูกต้องเป็นโมฆะ

โซลูชัน Rollup อีกประเภทหนึ่งคือ zk Rollup ในรูปแบบประเภทนี้หลังจากดําเนินการอัปเดตสถานะเลเยอร์ 2 ผู้ดําเนินการเลเยอร์ 2 จะต้องแสดงหลักฐานที่ไม่มีความรู้เกี่ยวกับความถูกต้องของการอัปเดตสถานะและส่งไปยังห่วงโซ่หลักพร้อมกับการอัปเดตสถานะ สัญญาในห่วงโซ่หลักจะตรวจสอบหลักฐานเพื่อตรวจสอบความถูกต้องของการปรับปรุงสถานะ

เมื่อเทียบกับโครงการ Optimistic Rollup แล้ว zk Rollup ไม่จําเป็นต้องมีระยะเวลาท้าทายที่ยาวนานเพื่อยืนยันธุรกรรมเลเยอร์ 2 ในที่สุดและสามารถยืนยันได้เร็วขึ้น นอกจากนี้ zk Rollup ไม่ได้อาศัยสมมติฐานว่าจะมีผู้ตรวจสอบที่ซื่อสัตย์ในเครือข่ายที่จะส่งหลักฐานการทุจริตในเวลาที่เหมาะสมเมื่อเกิดการฉ้อโกง อย่างไรก็ตามในเวลาเดียวกัน zk Rollup ยังเผชิญกับปัญหาต่างๆเช่นต้นทุนการคํานวณที่สูงของเทคโนโลยีการพิสูจน์ความรู้ความซับซ้อนและความยากลําบากในการพัฒนาซึ่งเป็นอุปสรรคต่อการนําเทคโนโลยี zk Rollup ไปใช้ใน Rollups ด้วยการพัฒนาเทคโนโลยีการพิสูจน์ความรู้เป็นศูนย์ในช่วงสองปีที่ผ่านมาอุปสรรคเหล่านี้ค่อยๆถูกเอาชนะ เทคโนโลยี zk Rollup เริ่มครองส่วนแบ่งตลาด Layer 2 มากขึ้นเรื่อย ๆ

ตามที่แสดงในรูปด้านล่าง ในส่วนขยายมิติชั้นที่ 2 ของ Rollup zkRollup ได้เข้าครองพื้นที่มากกว่าครึ่งหนึ่งแล้ว และกำลังพัฒนาอย่างรวดเร็ว

Image source

ข้อมูลถูกดึงขึ้นมาเมื่อ: 18 มกราคม 2024

จาก zkRollup ที่เชี่ยวชาญไปสู่ zkRollup ทั่วไป

ในช่วงการพัฒนา zkRollup ได้ผ่านมาสองขั้นตอนหลักๆ คือประเภทแรกคือ non-general zkRollup ในขณะที่ประเภทที่สองคือ general zkRollup ที่สามารถดำเนินการสัญญาอย่างสมบูรณ์แบบที่สามารถทำซ้ำได้

ความแตกต่างระหว่างเทคโนโลยี zkRollup ของสองประเภทนี้ อยู่ที่ไล่ที่สำคัญในว่าแพลตฟอร์มเลเยอร์ 2 มีการดำเนินการด้วยโลจิกที่ถูกจำกัดที่เขียนโดยผู้ให้บริการแพลตฟอร์มหรือโลจิกสมาร์ทคอนแทรคอิที่ถูกเขียนโดยผู้ใช้ในธุรกรรม

ในโครงการ zkRollup ที่ไม่ใช่โครงการทั่วไป (เช่น zkSync Lite ซึ่งอยู่ในอันดับที่ 8 ในรูปข้างต้น) ผู้ใช้สามารถทำเฉพาะประเภทของการดำเนินการทางธุรกรรมเพียงเล็กน้อย เช่น การโอน FT (ตัวแทนที่สามารถแลกเปลี่ยนได้) การชำระเงิน การสวิทช์ และการโอน NFT (ตัวแทนที่ไม่สามารถแลกเปลี่ยนได้) เพียงผู้ถือโครงการเท่านั้นที่สามารถกำหนดและดำเนินการตรรกะการทำธุรกรรมสำหรับการดำเนินการเหล่านี้

ผ่านโครงการ zkRollup เช่นนี้ เราสามารถโอนเงินด้วยค่าธรรมเนียมที่ต่ำมากเมื่อเปรียบเทียบกับ Ethereum mainnet และได้รับประสิทธิภาพของการทำธุรกรรมที่สูงกว่า อย่างไรก็ตาม หากเราต้องการลองทดลองสัญญาที่น่าสนใจบนเชน เราจะไม่สามารถทำได้

ทำไม zkRollups ที่เชี่ยวชาญไม่สามารถอนุญาตให้ผู้ใช้ติดตั้งและใช้สมาร์ทคอนแทร็คของตนเอง? สิ่งนี้นำเรากลับสู่โครงสร้างพิสูจน์ของ zkRollup เอง

เพื่อให้แน่ใจว่าการเปลี่ยนสถานะของ L2 ถูกต้องและน่าเชื่อถือ ใน zkRollup ทุกๆ ตรรกะการเปลี่ยนสถานะของ L2 จำเป็นต้องเขียนเป็นวงจรพิสูจน์ทศนิยมเป็นศูนย์และตรวจสอบโดยสัญญา L1 เท่านั้น สถานะที่ผ่านการตรวจสอบเท่านั้นที่สามารถรับได้โดย L1 และสามารถทำ Rollup ได้เป็นที่สุด กระบวนการนี้ต้องการว่าตรรกะการดำเนินการทั้งหมดของแพลตฟอร์ม zkRollup จะต้องผ่านการตรวจสอบในวงจรพิสูจน์ทศนิยม อย่างไรก็ตาม การสนับสนุนการดำเนินการของตรรกะสัญญาอย่างไม่จำกัดในวงจรพิสูจน์ทศนิยมเป็นสิ่งท้าทาย (เหตุผลที่ยากต่อความยากลำบากนี้จะอธิบายต่อไปในข้อความ) ผลลัพธ์ที่ได้คือโปรเจกต์ zkRollup แรกๆ มักสนับสนุนเฉพาะจำนวนจำกัดของธุรกรรมที่เรียบง่ายบางอย่างเท่านั้น

การสามารถดำเนินการเพียงจำนวนจำกัดของธุรกรรมพื้นฐานเท่านั้น โดยอย่างชัดเจนไม่ตรงกับความคาดหวังของเราสำหรับ zkRollup โชคดีที่มีเทคโนโลยี zkVM (Zero-Knowledge Virtual Machine) ได้แก้ปัญหาในการพิสูจน์การดำเนินการของรหัส Turing-complete ใด ๆ ภายในวงจรพิสูจน์ซึ่งเป็นศูนย์ศูนย์ ทำให้แพลตฟอร์ม zkRollup ทั่วไปเป็นเป็นไปได้ ต่อไป บทความนี้จะแนะนำหลักการในการปฏิบัติของ zkVM เพื่อให้ผู้อ่านเข้าใจว่าส่วนสำคัญสุดท้ายของเทคโนโลยี zkRollup ทั่วไปดำเนินการอย่างไร

หลักการในการนำไปใช้ของ zkVM

ก่อนที่จะแนะนำหลักการของ zkVM เราจะให้ข้อมูลย่อเกี่ยวกับเทคโนโลยีพิสูจน์ที่ไม่เปิดเผย (zero-knowledge proof) ก่อน ที่นี่เราไม่จำเป็นต้องเข้าใจหลักการคณิตศาสตร์พื้นฐานของพิสูจน์ที่ไม่เปิดเผยอย่างละเอียด มันเพียงพอที่จะเข้าใจว่าพิสูจน์ที่ไม่เปิดเผยสามารถทำอะไรได้บ้าง วิธีการใช้งานและข้อจำกัดที่นำเข้ามาโดยวงจรพิสูจน์ที่เฉพาะเจาะจงของพวกเขา

การแนะนำเรื่องการพิสูจน์ทราบศิลปะศูนย์

การพิสูจน์ที่ไม่เปิดเผยใน zkRollup ใช้เพื่อพิสูจน์ว่าธุรกรรมของเลเยอร์ 2 ได้รับการดำเนินการอย่างถูกต้องและสถานะของเลเยอร์ 2 ได้รับการอัปเดตอย่างถูกต้อง

เพื่อบรรลุวัตถุประสงค์นี้ วงจร zkVM ต้องพิสูจน์ว่าสัญญาอัจฉริยะใดที่ถูกติดตั้งบน Layer 2 ได้รันอย่างถูกต้อง ก่อนที่จะนำเสนอหลักการของ zkVM พวกเราจำเป็นต้องพูดถึงบทบาทของพิสูจน์ความจริงแบบศูนย์และวิธีการทำงานของมันก่อน

ทำไมต้องใช้พิสูจน์ทรัพยากรที่ไม่มีข้อมูล

ศาสตร์พิสูจน์ที่ไม่ระบุตัวตนเป็นหลักการทางรหัสวิทยาที่ช่วยให้ผู้พิสูจน์สามารถโน้มน้าวผู้ตรวจสอบให้เชื่อถือถูกต้องของคำให้ไม่เปิดเผยข้อมูลเพิ่มเติมใด ๆ ให้แก่ผู้ตรวจสอบ

พิสูจน์ที่ไม่รู้อะไรซอฟต์แวร์มีคุณสมบัติหลักสามประการ

  • ความสมบูรณ์: หากคำถามที่ต้องการพิสูจน์เป็นความจริง ผู้ตรวจที่ซื่อสัตย์ (นั่นคือผู้ที่ปฏิบัติตามขั้นตอนอย่างถูกต้อง) จะถูกโน้มน้าวให้เชื่อว่าความจริงนี้โดยผู้พิสูจน์ที่ซื่อสัตย์
  • ความถูกต้อง: ถ้าคำให้การที่จะต้องพิสูจน์เป็นเท็จ ผู้ให้การที่ไม่ซื่อสัตย์จะมีโอกาสเพียงเล็กน้อยที่จะโน้มน้าวผู้ตรวจสอบที่ซื่อสัตย์ว่ามันเป็นจริง
  • ซึ่งไม่มีความรู้: นอกเหนือจากคำกล่าวถูกต้องแล้ว ผู้ตรวจสอบจะไม่สามารถได้รับข้อมูลเพิ่มเติมจากกระบวนการตรวจสอบ

ด้วยความสมบูรณ์ของพิสูจน์ทศนิยมศูนย์ เมื่อผู้พิสูจน์ทำการคำนวณที่ซับซ้อนเสร็จสิ้น พวกเขาสามารถสร้างพิสูจน์ที่ทำให้ผู้ตรวจสามารถที่จะเชื่อว่าข้อมูลเอาต์พุตที่ได้รับจากข้อมูลนำเข้าคือผลลัพธ์ที่ถูกให้โดยผู้ปฏิบัติการ ความเชื่อถือได้ของพิสูจน์ทศนิยมศูนย์ รับรองว่าเมื่อผู้ปฏิบัติการให้ผลลัพธ์ที่ผิด พวกเขาจะไม่สามารถสร้างพิสูจน์ที่ถูกต้อง

ดังนั้น ด้วยความสมบูรณ์และความแข็งแกร่งของศาสตร์ภาพรู้ศัพท์ศูนย์ เราสามารถส่งการคำนวณที่ซับซ้อนเหล่านี้ไปให้ผู้อื่นและตรวจสอบผ่านกระบวนการตรวจสอบที่เรียบง่ายในขณะเดียวกันว่าการคำนวณถูกต้อง โดยไม่จำเป็นต้องเชื่อใจในฝ่ายที่ทำการส่งการคำนวณ

นอกจากสามคุณสมบัติหลักของพิสูจน์ศูนย์ความรู้ โปรแกรม zk-SNARK ที่ใช้กันอย่างแพร่หลายยังมีลักษณะของความกระชับ ซึ่งหมายถึงสำหรับตรรกะที่ซับซ้อนใด ๆ ที่ได้รับการพิสูจน์โดยใช้พิสูจน์ศูนย์ความรู้ ขนาดของพิสูจน์ที่สร้างขึ้นและเวลาที่ใช้ในการตรวจสอบพิสูจน์ทั้งสองนี้จะมีขนาดคงที่และเล็กน้อย นี้ช่วยให้ zk-Rollup สามารถโอนการคำนวณการอัปเดตสถานะออกจากเชื่อมต่อและเชื่อมต่อเพียงการตรวจสอบความถูกต้องของการดำเนินการในเชื่อมต่อ ทำให้การแก้ปัญหาการขยายสเกลเป็นไปได้

กระบวนการของหลักศาสตร์การพิสูจน์ที่ไม่เผยข้อมูล

ต่อไป บทความนี้จะใช้การคำนวณที่เรียบง่ายด้านล่างเป็นตัวอย่าง เพื่ออธิบายกระบวนการของพิสูจน์ทศนิยมศูนย์

c=a²+b+5

เพื่ออธิบายด้านศูนย์ศูนย์ในศูนย์ศูนย์พิสูจน์ เราจะตั้งตัวแปร a และ c เป็นค่าสาธารณะของพิสูจน์ศูนย์ศูนย์นี้ โดย b เป็นข้อมูลลับที่รู้เพียงเฉพาะผู้พิสูจน์เท่านั้น จากการคำนวณของเราที่เรียบง่ายมาก ผู้ตรวจสามารถคำนวณค่าข้อมูลลับได้ง่ายจากค่าสาธารณะ สิ่งนี้ไม่ส่งผลกระทบต่อคุณสมบัติศูนย์ศูนย์ของวิธีพิสูจน์ศูนย์ศูนย์เอง เนื่องจากมันสามารถรับประกันได้เพียงว่าผู้ตรวจจะไม่สามารถได้รับข้อมูลเกี่ยวกับข้อมูลลับจากกระบวนการพิสูจน์

เมื่อพิสูจน์ ผู้พิสูจน์จะเลือกค่าสำหรับ a และ b ตามลำดับเป็นอินพุตและคำนวณค่าของ c ที่นี่เรากำหนด a = 3, b = 2, จากนั้น c = 16 หลังจากทำการคำนวณทั้งหมดเสร็จ ผู้พิสูจน์สามารถสร้างพิสูจน์ที่ไม่เปิดเผยค่าสำหรับค่าเหล่านี้และการดำเนินการ

หลังจากที่เสร็จสิ้นการพิสูจน์ เครื่องพิสูจน์จะให้เครื่องตรวจสอบข้อมูลของสาธารณะของการพิสูจน์ (เช่น ค่า a และ c) รวมถึงการพิสูจน์ที่ไม่เปิดเผย

เมื่อได้รับพิสูจน์แล้ว ผู้ตรวจสอบสามารถโดยการตรวจสอบพิสูจน์ศูนย์ความรู้ จะถูกชักใจว่าผู้พิสูจน์ได้ใช้ข้อมูลลับ b ที่ทำให้สูตรด้านบนเป็นจริงเมื่อ a = 3 และ c = 16 (นั่นคือค่าข้อมูลนำเข้าสาธารณะ) และไม่สามารถรับข้อมูลใด ๆ ที่เกินข้อมูลนำเข้าสาธารณะ (a = 3, c = 16)

ส่วนถัดไปของบทความจะแนะนํากระบวนการพิสูจน์เฉพาะ เมื่อเราต้องการพิสูจน์การคํานวณโดยใช้วิธีการพิสูจน์ความรู้เป็นศูนย์ก่อนอื่นเราต้องแสดงการคํานวณในรูปแบบของวงจรเลขคณิตที่อัลกอริทึมการพิสูจน์ความรู้เป็นศูนย์สามารถยอมรับได้ วงจรเลขคณิตเป็นตัวแทนการคํานวณที่สมบูรณ์ของทัวริง ตามชื่อที่แสดงถึงวงจรเลขคณิตเป็นวงจรการคํานวณที่ประกอบด้วยประตูที่ดําเนินการทางคณิตศาสตร์ ในตัวอย่างของเราผลการแปลงจะแสดงในรูป คุณอาจสังเกตเห็นว่านอกเหนือจากอินพุตสาธารณะ a และ c และอินพุตลับ b ที่เรากล่าวถึงแล้วยังมีค่าเพิ่มเติมอีกสองค่าคือ d และ เหล่านี้เป็นตัวแปรกลางที่ใช้ในกระบวนการคํานวณ

เราสามารถพิจารณาถึงสายแต่ละสายในวงจรเชิงคณิตศาสตร์ว่าเป็นค่าซึ่งอาจเป็นข้อมูลนำเข้าสาธารณะ ข้อมูลนำเข้าลับ หรือตัวแปรกลาง หลังจากขยายการคำนวณในวงจรเชิงคณิตศาสตร์แล้ว แต่ละตัวแปรกลางจะมีที่ของตนและถูกใช้ในกระบวนการพิสูจน์ ความแตกต่างเพียงอย่างเดียวระหว่างพวกเขาและข้อมูลนำเข้าคือ ค่าของพวกเขาไม่ได้ป้อนโดยผู้พิสูจน์โดยตรงแต่ถูกกำหนดโดยค่าข้อมูลนำเข้าอื่นในวงจรเชิงคณิตศาสตร์

เราสามารถเห็นวงจรคณิตศาสตร์เป็นสองส่วน: ส่วนหนึ่งคือค่าตัวเลขทั้งหมดที่ปรากฏในวงจร และส่วนอื่นคือความสัมพันธ์ (ข้อจำกัด) ระหว่างค่าเหล่านี้ เรา通常 อ้างถึงอินพุทสาธารณะในวงจรเป็นคำโฆษณา (ในตัวอย่างของเรา และ ซี), และค่าอื่น ๆ ทั้ง ๆ ที่เป็นค่าลับ (บี) และตัวแปรกลาง (ดีและอี), เราเรียกว่าพยาน

ตามตรรกะของวงจรเมื่อเรามีข้อมูลสาธารณะเป็นคำแถลงและข้อมูลลับเป็นพยานเราสามารถคำนวณค่าพยานทั้งหมดในวงจรได้

ดังนั้นวงจรประตูของวงจรคำนวณยังสามารถแสดงได้ในรูปแบบต่อไปนี้:

คำแถลง:

a,c

พยาน:

b,d,e

ข้อจำกัด:

d = a * a

e = b + 5

c = d + e

หลังจากวงจรที่ต้องการพิสูจน์ถูกแปลงเป็นตัวเลขแล้ว อัลกอริทึมพิสูจน์ที่ไม่ระบุความรู้จำจำเป็นต้องประมวลข้อมูลข้อจำกัดของวงจรและแปลงให้เป็นรูปแบบที่อัลกอริทึมต้องการสำหรับการสร้างและตรวจสอบพิสูจน์ หลังจากประมวลผลแล้ว วงจรจะสร้าง VK (Verification Key) ความยาวคงที่ที่ไม่เกี่ยวข้องกับขนาดของวงจร ผู้ตรวจสามารถตรวจสอบพิสูจน์ที่ไม่ระบุความรู้ของวงจรที่สอดคล้องกันผ่านคีย์การตรวจสอบ คีย์การตรวจสอบคล้ายกับการสัญญาว่าจะปฏิบัติตามวงจร หากมีการเปลี่ยนแปลงใด ๆ เกิดขึ้นกับข้อจำกัด คีย์การตรวจสอบที่สอดคล้องกันจะเปลี่ยนไปด้วย

ในการใช้งานจริงผู้ใช้ของพิสูจน์ทศนิยมศูนย์ต้องเขียนลอจิกที่ต้องการเข้าไปในรหัสต้นทาง zk circuit และสร้าง VK ที่สอดคล้องกันผ่านการตรวจสอบ VK นี้จะถูกส่งให้กับผู้ตรวจ ข้อมูลนำเข้าสาธารณะที่ได้รับการพิสูจน์โดยผู้พิสูจน์พร้อมกับการพิสูจน์ที่สร้างขึ้น ถูกส่งไปและผู้ตรวจสามารถตรวจสอบว่าข้อมูลนำเข้าสาธารณะเหล่านี้ตรงตามข้อจำกัดหรือไม่ ในตัวอย่างนี้ ผู้พิสูจน์สามารถสร้างการพิสูจน์ด้วยค่าของ a, b, และ c ผู้ตรวจสามารถตรวจสอบว่า a2 + b เท่ากับ C โดยไม่ต้องทำปฏิบัติการนี้

ข้อจำกัดของวงจรพิสูจน์ทฤษฎีที่ไม่มีความรู้

แม้วงวัน zk จะเป็น Turing-complete และสามารถแทนที่คำนวณใด ๆ ได้ แต่เนื่องจากต้องแปลงการคำนวณเป็นรูปแบบการเขียนวงจรคณิตศาสตร์ที่เป็นรูปแบบพิเศษ จึงมีข้อ จำกัด บางประการในการเขียนวงจรคณิตศาสตร์

ในโปรแกรมคอมพิวเตอร์ที่เราคุ้นเคยกันมากขึ้น เราสามารถควบคุมสาขาของการดำเนินการของโปรแกรมด้วยคำสั่ง if-else สาขาที่เลือกในโปรแกรมจะถูกดำเนินการเท่านั้น อย่างไรก็ตาม ในกระบวนการพิสูจน์ที่ไม่มีความรู้ศัพท์ศาสตร์ศูนย์ การคำนวณถูกทำให้เป็นวงจร และไม่มีแนวคิดของเส้นทางการดำเนินการหรือการไหลควบคุม ดังนั้น เราไม่สามารถเลือกสาขาที่เฉพาะเจาะจงในวงจรทางคณิตศาสตร์เพื่อดำเนินการได้

แน่นอนว่าสิ่งนี้ไม่ได้หมายความว่าเราไม่สามารถใช้สาขาและการเลือกในวงจรได้ มันแค่หมายความว่าในวงจร สาขาทั้งหมดไม่ว่าจะถูกเลือกหรือไม่ จะถูกดำเนินการและมีส่วนร่วมในการผลิตพิสูจน์ เลือกสาขามีผลต่อว่าผลการทำงานของสาขาใดจะถูกส่งออกไปยังตัวแปรถัดไป

เรียกตัวอย่างการดำเนินการต่อไปนี้เป็นตัวอย่าง

if (flag) {

c = x + x

} else {

c = x * x

}

เมื่อการดำเนินการนี้ถูกแปลงเป็นวงจรเชิงคณิตศาสตร์ จะถูกแปลงเป็นเงื่อนไขที่แสดงด้านล่าง โดยเป็นชัดเจนว่า จะมีพยานใหม่ 2 คน คือ temp1 และ temp2 ถูกเพิ่มเข้าไปในวงจร นอกจากนี้ ค่าของ x+x และค่าของ x*x จะถูกคำนวณทั้ง 2 อย่าง

นั่นคือในวงจร zk ทุกสาขาและตรรกะจะถูกควดคิด ไม่ว่าจะมีการดำเนินการหรือไม่

temp1 = k + k

temp2 = x * x

c = ธง temp1 + (1-flag) temp2

เนื่องจากข้อจำกัดเหล่านี้ การสนับสนุนการเลือกเงื่อนไขในวงจรพิสูจน์ที่ไม่ระบุข้อมูลเป็นเรื่องยากมาก วิธีการพิสูจน์เส้นทางการดำเนินการของตรรกะสมาร์ทคอนแทรคที่มีการแปลงร่างต่าง ๆ ในพิสูจน์ที่ไม่ระบุข้อมูลเป็นหนึ่งในความท้าทายหลักของเครื่องจำลอง zk

การพิสูจน์การดำเนินโปรแกรมใด ๆ — การพิสูจน์เครื่องมือสถานะสากลในวงจร


Image source

เราอธิบาย VM ผ่านแบบจำลองของเครื่องกลสถานะสากล VM เป็นเครื่องกลสถานะที่เปลี่ยนสถานะเมื่อคำสั่งถูกประมวลผล เรามาแสดงตัวอย่างว่าเครื่องจำลองเสมือนกับเครื่องกลสถานะที่ถูกพิสูจน์โดยวงจรที่ไม่รู้เหตุสถานะเริ่มต้นอย่างง่าย

เราสมมติว่าเครื่องจักรสถานะสากลนี้มีทั้งทั่วไป (A และ B) และเพิ่มเติมยังมีที่เก็บค่าของคำสั่งปัจจุบัน

สถานะของทะเบียนก่อนที่จะดำเนินการคำสั่ง

รูปด้านล่างแสดงกระบวนการทำงานพื้นฐานของวงจรการพิสูจน์เครื่องจำลอย ZK:

สถานะ 0 สามารถถือว่าเป็นสถานะเริ่มต้นของเครื่องจำลองเสมือนนี้ก่อนการทำงาน สถานะเริ่มต้นหลังจากทั้งหมด m คำสั่ง ถึงสถานะสุดท้าย m นอกจากสถานะเริ่มต้น เครื่องจำลองเสมือนนี้ยังมีตารางข้อมูลนำเข้าปกติสองอัน

  • ตารางไบต์โค้ด: เก็บโปรแกรมที่ทำการดำเนินการในเครื่องจักรสถานะ
  • ตาราง I/O: เก็บข้อมูลทุกประการของข้อมูลที่สร้างขึ้นระหว่างการดำเนินการของเครื่องจำลอง

ในรูปภาพกระบวนการดำเนินการของคำสั่งที่ n เป็นการสรุปและแสดงบนด้านซ้าย สถานะของเครื่องจักรสถานะ State n ไปสู่ State n+1 หลังจากการดำเนินการของคำสั่งที่ n วงจรเดียวกันหลังจากการทำซ้ำ m ครั้ง บรรลุการดำเนินการของคำสั่ง m ใน vm

มีปัญหาสองอย่างที่นี่

หนึ่งคือวิธีการปฏิบัติคำสั่งต่าง ๆ ในวงจรที่กำหนดไว้? เมื่อปฏิบัติ bytecode ของสัญญา ไม่สามารถกำหนดได้ว่าคำสั่งที่ถูกปฏิบัติคือคำสั่งลำดับที่ n ดังนั้นโลจิกวงจรจริงที่นี่ไม่สามารถกำหนดได้

วิธีที่สองคือการพิสูจน์ว่าจำนวนของคำสั่งที่จะทำไม่ใช่ m หรือไม่

สำหรับคำถามแรก คำตอบคือ การนำเสนอตรรกะสำหรับคำสั่งทั้งหมดในวงจร จากนั้นใช้ตัวเลือก โดยขึ้นอยู่กับคำสั่ง เพื่อเลือกหนึ่งในนั้นเป็นสถานะถัดไป เช่นเดียวกับ if-else ในวงจรเฉพาะที่กล่าวถึงก่อนหน้านี้

สำหรับคำถามที่สองเราไม่สามารถเปลี่ยนจำนวนคำสั่งในวงจรโดยตรงได้ นั่นเป็นเพราะทุกคำสั่งในวงจรต้องการเซ็กเมนต์วงจรอิสระเพื่อดำเนินการ หากจำนวนคำสั่งเพิ่มขึ้นหรือลดลงวงจรก็จะเปลี่ยนและคีย์การตรวจสอบที่สอดคล้องก็จะเปลี่ยนไปด้วย ซึ่งทำให้เป็นไปไม่ได้ที่จะตรวจสอบตรรกะใด ๆ ในวงจรที่คงที่

เพื่อแก้ปัญหานี้ สามารถเพิ่มคำสั่ง noop ซึ่งจะไม่เปลี่ยนสถานะไปยังชุดคำสั่งได้ ดังนั้นจะมีขีดจำกัดสูงสุดของจำนวนคำสั่งที่วงจรคงที่แต่ละวงจรสามารถดำเนินการได้ วงจร zkVM สามารถมองเห็นได้เป็นตัวเก็บที่มีช่องสำหรับใส่คำสั่งจำนวนคงที่ หากต้องการคำสั่งมากขึ้นจะต้องใช้วงจรขนาดใหญ่ขึ้น ในการพิสูจน์จริง สามารถเลือกวงจรขนาดที่เหมาะสมตามความต้องการ

การพิสูจน์คำสั่งพื้นฐาน

นี่คือคำสั่งการคำนวณพื้นฐานบางอย่างเป็นตัวอย่างของวิธีการพิสูจน์คำสั่งพื้นฐานในวงจร

ต้นฉบับของภาพ

ภาพแสดงแผนภูมิของวงจรการพิสูจน์คำสั่ง สูตรด้านล่างคือข้อจำกัดของวงจรสำหรับการพิสูจน์

เงื่อนไขสองข้อนี้สามารถพิสูจน์คำสั่งพื้นฐานหลายคำสำหรับทะเบียนใช้ทั่วไป A และ B ที่ระบุไว้ทางมุมขวาบน พิสูจน์เหล่านี้สามารถโหลดค่าจากตารางอินพุตหรือค่าทันทีจากคำสั่งเข้าไว้ในทะเบียนหรือบวกค่าในทะเบียน A และ B และเขียนค่ากลับไปยังทะเบียน

จากรูปแบบนี้ เราสามารถเห็นได้ว่าเพื่อสร้างข้อจำกัดสำหรับการเปลี่ยนแปลงสถานะ วงจรจะนำเข้าสถานะควบคุมช่วยเพิ่มขึ้นบ้าง

ตรรกะการคำนวณระหว่างทะเบียนรองและทะเบียนใช้ทั่วไปนี้ถูกนำมาใช้โดยสูตรด้านล่าง ผู้อ่านท่านที่สนใจสามารถแทนค่าที่สอดคล้องกับสูตรข้อจำกัดเพื่อทดสอบ สามารถเห็นได้ว่าด้วยข้อจำกัดสองข้อนี้ คำสั่งบวกเลขอย่างพื้นฐานสามารถนำมาใช้ได้ หากต้องการการดำเนินการเพิ่มเติมจะต้องเพิ่มข้อจำกัดของคำสั่งเพิ่มเติม

เมื่อกลับมาสู่แผนภาพกระบวนการพื้นฐาน เราสามารถมองวงจรคำนวณในส่วนนี้ว่าเป็นคำสั่งในกระบวนการโดยรวม ตัวเลือกจะเลือกว่าผลลัพธ์ที่มันสร้างขึ้นมาจะเป็นสถานะถัดไปที่จะนำไปใช้โดยเครื่องจักรสถานะ สถานะรองที่จำเป็นต้องใช้โดยวงจรในส่วนนี้จะถูกสร้างขึ้นโดยคำสั่งที่ชี้ไปโดยทะเบียน PC

การดึงคำสั่งถูกนำมาใช้งานโดยวงจรการค้นหาที่เชี่ยวชาญ ซึ่งสามารถพิสูจน์การดึงข้อมูลจากตารางคงที่ผ่านดัชนี ดังนั้นวงจร zkVM สามารถพิสูจน์การเปลี่ยนสถานะที่ดำเนินการโดยเครื่องจำลองเสมือนที่ระบุโดย PC

การพิสูจน์คำวินิจฉัยแบบเงื่อนไขและการกระโดดไปที่การควบคุมการไหล

ความสามารถของเครื่องจักรรัษฎากรในการดำเนินการตรรกะที่ซับซ้อนขึ้นอยู่ที่คำสั่งเงื่อนไขและคำสั่งกระโดด ในสัญญาจริงๆ เราต้องการจัดการกับตรรกะที่เปลี่ยนแปลงเส้นทางการดำเนินการขึ้นอย่างตามเงื่อนไข ดังนั้นวงจรเช่นนี้จึงจำเป็น

ควรทราบว่าวงจร zkVM ไม่ใช่โมดูลที่ดำเนินการตรรกะสัญญาและคำนวณผลลัพธ์จริง วงจร zkVM จะพิสูจน์กระบวนการคำนวณของตรรกะสัญญาจริง ดังนั้น เมื่อทำการพิสูจน์ จำเป็นต้องเติมกระบวนการลำดับคำสั่งที่ดำเนินการจริงในวงจร ตรวจสอบผ่านวงจรว่าเงื่อนไขสำหรับการกระโดดนี้ตรงตาม และจากนั้นพิสูจน์ว่าการไหลของคำสั่งที่ดำเนินการได้ทำการกระโดดที่ถูกต้อง

เราจะแนะนำการพิสูจน์การตรวจสอบเงื่อนไขครั้งแรก:

การพิจารณาว่าตัวดำเนินการในคำสั่งลำดับที่ ith เท่ากับศูนย์เป็นตัวอย่าง เราเพิ่มสถานะช่วยเหลือที่ชื่อว่า isZero สำหรับผลลัพธ์การพิจารณา หากค่าที่ถูกตัดสินคือ 0 แล้วค่าของสถานะช่วยเหลือ isZero คือ 1; หากค่าที่ถูกตัดสินเป็นค่าอื่นๆนอกเหนือจาก 0 แล้ว isZero จะเป็น 0

กระบวนการนี้ถูก จำกัด โดยสองสูตรในแผนภูมิ

ความถูกต้องของข้อจำกัดนี้เกี่ยวข้องกับคุณสมบัติทางคณิตศาสตร์ของเส้นโค้งที่ใช้ในการพิสูจน์ที่ไม่เป็นศูนย์ ทุกค่าในวงจรพิสูจน์ที่ไม่เป็นศูนย์เป็นสมาชิกในเขตจำกัดบนเส้นโค้งที่เป็นวงกลม หากค่าของมันไม่ใช่ 0 จะต้องมีองค์ประกอบที่เป็นค่าตรงข้ามซึ่งเมื่อคูณกับตัวเองจะได้ผลลัพธ์เป็น 1 โดยใช้คุณสมบัตินี้ พร้อมกับข้อจำกัดสองข้อในแผนภาพ สามารถทำการตรวจสอบว่าค่าเป็นศูนย์และแปลงมันเป็นสถานะช่วยได้

เมื่อเรามีสถานะช่วยเสริม isZero condition นี้ เราสามารถดำเนินการต่อไปไปยังการพิสูจน์ของคำสั่งการกระโดดขึ้นตรวจสอบ:

กลับสู่แผนภูมิกระบวนการพื้นฐาน หากคำสั่งปัจจุบันเป็นคำสั่งกระโดดเงื่อนไข จะมีการทำ isZero check ก่อนที่จะกำหนดว่าเงื่อนไขการกระโดดได้รับการตอบสนองหรือไม่ แล้วจึงปรับค่าของ PC หลังจากที่ปรับค่าของ PC เสร็จ การดำเนินการของคำสั่งถัดไปจะเริ่มต้นด้วยการค้นหาโดยใช้ PC เพื่อหาคำสั่งหลังจากการกระโดด

I/O และ การดำเนินงานที่ซับซ้อน

เมื่อใช้วงจรพิสูจน์สถานะเครื่องจักรทั่วไป ในการจัดการการเปลี่ยนสถานะอย่างถูกต้องจำเป็นต้องเพิ่มสถานะควบคุมและเงื่อนไขที่สอดคล้องกับแต่ละคำสั่งที่รองรับในการเปลี่ยนสถานะเดียว จำนวนของค่าสถานะเหล่านี้และข้อจำกัดต้องเพิ่มเติมด้วยจำนวนของคำสั่งที่รองรับโดย zkVM แม้แต่ถ้าไม่มีการดำเนินการใด ๆ ในโปรแกรมที่ดำเนินการจริงโดย zkVM (ทั้งหมด NOPs) ค่าสถานะเหล่านี้และการตรวจสอบข้อจำกัดไม่สามารถถูกข้ามไปได้

ดังนั้นการใช้วงจรเครื่องจักรสถานะทั่วไปในครึ่งแรกของบทความนี้ในการดำเนินการคำนวณที่ซับซ้อนมีประสิทธิภาพที่ต่ำมาก หากใช้วิธีเหล่านี้ในการดำเนินการคำนวณที่ซับซ้อน ประสิทธิภาพของมันมีความยากลำบาก นอกจากนี้ มันยากสำหรับวงจรเครื่องจักรสถานะทั่วไปที่จะดำเนินการคำสั่งที่ซับซ้อนหรือปฏิสัมพันธ์โดยตรงกับโลกภายนอก

เพื่อแก้ปัญหานี้ การปฏิบัติจริงของ zkVMs 通常ใช้การผสานของวงจรเครื่อง til ทั่วไปและวงจรพิสูจน์ที่เฉพาะเจาะจงเพื่อพิสูจน์ส่วนของโปรแกรมแยกออกจากกันแล้วรวมพิสูจน์เหล่านั้นเข้าด้วยกันเป็นหนึ่งตัวแก้ปัญหา

Image cource: 1 2

แผนภาพด้านซ้ายคือสถาปัตยกรรมวงจรของโครงการ Scroll และแผนภาพในมุมขวาล่างคือสถาปัตยกรรมวงจรของ Polygon ทั้งสองใช้วิธีการที่คล้ายกันเช่นที่แสดงในแผนภาพในมุมบน

เครื่องประกอบขั้นตอนทั่วไปรับผิดชอบในการพิสูจน์ควบคุมตรรกะการดำเนินการของโปรแกรม ในส่วนใหญ่ของสัญญา การดำเนินการจริงของส่วนนี้ของตรรกะมีขนาดเล็กมาก ดังนั้นการพิสูจน์ด้วยเครื่องประกอบขั้นตอนทั่วไปที่ไม่มีประสิทธิภาพยังยอมรับได้ในด้านประสิทธิภาพ

การคำนวณที่ซับซ้อนและคงที่มากขึ้น เช่น การหา hash, การดำเนินการกับต้นไม้ MPT, ข้อมูลนำเข้าภายนอก ฯลฯ ได้รับการพิสูจน์โดยวงจรเฉพาะ

สถานะเครื่องจักรทั่วไปและวงจรพิสูจน์ทีละเฉพาะจะกระทำการสื่อสารกันโดยใช้ตารางค้นหา ทุกครั้งที่วงจรของเครื่องจักรเรียกใช้การดำเนินการเหล่านี้ โมดูลที่สร้างพยานสำหรับพิสูจน์จะเขียนพารามิเตอร์การเรียกและผลลัพธ์การคำนวณในตารางค้นหา ดังนั้นการเรียกใช้การดำเนินการเหล่านี้ในวงจรของเครื่องจักรจะถูกทำให้เป็นการดำเนินการค้นหา

ความถูกต้องของการเรียกและค่าที่ส่งกลับในตารางการค้นหาถูก จำกัดและพิสูจน์โดยวงจรที่เฉพาะเจาะจง

สุดท้าย ข้อจำกัดในการคัดลอกในวงจรเชื่อมต่อวงจรเครื่องสถานะ วงจรที่เฉพาะเจาะจง และตารางค้นหา โดยตรวจสอบว่าแต่ละรายการในตารางค้นหาได้รับการพิสูจน์โดยวงจรที่เฉพาะเจาะจงที่เกี่ยวข้อง และในที่สุดสร้างพิสูจน์สำหรับบล็อกที่สมบูรณ์

สัญญา L1 ต้องการเพียงการตรวจสอบพิสูจน์รวมนี้เท่านั้นเพื่อยืนยันความถูกต้องของกระบวนการปฏิบัติการของเครื่องจำลองเสมือนทั้งหมด

สรุป

เทคโนโลยีพิสูจน์ทศนิยมศูนย์ที่ทำให้เป็นไปได้ที่จะพิสูจน์การคำนวณได้ง่ายและเร็ว และเปิดทางให้การจัดทำกระบวนการคำนวณไปยังสิ่งแวดล้อมที่ไม่เชื่อถือได้ เมื่อใช้เทคโนโลยีนี้ในบล็อกเชน จะทำให้การดำเนินการออกจากโซ่ ทำให้บล็อกเชนหลักสามารถโฟกัสไปที่การกระจายและปัญหาด้านความปลอดภัย แต่ลักษณะของวงจรพิสูจน์ทศนิยมศูนย์ที่เชี่ยวชาญในการดำเนินการโลจิกที่คงที่ จำกัดศักยภาพของพิสูจน์ทศนิยมศูนย์บนบล็อกเชน จำกัดความสามารถของ zkRollup เริ่มต้นในระดับของรายการที่เป็นพิเศษ

อย่างไรก็ตาม ด้วยการพัฒนาและการเจริญเติบโตของเครื่องจำลองเสมือน zk รองรับการดำเนินการที่สมบูรณ์แบบที่ลำดับเอาท์ของสมาร์ทคอนแทรคต่าง ๆ กลายเป็นเรื่องที่เป็นไปได้ ศักยภาพของ zkRollup จะถูกปลดปล่อยอย่างแท้จริง และสามารถให้การเข้าใจวิสันที่ของมันในการแตก trilemma บล็อกเชน

คำปฏิเสธ:

  1. บทความนี้พิมพ์ซ้ําจาก [ZAN], ลิขสิทธิ์ทั้งหมดเป็นของผู้เขียนต้นฉบับ [ZAN และ AntChain เปิด Open Labs]. หากมีข้อโต้แย้งใด ๆ เกี่ยวกับการพิมพ์ซ้ำนี้ กรุณาติดต่อGate เรียนทีม และพวกเขาจะดำเนินการด้วยรวดเร็ว
  2. คำประกาศความรับผิด: มุมมองและความคิดเห็นที่แสดงในบทความนี้เป็นเพียงของผู้เขียนเท่านั้น และไม่เป็นการให้คำแนะนำทางด้านการลงทุนใดๆ
  3. การแปลบทความเป็นภาษาอื่น ๆ เป็นงานของทีม Gate Learn ห้ามคัดลอก แจกจ่าย หรือลอกเลียนบทความที่ถูกแปล นอกเสียจากจะได้รับอนุญาต

หลักการและโครงสร้างของ zkRollup

ขั้นสูง5/7/2024, 1:51:10 AM
ด้วยการพัฒนาและการเจริญเติบโตของเครื่องจำลองเสมือน zk การรองรับการดำเนินการที่สามารถทำงานเหมือน Turing ของสัญญาอัจฉริยะอย่างไม่จำกัดได้เป็นไปได้ ศักยภาพของ zkRollup จะถูกปลดล็อคอย่างแท้จริง การที่จะเข้าใจวิสัยทัศน์ของการแตกกระจายบล็อกเชน

ภาพรวมของ Rollup

Rollup เป็นหมวดหมู่ของโซลูชันการขยายของ Layer 2 บนบล็อกเชน ในโครงการ Rollup ผู้ดำเนินการเป็นผู้ทำงานของแพลตฟอร์ม Layer 2 ที่เป็นอิสระอย่างสมบูรณ์ภายใต้เชนหลักที่ขยายออกไป (เช่น Layer 1) ผู้ใช้สามารถดำเนินการสัญญาหรือโอนโทเคนบนแพลตฟอร์ม Layer 2

ความปลอดภัยของแพลตฟอร์ม Layer 2 รับประกันโดยบล็อกเชนเลเยอร์ 1 ที่อาศัย เมื่อบล็อกใหม่ถูกสร้างขึ้นในเลเยอร์ 2 ข้อมูลธุรกรรมจากบล็อกเลเยอร์ 2 รวมถึงรากสถานะหลังการทําธุรกรรมของเลเยอร์ 2 จะถูกรวมเป็นธุรกรรม Rollup และเผยแพร่บนห่วงโซ่เลเยอร์ 1 การดําเนินการธุรกรรมจริงและการเปลี่ยนแปลงสถานะจะได้รับการประมวลผลบนแพลตฟอร์มเลเยอร์ 2 ด้านล่างห่วงโซ่หลัก และเลเยอร์ 1 จําเป็นต้องตรวจสอบความถูกต้องของการเปลี่ยนสถานะของเลเยอร์ 2 เท่านั้น เนื่องจากค่าใช้จ่ายในการตรวจสอบความถูกต้องของการเปลี่ยนสถานะต่ํากว่าการดําเนินการธุรกรรมเหล่านี้ในเลเยอร์ 1 เลเยอร์ 2 จึงสามารถบรรลุการขยายตัวของแพลตฟอร์มเลเยอร์ 1 แพลตฟอร์มเลเยอร์ 2 สามารถให้ปริมาณธุรกรรมที่สูงขึ้นและต้นทุนการทําธุรกรรมที่ต่ํากว่าเมื่อเทียบกับเลเยอร์ 1 ในขณะที่ยังคงความปลอดภัยที่เท่าเทียมกัน

เมื่อเปรียบเทียบกับระบบธุรกรรมแบบออฟเชนท์อื่น ๆ Rollups มีลักษณะสองอย่าง:

  • ความพร้อมใช้งานของข้อมูลรัฐสำหรับเลเยอร์ที่สองได้รับการแก้ไขโดยการเก็บข้อมูลในเครือข่ายหลัก เพลตฟอร์มเลเยอร์ที่สองบันทึกข้อมูลการทำธุรกรรมทั้งหมดหรือการเปลี่ยนแปลงสถานะเลเยอร์ที่สองในบล็อกบนเครือข่ายหลัก หากสถานะเลเลอร์ที่สองหายไป ใครก็สามารถกู้คืนสถานะที่หายไปจากข้อมูลที่เก็บไว้บนเครือข่ายหลัก
  • ในโครงการ Rollup รากสถานะชั้น 2 เปลี่ยนแพคและเก็บไว้บนโซ่หลักจำเป็นต้องได้รับการตรวจสอบในทางใดทางหนึ่งบนโซ่หลักหลังจากการตรวจสอบสถานะของชั้น 2 จะถูกล็อคบนโซ่หลักชั้น 1 ดังนั้นภายใต้เงื่อนไขของโครงการตรวจสอบที่ปลอดภัยชั้น 2 สามารถเพลิดเพลินกับระดับความปลอดภัยเดียวกับชั้น 1

ตามวิธีการตรวจสอบของการอัปเดตสถานะเลเยอร์ 2 โดยห่วงโซ่หลักปัจจุบันมีโซลูชันเทคโนโลยี Rollup สองประเภทหลัก หนึ่งคือ Optimistic Rollup ในโครงการประเภทนี้สัญญาโซ่หลักไม่ได้ตรวจสอบสถานะใหม่ที่ส่งโดยเลเยอร์ 2 โดยตรง แต่จะมีการเตรียมช่วงเวลาท้าทายสําหรับแต่ละรัฐใหม่ที่ส่งมา เนื่องจาก Rollup ส่งข้อมูลธุรกรรมทั้งหมดไปยังห่วงโซ่หลักและทําให้เป็นสาธารณะทุกคนสามารถตรวจสอบการอัปเดตสถานะได้ (โดยเฉพาะอย่างยิ่งเมื่อการอัปเดตเกี่ยวข้องกับกระเป๋าเงินของตนเอง) หากสถานะใหม่ไม่ถูกต้องผู้ตรวจสอบสามารถสร้างหลักฐานการทุจริตต่อรัฐที่ผิดพลาดนั้นและส่งภายในระยะเวลาท้าทายจึงทําให้การอัปเดตสถานะที่ไม่ถูกต้องเป็นโมฆะ

โซลูชัน Rollup อีกประเภทหนึ่งคือ zk Rollup ในรูปแบบประเภทนี้หลังจากดําเนินการอัปเดตสถานะเลเยอร์ 2 ผู้ดําเนินการเลเยอร์ 2 จะต้องแสดงหลักฐานที่ไม่มีความรู้เกี่ยวกับความถูกต้องของการอัปเดตสถานะและส่งไปยังห่วงโซ่หลักพร้อมกับการอัปเดตสถานะ สัญญาในห่วงโซ่หลักจะตรวจสอบหลักฐานเพื่อตรวจสอบความถูกต้องของการปรับปรุงสถานะ

เมื่อเทียบกับโครงการ Optimistic Rollup แล้ว zk Rollup ไม่จําเป็นต้องมีระยะเวลาท้าทายที่ยาวนานเพื่อยืนยันธุรกรรมเลเยอร์ 2 ในที่สุดและสามารถยืนยันได้เร็วขึ้น นอกจากนี้ zk Rollup ไม่ได้อาศัยสมมติฐานว่าจะมีผู้ตรวจสอบที่ซื่อสัตย์ในเครือข่ายที่จะส่งหลักฐานการทุจริตในเวลาที่เหมาะสมเมื่อเกิดการฉ้อโกง อย่างไรก็ตามในเวลาเดียวกัน zk Rollup ยังเผชิญกับปัญหาต่างๆเช่นต้นทุนการคํานวณที่สูงของเทคโนโลยีการพิสูจน์ความรู้ความซับซ้อนและความยากลําบากในการพัฒนาซึ่งเป็นอุปสรรคต่อการนําเทคโนโลยี zk Rollup ไปใช้ใน Rollups ด้วยการพัฒนาเทคโนโลยีการพิสูจน์ความรู้เป็นศูนย์ในช่วงสองปีที่ผ่านมาอุปสรรคเหล่านี้ค่อยๆถูกเอาชนะ เทคโนโลยี zk Rollup เริ่มครองส่วนแบ่งตลาด Layer 2 มากขึ้นเรื่อย ๆ

ตามที่แสดงในรูปด้านล่าง ในส่วนขยายมิติชั้นที่ 2 ของ Rollup zkRollup ได้เข้าครองพื้นที่มากกว่าครึ่งหนึ่งแล้ว และกำลังพัฒนาอย่างรวดเร็ว

Image source

ข้อมูลถูกดึงขึ้นมาเมื่อ: 18 มกราคม 2024

จาก zkRollup ที่เชี่ยวชาญไปสู่ zkRollup ทั่วไป

ในช่วงการพัฒนา zkRollup ได้ผ่านมาสองขั้นตอนหลักๆ คือประเภทแรกคือ non-general zkRollup ในขณะที่ประเภทที่สองคือ general zkRollup ที่สามารถดำเนินการสัญญาอย่างสมบูรณ์แบบที่สามารถทำซ้ำได้

ความแตกต่างระหว่างเทคโนโลยี zkRollup ของสองประเภทนี้ อยู่ที่ไล่ที่สำคัญในว่าแพลตฟอร์มเลเยอร์ 2 มีการดำเนินการด้วยโลจิกที่ถูกจำกัดที่เขียนโดยผู้ให้บริการแพลตฟอร์มหรือโลจิกสมาร์ทคอนแทรคอิที่ถูกเขียนโดยผู้ใช้ในธุรกรรม

ในโครงการ zkRollup ที่ไม่ใช่โครงการทั่วไป (เช่น zkSync Lite ซึ่งอยู่ในอันดับที่ 8 ในรูปข้างต้น) ผู้ใช้สามารถทำเฉพาะประเภทของการดำเนินการทางธุรกรรมเพียงเล็กน้อย เช่น การโอน FT (ตัวแทนที่สามารถแลกเปลี่ยนได้) การชำระเงิน การสวิทช์ และการโอน NFT (ตัวแทนที่ไม่สามารถแลกเปลี่ยนได้) เพียงผู้ถือโครงการเท่านั้นที่สามารถกำหนดและดำเนินการตรรกะการทำธุรกรรมสำหรับการดำเนินการเหล่านี้

ผ่านโครงการ zkRollup เช่นนี้ เราสามารถโอนเงินด้วยค่าธรรมเนียมที่ต่ำมากเมื่อเปรียบเทียบกับ Ethereum mainnet และได้รับประสิทธิภาพของการทำธุรกรรมที่สูงกว่า อย่างไรก็ตาม หากเราต้องการลองทดลองสัญญาที่น่าสนใจบนเชน เราจะไม่สามารถทำได้

ทำไม zkRollups ที่เชี่ยวชาญไม่สามารถอนุญาตให้ผู้ใช้ติดตั้งและใช้สมาร์ทคอนแทร็คของตนเอง? สิ่งนี้นำเรากลับสู่โครงสร้างพิสูจน์ของ zkRollup เอง

เพื่อให้แน่ใจว่าการเปลี่ยนสถานะของ L2 ถูกต้องและน่าเชื่อถือ ใน zkRollup ทุกๆ ตรรกะการเปลี่ยนสถานะของ L2 จำเป็นต้องเขียนเป็นวงจรพิสูจน์ทศนิยมเป็นศูนย์และตรวจสอบโดยสัญญา L1 เท่านั้น สถานะที่ผ่านการตรวจสอบเท่านั้นที่สามารถรับได้โดย L1 และสามารถทำ Rollup ได้เป็นที่สุด กระบวนการนี้ต้องการว่าตรรกะการดำเนินการทั้งหมดของแพลตฟอร์ม zkRollup จะต้องผ่านการตรวจสอบในวงจรพิสูจน์ทศนิยม อย่างไรก็ตาม การสนับสนุนการดำเนินการของตรรกะสัญญาอย่างไม่จำกัดในวงจรพิสูจน์ทศนิยมเป็นสิ่งท้าทาย (เหตุผลที่ยากต่อความยากลำบากนี้จะอธิบายต่อไปในข้อความ) ผลลัพธ์ที่ได้คือโปรเจกต์ zkRollup แรกๆ มักสนับสนุนเฉพาะจำนวนจำกัดของธุรกรรมที่เรียบง่ายบางอย่างเท่านั้น

การสามารถดำเนินการเพียงจำนวนจำกัดของธุรกรรมพื้นฐานเท่านั้น โดยอย่างชัดเจนไม่ตรงกับความคาดหวังของเราสำหรับ zkRollup โชคดีที่มีเทคโนโลยี zkVM (Zero-Knowledge Virtual Machine) ได้แก้ปัญหาในการพิสูจน์การดำเนินการของรหัส Turing-complete ใด ๆ ภายในวงจรพิสูจน์ซึ่งเป็นศูนย์ศูนย์ ทำให้แพลตฟอร์ม zkRollup ทั่วไปเป็นเป็นไปได้ ต่อไป บทความนี้จะแนะนำหลักการในการปฏิบัติของ zkVM เพื่อให้ผู้อ่านเข้าใจว่าส่วนสำคัญสุดท้ายของเทคโนโลยี zkRollup ทั่วไปดำเนินการอย่างไร

หลักการในการนำไปใช้ของ zkVM

ก่อนที่จะแนะนำหลักการของ zkVM เราจะให้ข้อมูลย่อเกี่ยวกับเทคโนโลยีพิสูจน์ที่ไม่เปิดเผย (zero-knowledge proof) ก่อน ที่นี่เราไม่จำเป็นต้องเข้าใจหลักการคณิตศาสตร์พื้นฐานของพิสูจน์ที่ไม่เปิดเผยอย่างละเอียด มันเพียงพอที่จะเข้าใจว่าพิสูจน์ที่ไม่เปิดเผยสามารถทำอะไรได้บ้าง วิธีการใช้งานและข้อจำกัดที่นำเข้ามาโดยวงจรพิสูจน์ที่เฉพาะเจาะจงของพวกเขา

การแนะนำเรื่องการพิสูจน์ทราบศิลปะศูนย์

การพิสูจน์ที่ไม่เปิดเผยใน zkRollup ใช้เพื่อพิสูจน์ว่าธุรกรรมของเลเยอร์ 2 ได้รับการดำเนินการอย่างถูกต้องและสถานะของเลเยอร์ 2 ได้รับการอัปเดตอย่างถูกต้อง

เพื่อบรรลุวัตถุประสงค์นี้ วงจร zkVM ต้องพิสูจน์ว่าสัญญาอัจฉริยะใดที่ถูกติดตั้งบน Layer 2 ได้รันอย่างถูกต้อง ก่อนที่จะนำเสนอหลักการของ zkVM พวกเราจำเป็นต้องพูดถึงบทบาทของพิสูจน์ความจริงแบบศูนย์และวิธีการทำงานของมันก่อน

ทำไมต้องใช้พิสูจน์ทรัพยากรที่ไม่มีข้อมูล

ศาสตร์พิสูจน์ที่ไม่ระบุตัวตนเป็นหลักการทางรหัสวิทยาที่ช่วยให้ผู้พิสูจน์สามารถโน้มน้าวผู้ตรวจสอบให้เชื่อถือถูกต้องของคำให้ไม่เปิดเผยข้อมูลเพิ่มเติมใด ๆ ให้แก่ผู้ตรวจสอบ

พิสูจน์ที่ไม่รู้อะไรซอฟต์แวร์มีคุณสมบัติหลักสามประการ

  • ความสมบูรณ์: หากคำถามที่ต้องการพิสูจน์เป็นความจริง ผู้ตรวจที่ซื่อสัตย์ (นั่นคือผู้ที่ปฏิบัติตามขั้นตอนอย่างถูกต้อง) จะถูกโน้มน้าวให้เชื่อว่าความจริงนี้โดยผู้พิสูจน์ที่ซื่อสัตย์
  • ความถูกต้อง: ถ้าคำให้การที่จะต้องพิสูจน์เป็นเท็จ ผู้ให้การที่ไม่ซื่อสัตย์จะมีโอกาสเพียงเล็กน้อยที่จะโน้มน้าวผู้ตรวจสอบที่ซื่อสัตย์ว่ามันเป็นจริง
  • ซึ่งไม่มีความรู้: นอกเหนือจากคำกล่าวถูกต้องแล้ว ผู้ตรวจสอบจะไม่สามารถได้รับข้อมูลเพิ่มเติมจากกระบวนการตรวจสอบ

ด้วยความสมบูรณ์ของพิสูจน์ทศนิยมศูนย์ เมื่อผู้พิสูจน์ทำการคำนวณที่ซับซ้อนเสร็จสิ้น พวกเขาสามารถสร้างพิสูจน์ที่ทำให้ผู้ตรวจสามารถที่จะเชื่อว่าข้อมูลเอาต์พุตที่ได้รับจากข้อมูลนำเข้าคือผลลัพธ์ที่ถูกให้โดยผู้ปฏิบัติการ ความเชื่อถือได้ของพิสูจน์ทศนิยมศูนย์ รับรองว่าเมื่อผู้ปฏิบัติการให้ผลลัพธ์ที่ผิด พวกเขาจะไม่สามารถสร้างพิสูจน์ที่ถูกต้อง

ดังนั้น ด้วยความสมบูรณ์และความแข็งแกร่งของศาสตร์ภาพรู้ศัพท์ศูนย์ เราสามารถส่งการคำนวณที่ซับซ้อนเหล่านี้ไปให้ผู้อื่นและตรวจสอบผ่านกระบวนการตรวจสอบที่เรียบง่ายในขณะเดียวกันว่าการคำนวณถูกต้อง โดยไม่จำเป็นต้องเชื่อใจในฝ่ายที่ทำการส่งการคำนวณ

นอกจากสามคุณสมบัติหลักของพิสูจน์ศูนย์ความรู้ โปรแกรม zk-SNARK ที่ใช้กันอย่างแพร่หลายยังมีลักษณะของความกระชับ ซึ่งหมายถึงสำหรับตรรกะที่ซับซ้อนใด ๆ ที่ได้รับการพิสูจน์โดยใช้พิสูจน์ศูนย์ความรู้ ขนาดของพิสูจน์ที่สร้างขึ้นและเวลาที่ใช้ในการตรวจสอบพิสูจน์ทั้งสองนี้จะมีขนาดคงที่และเล็กน้อย นี้ช่วยให้ zk-Rollup สามารถโอนการคำนวณการอัปเดตสถานะออกจากเชื่อมต่อและเชื่อมต่อเพียงการตรวจสอบความถูกต้องของการดำเนินการในเชื่อมต่อ ทำให้การแก้ปัญหาการขยายสเกลเป็นไปได้

กระบวนการของหลักศาสตร์การพิสูจน์ที่ไม่เผยข้อมูล

ต่อไป บทความนี้จะใช้การคำนวณที่เรียบง่ายด้านล่างเป็นตัวอย่าง เพื่ออธิบายกระบวนการของพิสูจน์ทศนิยมศูนย์

c=a²+b+5

เพื่ออธิบายด้านศูนย์ศูนย์ในศูนย์ศูนย์พิสูจน์ เราจะตั้งตัวแปร a และ c เป็นค่าสาธารณะของพิสูจน์ศูนย์ศูนย์นี้ โดย b เป็นข้อมูลลับที่รู้เพียงเฉพาะผู้พิสูจน์เท่านั้น จากการคำนวณของเราที่เรียบง่ายมาก ผู้ตรวจสามารถคำนวณค่าข้อมูลลับได้ง่ายจากค่าสาธารณะ สิ่งนี้ไม่ส่งผลกระทบต่อคุณสมบัติศูนย์ศูนย์ของวิธีพิสูจน์ศูนย์ศูนย์เอง เนื่องจากมันสามารถรับประกันได้เพียงว่าผู้ตรวจจะไม่สามารถได้รับข้อมูลเกี่ยวกับข้อมูลลับจากกระบวนการพิสูจน์

เมื่อพิสูจน์ ผู้พิสูจน์จะเลือกค่าสำหรับ a และ b ตามลำดับเป็นอินพุตและคำนวณค่าของ c ที่นี่เรากำหนด a = 3, b = 2, จากนั้น c = 16 หลังจากทำการคำนวณทั้งหมดเสร็จ ผู้พิสูจน์สามารถสร้างพิสูจน์ที่ไม่เปิดเผยค่าสำหรับค่าเหล่านี้และการดำเนินการ

หลังจากที่เสร็จสิ้นการพิสูจน์ เครื่องพิสูจน์จะให้เครื่องตรวจสอบข้อมูลของสาธารณะของการพิสูจน์ (เช่น ค่า a และ c) รวมถึงการพิสูจน์ที่ไม่เปิดเผย

เมื่อได้รับพิสูจน์แล้ว ผู้ตรวจสอบสามารถโดยการตรวจสอบพิสูจน์ศูนย์ความรู้ จะถูกชักใจว่าผู้พิสูจน์ได้ใช้ข้อมูลลับ b ที่ทำให้สูตรด้านบนเป็นจริงเมื่อ a = 3 และ c = 16 (นั่นคือค่าข้อมูลนำเข้าสาธารณะ) และไม่สามารถรับข้อมูลใด ๆ ที่เกินข้อมูลนำเข้าสาธารณะ (a = 3, c = 16)

ส่วนถัดไปของบทความจะแนะนํากระบวนการพิสูจน์เฉพาะ เมื่อเราต้องการพิสูจน์การคํานวณโดยใช้วิธีการพิสูจน์ความรู้เป็นศูนย์ก่อนอื่นเราต้องแสดงการคํานวณในรูปแบบของวงจรเลขคณิตที่อัลกอริทึมการพิสูจน์ความรู้เป็นศูนย์สามารถยอมรับได้ วงจรเลขคณิตเป็นตัวแทนการคํานวณที่สมบูรณ์ของทัวริง ตามชื่อที่แสดงถึงวงจรเลขคณิตเป็นวงจรการคํานวณที่ประกอบด้วยประตูที่ดําเนินการทางคณิตศาสตร์ ในตัวอย่างของเราผลการแปลงจะแสดงในรูป คุณอาจสังเกตเห็นว่านอกเหนือจากอินพุตสาธารณะ a และ c และอินพุตลับ b ที่เรากล่าวถึงแล้วยังมีค่าเพิ่มเติมอีกสองค่าคือ d และ เหล่านี้เป็นตัวแปรกลางที่ใช้ในกระบวนการคํานวณ

เราสามารถพิจารณาถึงสายแต่ละสายในวงจรเชิงคณิตศาสตร์ว่าเป็นค่าซึ่งอาจเป็นข้อมูลนำเข้าสาธารณะ ข้อมูลนำเข้าลับ หรือตัวแปรกลาง หลังจากขยายการคำนวณในวงจรเชิงคณิตศาสตร์แล้ว แต่ละตัวแปรกลางจะมีที่ของตนและถูกใช้ในกระบวนการพิสูจน์ ความแตกต่างเพียงอย่างเดียวระหว่างพวกเขาและข้อมูลนำเข้าคือ ค่าของพวกเขาไม่ได้ป้อนโดยผู้พิสูจน์โดยตรงแต่ถูกกำหนดโดยค่าข้อมูลนำเข้าอื่นในวงจรเชิงคณิตศาสตร์

เราสามารถเห็นวงจรคณิตศาสตร์เป็นสองส่วน: ส่วนหนึ่งคือค่าตัวเลขทั้งหมดที่ปรากฏในวงจร และส่วนอื่นคือความสัมพันธ์ (ข้อจำกัด) ระหว่างค่าเหล่านี้ เรา通常 อ้างถึงอินพุทสาธารณะในวงจรเป็นคำโฆษณา (ในตัวอย่างของเรา และ ซี), และค่าอื่น ๆ ทั้ง ๆ ที่เป็นค่าลับ (บี) และตัวแปรกลาง (ดีและอี), เราเรียกว่าพยาน

ตามตรรกะของวงจรเมื่อเรามีข้อมูลสาธารณะเป็นคำแถลงและข้อมูลลับเป็นพยานเราสามารถคำนวณค่าพยานทั้งหมดในวงจรได้

ดังนั้นวงจรประตูของวงจรคำนวณยังสามารถแสดงได้ในรูปแบบต่อไปนี้:

คำแถลง:

a,c

พยาน:

b,d,e

ข้อจำกัด:

d = a * a

e = b + 5

c = d + e

หลังจากวงจรที่ต้องการพิสูจน์ถูกแปลงเป็นตัวเลขแล้ว อัลกอริทึมพิสูจน์ที่ไม่ระบุความรู้จำจำเป็นต้องประมวลข้อมูลข้อจำกัดของวงจรและแปลงให้เป็นรูปแบบที่อัลกอริทึมต้องการสำหรับการสร้างและตรวจสอบพิสูจน์ หลังจากประมวลผลแล้ว วงจรจะสร้าง VK (Verification Key) ความยาวคงที่ที่ไม่เกี่ยวข้องกับขนาดของวงจร ผู้ตรวจสามารถตรวจสอบพิสูจน์ที่ไม่ระบุความรู้ของวงจรที่สอดคล้องกันผ่านคีย์การตรวจสอบ คีย์การตรวจสอบคล้ายกับการสัญญาว่าจะปฏิบัติตามวงจร หากมีการเปลี่ยนแปลงใด ๆ เกิดขึ้นกับข้อจำกัด คีย์การตรวจสอบที่สอดคล้องกันจะเปลี่ยนไปด้วย

ในการใช้งานจริงผู้ใช้ของพิสูจน์ทศนิยมศูนย์ต้องเขียนลอจิกที่ต้องการเข้าไปในรหัสต้นทาง zk circuit และสร้าง VK ที่สอดคล้องกันผ่านการตรวจสอบ VK นี้จะถูกส่งให้กับผู้ตรวจ ข้อมูลนำเข้าสาธารณะที่ได้รับการพิสูจน์โดยผู้พิสูจน์พร้อมกับการพิสูจน์ที่สร้างขึ้น ถูกส่งไปและผู้ตรวจสามารถตรวจสอบว่าข้อมูลนำเข้าสาธารณะเหล่านี้ตรงตามข้อจำกัดหรือไม่ ในตัวอย่างนี้ ผู้พิสูจน์สามารถสร้างการพิสูจน์ด้วยค่าของ a, b, และ c ผู้ตรวจสามารถตรวจสอบว่า a2 + b เท่ากับ C โดยไม่ต้องทำปฏิบัติการนี้

ข้อจำกัดของวงจรพิสูจน์ทฤษฎีที่ไม่มีความรู้

แม้วงวัน zk จะเป็น Turing-complete และสามารถแทนที่คำนวณใด ๆ ได้ แต่เนื่องจากต้องแปลงการคำนวณเป็นรูปแบบการเขียนวงจรคณิตศาสตร์ที่เป็นรูปแบบพิเศษ จึงมีข้อ จำกัด บางประการในการเขียนวงจรคณิตศาสตร์

ในโปรแกรมคอมพิวเตอร์ที่เราคุ้นเคยกันมากขึ้น เราสามารถควบคุมสาขาของการดำเนินการของโปรแกรมด้วยคำสั่ง if-else สาขาที่เลือกในโปรแกรมจะถูกดำเนินการเท่านั้น อย่างไรก็ตาม ในกระบวนการพิสูจน์ที่ไม่มีความรู้ศัพท์ศาสตร์ศูนย์ การคำนวณถูกทำให้เป็นวงจร และไม่มีแนวคิดของเส้นทางการดำเนินการหรือการไหลควบคุม ดังนั้น เราไม่สามารถเลือกสาขาที่เฉพาะเจาะจงในวงจรทางคณิตศาสตร์เพื่อดำเนินการได้

แน่นอนว่าสิ่งนี้ไม่ได้หมายความว่าเราไม่สามารถใช้สาขาและการเลือกในวงจรได้ มันแค่หมายความว่าในวงจร สาขาทั้งหมดไม่ว่าจะถูกเลือกหรือไม่ จะถูกดำเนินการและมีส่วนร่วมในการผลิตพิสูจน์ เลือกสาขามีผลต่อว่าผลการทำงานของสาขาใดจะถูกส่งออกไปยังตัวแปรถัดไป

เรียกตัวอย่างการดำเนินการต่อไปนี้เป็นตัวอย่าง

if (flag) {

c = x + x

} else {

c = x * x

}

เมื่อการดำเนินการนี้ถูกแปลงเป็นวงจรเชิงคณิตศาสตร์ จะถูกแปลงเป็นเงื่อนไขที่แสดงด้านล่าง โดยเป็นชัดเจนว่า จะมีพยานใหม่ 2 คน คือ temp1 และ temp2 ถูกเพิ่มเข้าไปในวงจร นอกจากนี้ ค่าของ x+x และค่าของ x*x จะถูกคำนวณทั้ง 2 อย่าง

นั่นคือในวงจร zk ทุกสาขาและตรรกะจะถูกควดคิด ไม่ว่าจะมีการดำเนินการหรือไม่

temp1 = k + k

temp2 = x * x

c = ธง temp1 + (1-flag) temp2

เนื่องจากข้อจำกัดเหล่านี้ การสนับสนุนการเลือกเงื่อนไขในวงจรพิสูจน์ที่ไม่ระบุข้อมูลเป็นเรื่องยากมาก วิธีการพิสูจน์เส้นทางการดำเนินการของตรรกะสมาร์ทคอนแทรคที่มีการแปลงร่างต่าง ๆ ในพิสูจน์ที่ไม่ระบุข้อมูลเป็นหนึ่งในความท้าทายหลักของเครื่องจำลอง zk

การพิสูจน์การดำเนินโปรแกรมใด ๆ — การพิสูจน์เครื่องมือสถานะสากลในวงจร


Image source

เราอธิบาย VM ผ่านแบบจำลองของเครื่องกลสถานะสากล VM เป็นเครื่องกลสถานะที่เปลี่ยนสถานะเมื่อคำสั่งถูกประมวลผล เรามาแสดงตัวอย่างว่าเครื่องจำลองเสมือนกับเครื่องกลสถานะที่ถูกพิสูจน์โดยวงจรที่ไม่รู้เหตุสถานะเริ่มต้นอย่างง่าย

เราสมมติว่าเครื่องจักรสถานะสากลนี้มีทั้งทั่วไป (A และ B) และเพิ่มเติมยังมีที่เก็บค่าของคำสั่งปัจจุบัน

สถานะของทะเบียนก่อนที่จะดำเนินการคำสั่ง

รูปด้านล่างแสดงกระบวนการทำงานพื้นฐานของวงจรการพิสูจน์เครื่องจำลอย ZK:

สถานะ 0 สามารถถือว่าเป็นสถานะเริ่มต้นของเครื่องจำลองเสมือนนี้ก่อนการทำงาน สถานะเริ่มต้นหลังจากทั้งหมด m คำสั่ง ถึงสถานะสุดท้าย m นอกจากสถานะเริ่มต้น เครื่องจำลองเสมือนนี้ยังมีตารางข้อมูลนำเข้าปกติสองอัน

  • ตารางไบต์โค้ด: เก็บโปรแกรมที่ทำการดำเนินการในเครื่องจักรสถานะ
  • ตาราง I/O: เก็บข้อมูลทุกประการของข้อมูลที่สร้างขึ้นระหว่างการดำเนินการของเครื่องจำลอง

ในรูปภาพกระบวนการดำเนินการของคำสั่งที่ n เป็นการสรุปและแสดงบนด้านซ้าย สถานะของเครื่องจักรสถานะ State n ไปสู่ State n+1 หลังจากการดำเนินการของคำสั่งที่ n วงจรเดียวกันหลังจากการทำซ้ำ m ครั้ง บรรลุการดำเนินการของคำสั่ง m ใน vm

มีปัญหาสองอย่างที่นี่

หนึ่งคือวิธีการปฏิบัติคำสั่งต่าง ๆ ในวงจรที่กำหนดไว้? เมื่อปฏิบัติ bytecode ของสัญญา ไม่สามารถกำหนดได้ว่าคำสั่งที่ถูกปฏิบัติคือคำสั่งลำดับที่ n ดังนั้นโลจิกวงจรจริงที่นี่ไม่สามารถกำหนดได้

วิธีที่สองคือการพิสูจน์ว่าจำนวนของคำสั่งที่จะทำไม่ใช่ m หรือไม่

สำหรับคำถามแรก คำตอบคือ การนำเสนอตรรกะสำหรับคำสั่งทั้งหมดในวงจร จากนั้นใช้ตัวเลือก โดยขึ้นอยู่กับคำสั่ง เพื่อเลือกหนึ่งในนั้นเป็นสถานะถัดไป เช่นเดียวกับ if-else ในวงจรเฉพาะที่กล่าวถึงก่อนหน้านี้

สำหรับคำถามที่สองเราไม่สามารถเปลี่ยนจำนวนคำสั่งในวงจรโดยตรงได้ นั่นเป็นเพราะทุกคำสั่งในวงจรต้องการเซ็กเมนต์วงจรอิสระเพื่อดำเนินการ หากจำนวนคำสั่งเพิ่มขึ้นหรือลดลงวงจรก็จะเปลี่ยนและคีย์การตรวจสอบที่สอดคล้องก็จะเปลี่ยนไปด้วย ซึ่งทำให้เป็นไปไม่ได้ที่จะตรวจสอบตรรกะใด ๆ ในวงจรที่คงที่

เพื่อแก้ปัญหานี้ สามารถเพิ่มคำสั่ง noop ซึ่งจะไม่เปลี่ยนสถานะไปยังชุดคำสั่งได้ ดังนั้นจะมีขีดจำกัดสูงสุดของจำนวนคำสั่งที่วงจรคงที่แต่ละวงจรสามารถดำเนินการได้ วงจร zkVM สามารถมองเห็นได้เป็นตัวเก็บที่มีช่องสำหรับใส่คำสั่งจำนวนคงที่ หากต้องการคำสั่งมากขึ้นจะต้องใช้วงจรขนาดใหญ่ขึ้น ในการพิสูจน์จริง สามารถเลือกวงจรขนาดที่เหมาะสมตามความต้องการ

การพิสูจน์คำสั่งพื้นฐาน

นี่คือคำสั่งการคำนวณพื้นฐานบางอย่างเป็นตัวอย่างของวิธีการพิสูจน์คำสั่งพื้นฐานในวงจร

ต้นฉบับของภาพ

ภาพแสดงแผนภูมิของวงจรการพิสูจน์คำสั่ง สูตรด้านล่างคือข้อจำกัดของวงจรสำหรับการพิสูจน์

เงื่อนไขสองข้อนี้สามารถพิสูจน์คำสั่งพื้นฐานหลายคำสำหรับทะเบียนใช้ทั่วไป A และ B ที่ระบุไว้ทางมุมขวาบน พิสูจน์เหล่านี้สามารถโหลดค่าจากตารางอินพุตหรือค่าทันทีจากคำสั่งเข้าไว้ในทะเบียนหรือบวกค่าในทะเบียน A และ B และเขียนค่ากลับไปยังทะเบียน

จากรูปแบบนี้ เราสามารถเห็นได้ว่าเพื่อสร้างข้อจำกัดสำหรับการเปลี่ยนแปลงสถานะ วงจรจะนำเข้าสถานะควบคุมช่วยเพิ่มขึ้นบ้าง

ตรรกะการคำนวณระหว่างทะเบียนรองและทะเบียนใช้ทั่วไปนี้ถูกนำมาใช้โดยสูตรด้านล่าง ผู้อ่านท่านที่สนใจสามารถแทนค่าที่สอดคล้องกับสูตรข้อจำกัดเพื่อทดสอบ สามารถเห็นได้ว่าด้วยข้อจำกัดสองข้อนี้ คำสั่งบวกเลขอย่างพื้นฐานสามารถนำมาใช้ได้ หากต้องการการดำเนินการเพิ่มเติมจะต้องเพิ่มข้อจำกัดของคำสั่งเพิ่มเติม

เมื่อกลับมาสู่แผนภาพกระบวนการพื้นฐาน เราสามารถมองวงจรคำนวณในส่วนนี้ว่าเป็นคำสั่งในกระบวนการโดยรวม ตัวเลือกจะเลือกว่าผลลัพธ์ที่มันสร้างขึ้นมาจะเป็นสถานะถัดไปที่จะนำไปใช้โดยเครื่องจักรสถานะ สถานะรองที่จำเป็นต้องใช้โดยวงจรในส่วนนี้จะถูกสร้างขึ้นโดยคำสั่งที่ชี้ไปโดยทะเบียน PC

การดึงคำสั่งถูกนำมาใช้งานโดยวงจรการค้นหาที่เชี่ยวชาญ ซึ่งสามารถพิสูจน์การดึงข้อมูลจากตารางคงที่ผ่านดัชนี ดังนั้นวงจร zkVM สามารถพิสูจน์การเปลี่ยนสถานะที่ดำเนินการโดยเครื่องจำลองเสมือนที่ระบุโดย PC

การพิสูจน์คำวินิจฉัยแบบเงื่อนไขและการกระโดดไปที่การควบคุมการไหล

ความสามารถของเครื่องจักรรัษฎากรในการดำเนินการตรรกะที่ซับซ้อนขึ้นอยู่ที่คำสั่งเงื่อนไขและคำสั่งกระโดด ในสัญญาจริงๆ เราต้องการจัดการกับตรรกะที่เปลี่ยนแปลงเส้นทางการดำเนินการขึ้นอย่างตามเงื่อนไข ดังนั้นวงจรเช่นนี้จึงจำเป็น

ควรทราบว่าวงจร zkVM ไม่ใช่โมดูลที่ดำเนินการตรรกะสัญญาและคำนวณผลลัพธ์จริง วงจร zkVM จะพิสูจน์กระบวนการคำนวณของตรรกะสัญญาจริง ดังนั้น เมื่อทำการพิสูจน์ จำเป็นต้องเติมกระบวนการลำดับคำสั่งที่ดำเนินการจริงในวงจร ตรวจสอบผ่านวงจรว่าเงื่อนไขสำหรับการกระโดดนี้ตรงตาม และจากนั้นพิสูจน์ว่าการไหลของคำสั่งที่ดำเนินการได้ทำการกระโดดที่ถูกต้อง

เราจะแนะนำการพิสูจน์การตรวจสอบเงื่อนไขครั้งแรก:

การพิจารณาว่าตัวดำเนินการในคำสั่งลำดับที่ ith เท่ากับศูนย์เป็นตัวอย่าง เราเพิ่มสถานะช่วยเหลือที่ชื่อว่า isZero สำหรับผลลัพธ์การพิจารณา หากค่าที่ถูกตัดสินคือ 0 แล้วค่าของสถานะช่วยเหลือ isZero คือ 1; หากค่าที่ถูกตัดสินเป็นค่าอื่นๆนอกเหนือจาก 0 แล้ว isZero จะเป็น 0

กระบวนการนี้ถูก จำกัด โดยสองสูตรในแผนภูมิ

ความถูกต้องของข้อจำกัดนี้เกี่ยวข้องกับคุณสมบัติทางคณิตศาสตร์ของเส้นโค้งที่ใช้ในการพิสูจน์ที่ไม่เป็นศูนย์ ทุกค่าในวงจรพิสูจน์ที่ไม่เป็นศูนย์เป็นสมาชิกในเขตจำกัดบนเส้นโค้งที่เป็นวงกลม หากค่าของมันไม่ใช่ 0 จะต้องมีองค์ประกอบที่เป็นค่าตรงข้ามซึ่งเมื่อคูณกับตัวเองจะได้ผลลัพธ์เป็น 1 โดยใช้คุณสมบัตินี้ พร้อมกับข้อจำกัดสองข้อในแผนภาพ สามารถทำการตรวจสอบว่าค่าเป็นศูนย์และแปลงมันเป็นสถานะช่วยได้

เมื่อเรามีสถานะช่วยเสริม isZero condition นี้ เราสามารถดำเนินการต่อไปไปยังการพิสูจน์ของคำสั่งการกระโดดขึ้นตรวจสอบ:

กลับสู่แผนภูมิกระบวนการพื้นฐาน หากคำสั่งปัจจุบันเป็นคำสั่งกระโดดเงื่อนไข จะมีการทำ isZero check ก่อนที่จะกำหนดว่าเงื่อนไขการกระโดดได้รับการตอบสนองหรือไม่ แล้วจึงปรับค่าของ PC หลังจากที่ปรับค่าของ PC เสร็จ การดำเนินการของคำสั่งถัดไปจะเริ่มต้นด้วยการค้นหาโดยใช้ PC เพื่อหาคำสั่งหลังจากการกระโดด

I/O และ การดำเนินงานที่ซับซ้อน

เมื่อใช้วงจรพิสูจน์สถานะเครื่องจักรทั่วไป ในการจัดการการเปลี่ยนสถานะอย่างถูกต้องจำเป็นต้องเพิ่มสถานะควบคุมและเงื่อนไขที่สอดคล้องกับแต่ละคำสั่งที่รองรับในการเปลี่ยนสถานะเดียว จำนวนของค่าสถานะเหล่านี้และข้อจำกัดต้องเพิ่มเติมด้วยจำนวนของคำสั่งที่รองรับโดย zkVM แม้แต่ถ้าไม่มีการดำเนินการใด ๆ ในโปรแกรมที่ดำเนินการจริงโดย zkVM (ทั้งหมด NOPs) ค่าสถานะเหล่านี้และการตรวจสอบข้อจำกัดไม่สามารถถูกข้ามไปได้

ดังนั้นการใช้วงจรเครื่องจักรสถานะทั่วไปในครึ่งแรกของบทความนี้ในการดำเนินการคำนวณที่ซับซ้อนมีประสิทธิภาพที่ต่ำมาก หากใช้วิธีเหล่านี้ในการดำเนินการคำนวณที่ซับซ้อน ประสิทธิภาพของมันมีความยากลำบาก นอกจากนี้ มันยากสำหรับวงจรเครื่องจักรสถานะทั่วไปที่จะดำเนินการคำสั่งที่ซับซ้อนหรือปฏิสัมพันธ์โดยตรงกับโลกภายนอก

เพื่อแก้ปัญหานี้ การปฏิบัติจริงของ zkVMs 通常ใช้การผสานของวงจรเครื่อง til ทั่วไปและวงจรพิสูจน์ที่เฉพาะเจาะจงเพื่อพิสูจน์ส่วนของโปรแกรมแยกออกจากกันแล้วรวมพิสูจน์เหล่านั้นเข้าด้วยกันเป็นหนึ่งตัวแก้ปัญหา

Image cource: 1 2

แผนภาพด้านซ้ายคือสถาปัตยกรรมวงจรของโครงการ Scroll และแผนภาพในมุมขวาล่างคือสถาปัตยกรรมวงจรของ Polygon ทั้งสองใช้วิธีการที่คล้ายกันเช่นที่แสดงในแผนภาพในมุมบน

เครื่องประกอบขั้นตอนทั่วไปรับผิดชอบในการพิสูจน์ควบคุมตรรกะการดำเนินการของโปรแกรม ในส่วนใหญ่ของสัญญา การดำเนินการจริงของส่วนนี้ของตรรกะมีขนาดเล็กมาก ดังนั้นการพิสูจน์ด้วยเครื่องประกอบขั้นตอนทั่วไปที่ไม่มีประสิทธิภาพยังยอมรับได้ในด้านประสิทธิภาพ

การคำนวณที่ซับซ้อนและคงที่มากขึ้น เช่น การหา hash, การดำเนินการกับต้นไม้ MPT, ข้อมูลนำเข้าภายนอก ฯลฯ ได้รับการพิสูจน์โดยวงจรเฉพาะ

สถานะเครื่องจักรทั่วไปและวงจรพิสูจน์ทีละเฉพาะจะกระทำการสื่อสารกันโดยใช้ตารางค้นหา ทุกครั้งที่วงจรของเครื่องจักรเรียกใช้การดำเนินการเหล่านี้ โมดูลที่สร้างพยานสำหรับพิสูจน์จะเขียนพารามิเตอร์การเรียกและผลลัพธ์การคำนวณในตารางค้นหา ดังนั้นการเรียกใช้การดำเนินการเหล่านี้ในวงจรของเครื่องจักรจะถูกทำให้เป็นการดำเนินการค้นหา

ความถูกต้องของการเรียกและค่าที่ส่งกลับในตารางการค้นหาถูก จำกัดและพิสูจน์โดยวงจรที่เฉพาะเจาะจง

สุดท้าย ข้อจำกัดในการคัดลอกในวงจรเชื่อมต่อวงจรเครื่องสถานะ วงจรที่เฉพาะเจาะจง และตารางค้นหา โดยตรวจสอบว่าแต่ละรายการในตารางค้นหาได้รับการพิสูจน์โดยวงจรที่เฉพาะเจาะจงที่เกี่ยวข้อง และในที่สุดสร้างพิสูจน์สำหรับบล็อกที่สมบูรณ์

สัญญา L1 ต้องการเพียงการตรวจสอบพิสูจน์รวมนี้เท่านั้นเพื่อยืนยันความถูกต้องของกระบวนการปฏิบัติการของเครื่องจำลองเสมือนทั้งหมด

สรุป

เทคโนโลยีพิสูจน์ทศนิยมศูนย์ที่ทำให้เป็นไปได้ที่จะพิสูจน์การคำนวณได้ง่ายและเร็ว และเปิดทางให้การจัดทำกระบวนการคำนวณไปยังสิ่งแวดล้อมที่ไม่เชื่อถือได้ เมื่อใช้เทคโนโลยีนี้ในบล็อกเชน จะทำให้การดำเนินการออกจากโซ่ ทำให้บล็อกเชนหลักสามารถโฟกัสไปที่การกระจายและปัญหาด้านความปลอดภัย แต่ลักษณะของวงจรพิสูจน์ทศนิยมศูนย์ที่เชี่ยวชาญในการดำเนินการโลจิกที่คงที่ จำกัดศักยภาพของพิสูจน์ทศนิยมศูนย์บนบล็อกเชน จำกัดความสามารถของ zkRollup เริ่มต้นในระดับของรายการที่เป็นพิเศษ

อย่างไรก็ตาม ด้วยการพัฒนาและการเจริญเติบโตของเครื่องจำลองเสมือน zk รองรับการดำเนินการที่สมบูรณ์แบบที่ลำดับเอาท์ของสมาร์ทคอนแทรคต่าง ๆ กลายเป็นเรื่องที่เป็นไปได้ ศักยภาพของ zkRollup จะถูกปลดปล่อยอย่างแท้จริง และสามารถให้การเข้าใจวิสันที่ของมันในการแตก trilemma บล็อกเชน

คำปฏิเสธ:

  1. บทความนี้พิมพ์ซ้ําจาก [ZAN], ลิขสิทธิ์ทั้งหมดเป็นของผู้เขียนต้นฉบับ [ZAN และ AntChain เปิด Open Labs]. หากมีข้อโต้แย้งใด ๆ เกี่ยวกับการพิมพ์ซ้ำนี้ กรุณาติดต่อGate เรียนทีม และพวกเขาจะดำเนินการด้วยรวดเร็ว
  2. คำประกาศความรับผิด: มุมมองและความคิดเห็นที่แสดงในบทความนี้เป็นเพียงของผู้เขียนเท่านั้น และไม่เป็นการให้คำแนะนำทางด้านการลงทุนใดๆ
  3. การแปลบทความเป็นภาษาอื่น ๆ เป็นงานของทีม Gate Learn ห้ามคัดลอก แจกจ่าย หรือลอกเลียนบทความที่ถูกแปล นอกเสียจากจะได้รับอนุญาต
Start Now
Sign up and get a
$100
Voucher!