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 มีลักษณะสองอย่าง:
ตามวิธีการตรวจสอบของการอัปเดตสถานะเลเยอร์ 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 ได้เข้าครองพื้นที่มากกว่าครึ่งหนึ่งแล้ว และกำลังพัฒนาอย่างรวดเร็ว
ข้อมูลถูกดึงขึ้นมาเมื่อ: 18 มกราคม 2024
ในช่วงการพัฒนา 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 เราจะให้ข้อมูลย่อเกี่ยวกับเทคโนโลยีพิสูจน์ที่ไม่เปิดเผย (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
เราอธิบาย VM ผ่านแบบจำลองของเครื่องกลสถานะสากล VM เป็นเครื่องกลสถานะที่เปลี่ยนสถานะเมื่อคำสั่งถูกประมวลผล เรามาแสดงตัวอย่างว่าเครื่องจำลองเสมือนกับเครื่องกลสถานะที่ถูกพิสูจน์โดยวงจรที่ไม่รู้เหตุสถานะเริ่มต้นอย่างง่าย
เราสมมติว่าเครื่องจักรสถานะสากลนี้มีทั้งทั่วไป (A และ B) และเพิ่มเติมยังมีที่เก็บค่าของคำสั่งปัจจุบัน
สถานะของทะเบียนก่อนที่จะดำเนินการคำสั่ง
รูปด้านล่างแสดงกระบวนการทำงานพื้นฐานของวงจรการพิสูจน์เครื่องจำลอย ZK:
สถานะ 0 สามารถถือว่าเป็นสถานะเริ่มต้นของเครื่องจำลองเสมือนนี้ก่อนการทำงาน สถานะเริ่มต้นหลังจากทั้งหมด m คำสั่ง ถึงสถานะสุดท้าย m นอกจากสถานะเริ่มต้น เครื่องจำลองเสมือนนี้ยังมีตารางข้อมูลนำเข้าปกติสองอัน
ในรูปภาพกระบวนการดำเนินการของคำสั่งที่ 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 ทั่วไปและวงจรพิสูจน์ที่เฉพาะเจาะจงเพื่อพิสูจน์ส่วนของโปรแกรมแยกออกจากกันแล้วรวมพิสูจน์เหล่านั้นเข้าด้วยกันเป็นหนึ่งตัวแก้ปัญหา
แผนภาพด้านซ้ายคือสถาปัตยกรรมวงจรของโครงการ Scroll และแผนภาพในมุมขวาล่างคือสถาปัตยกรรมวงจรของ Polygon ทั้งสองใช้วิธีการที่คล้ายกันเช่นที่แสดงในแผนภาพในมุมบน
เครื่องประกอบขั้นตอนทั่วไปรับผิดชอบในการพิสูจน์ควบคุมตรรกะการดำเนินการของโปรแกรม ในส่วนใหญ่ของสัญญา การดำเนินการจริงของส่วนนี้ของตรรกะมีขนาดเล็กมาก ดังนั้นการพิสูจน์ด้วยเครื่องประกอบขั้นตอนทั่วไปที่ไม่มีประสิทธิภาพยังยอมรับได้ในด้านประสิทธิภาพ
การคำนวณที่ซับซ้อนและคงที่มากขึ้น เช่น การหา hash, การดำเนินการกับต้นไม้ MPT, ข้อมูลนำเข้าภายนอก ฯลฯ ได้รับการพิสูจน์โดยวงจรเฉพาะ
สถานะเครื่องจักรทั่วไปและวงจรพิสูจน์ทีละเฉพาะจะกระทำการสื่อสารกันโดยใช้ตารางค้นหา ทุกครั้งที่วงจรของเครื่องจักรเรียกใช้การดำเนินการเหล่านี้ โมดูลที่สร้างพยานสำหรับพิสูจน์จะเขียนพารามิเตอร์การเรียกและผลลัพธ์การคำนวณในตารางค้นหา ดังนั้นการเรียกใช้การดำเนินการเหล่านี้ในวงจรของเครื่องจักรจะถูกทำให้เป็นการดำเนินการค้นหา
ความถูกต้องของการเรียกและค่าที่ส่งกลับในตารางการค้นหาถูก จำกัดและพิสูจน์โดยวงจรที่เฉพาะเจาะจง
สุดท้าย ข้อจำกัดในการคัดลอกในวงจรเชื่อมต่อวงจรเครื่องสถานะ วงจรที่เฉพาะเจาะจง และตารางค้นหา โดยตรวจสอบว่าแต่ละรายการในตารางค้นหาได้รับการพิสูจน์โดยวงจรที่เฉพาะเจาะจงที่เกี่ยวข้อง และในที่สุดสร้างพิสูจน์สำหรับบล็อกที่สมบูรณ์
สัญญา L1 ต้องการเพียงการตรวจสอบพิสูจน์รวมนี้เท่านั้นเพื่อยืนยันความถูกต้องของกระบวนการปฏิบัติการของเครื่องจำลองเสมือนทั้งหมด
เทคโนโลยีพิสูจน์ทศนิยมศูนย์ที่ทำให้เป็นไปได้ที่จะพิสูจน์การคำนวณได้ง่ายและเร็ว และเปิดทางให้การจัดทำกระบวนการคำนวณไปยังสิ่งแวดล้อมที่ไม่เชื่อถือได้ เมื่อใช้เทคโนโลยีนี้ในบล็อกเชน จะทำให้การดำเนินการออกจากโซ่ ทำให้บล็อกเชนหลักสามารถโฟกัสไปที่การกระจายและปัญหาด้านความปลอดภัย แต่ลักษณะของวงจรพิสูจน์ทศนิยมศูนย์ที่เชี่ยวชาญในการดำเนินการโลจิกที่คงที่ จำกัดศักยภาพของพิสูจน์ทศนิยมศูนย์บนบล็อกเชน จำกัดความสามารถของ zkRollup เริ่มต้นในระดับของรายการที่เป็นพิเศษ
อย่างไรก็ตาม ด้วยการพัฒนาและการเจริญเติบโตของเครื่องจำลองเสมือน zk รองรับการดำเนินการที่สมบูรณ์แบบที่ลำดับเอาท์ของสมาร์ทคอนแทรคต่าง ๆ กลายเป็นเรื่องที่เป็นไปได้ ศักยภาพของ zkRollup จะถูกปลดปล่อยอย่างแท้จริง และสามารถให้การเข้าใจวิสันที่ของมันในการแตก trilemma บล็อกเชน
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 มีลักษณะสองอย่าง:
ตามวิธีการตรวจสอบของการอัปเดตสถานะเลเยอร์ 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 ได้เข้าครองพื้นที่มากกว่าครึ่งหนึ่งแล้ว และกำลังพัฒนาอย่างรวดเร็ว
ข้อมูลถูกดึงขึ้นมาเมื่อ: 18 มกราคม 2024
ในช่วงการพัฒนา 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 เราจะให้ข้อมูลย่อเกี่ยวกับเทคโนโลยีพิสูจน์ที่ไม่เปิดเผย (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
เราอธิบาย VM ผ่านแบบจำลองของเครื่องกลสถานะสากล VM เป็นเครื่องกลสถานะที่เปลี่ยนสถานะเมื่อคำสั่งถูกประมวลผล เรามาแสดงตัวอย่างว่าเครื่องจำลองเสมือนกับเครื่องกลสถานะที่ถูกพิสูจน์โดยวงจรที่ไม่รู้เหตุสถานะเริ่มต้นอย่างง่าย
เราสมมติว่าเครื่องจักรสถานะสากลนี้มีทั้งทั่วไป (A และ B) และเพิ่มเติมยังมีที่เก็บค่าของคำสั่งปัจจุบัน
สถานะของทะเบียนก่อนที่จะดำเนินการคำสั่ง
รูปด้านล่างแสดงกระบวนการทำงานพื้นฐานของวงจรการพิสูจน์เครื่องจำลอย ZK:
สถานะ 0 สามารถถือว่าเป็นสถานะเริ่มต้นของเครื่องจำลองเสมือนนี้ก่อนการทำงาน สถานะเริ่มต้นหลังจากทั้งหมด m คำสั่ง ถึงสถานะสุดท้าย m นอกจากสถานะเริ่มต้น เครื่องจำลองเสมือนนี้ยังมีตารางข้อมูลนำเข้าปกติสองอัน
ในรูปภาพกระบวนการดำเนินการของคำสั่งที่ 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 ทั่วไปและวงจรพิสูจน์ที่เฉพาะเจาะจงเพื่อพิสูจน์ส่วนของโปรแกรมแยกออกจากกันแล้วรวมพิสูจน์เหล่านั้นเข้าด้วยกันเป็นหนึ่งตัวแก้ปัญหา
แผนภาพด้านซ้ายคือสถาปัตยกรรมวงจรของโครงการ Scroll และแผนภาพในมุมขวาล่างคือสถาปัตยกรรมวงจรของ Polygon ทั้งสองใช้วิธีการที่คล้ายกันเช่นที่แสดงในแผนภาพในมุมบน
เครื่องประกอบขั้นตอนทั่วไปรับผิดชอบในการพิสูจน์ควบคุมตรรกะการดำเนินการของโปรแกรม ในส่วนใหญ่ของสัญญา การดำเนินการจริงของส่วนนี้ของตรรกะมีขนาดเล็กมาก ดังนั้นการพิสูจน์ด้วยเครื่องประกอบขั้นตอนทั่วไปที่ไม่มีประสิทธิภาพยังยอมรับได้ในด้านประสิทธิภาพ
การคำนวณที่ซับซ้อนและคงที่มากขึ้น เช่น การหา hash, การดำเนินการกับต้นไม้ MPT, ข้อมูลนำเข้าภายนอก ฯลฯ ได้รับการพิสูจน์โดยวงจรเฉพาะ
สถานะเครื่องจักรทั่วไปและวงจรพิสูจน์ทีละเฉพาะจะกระทำการสื่อสารกันโดยใช้ตารางค้นหา ทุกครั้งที่วงจรของเครื่องจักรเรียกใช้การดำเนินการเหล่านี้ โมดูลที่สร้างพยานสำหรับพิสูจน์จะเขียนพารามิเตอร์การเรียกและผลลัพธ์การคำนวณในตารางค้นหา ดังนั้นการเรียกใช้การดำเนินการเหล่านี้ในวงจรของเครื่องจักรจะถูกทำให้เป็นการดำเนินการค้นหา
ความถูกต้องของการเรียกและค่าที่ส่งกลับในตารางการค้นหาถูก จำกัดและพิสูจน์โดยวงจรที่เฉพาะเจาะจง
สุดท้าย ข้อจำกัดในการคัดลอกในวงจรเชื่อมต่อวงจรเครื่องสถานะ วงจรที่เฉพาะเจาะจง และตารางค้นหา โดยตรวจสอบว่าแต่ละรายการในตารางค้นหาได้รับการพิสูจน์โดยวงจรที่เฉพาะเจาะจงที่เกี่ยวข้อง และในที่สุดสร้างพิสูจน์สำหรับบล็อกที่สมบูรณ์
สัญญา L1 ต้องการเพียงการตรวจสอบพิสูจน์รวมนี้เท่านั้นเพื่อยืนยันความถูกต้องของกระบวนการปฏิบัติการของเครื่องจำลองเสมือนทั้งหมด
เทคโนโลยีพิสูจน์ทศนิยมศูนย์ที่ทำให้เป็นไปได้ที่จะพิสูจน์การคำนวณได้ง่ายและเร็ว และเปิดทางให้การจัดทำกระบวนการคำนวณไปยังสิ่งแวดล้อมที่ไม่เชื่อถือได้ เมื่อใช้เทคโนโลยีนี้ในบล็อกเชน จะทำให้การดำเนินการออกจากโซ่ ทำให้บล็อกเชนหลักสามารถโฟกัสไปที่การกระจายและปัญหาด้านความปลอดภัย แต่ลักษณะของวงจรพิสูจน์ทศนิยมศูนย์ที่เชี่ยวชาญในการดำเนินการโลจิกที่คงที่ จำกัดศักยภาพของพิสูจน์ทศนิยมศูนย์บนบล็อกเชน จำกัดความสามารถของ zkRollup เริ่มต้นในระดับของรายการที่เป็นพิเศษ
อย่างไรก็ตาม ด้วยการพัฒนาและการเจริญเติบโตของเครื่องจำลองเสมือน zk รองรับการดำเนินการที่สมบูรณ์แบบที่ลำดับเอาท์ของสมาร์ทคอนแทรคต่าง ๆ กลายเป็นเรื่องที่เป็นไปได้ ศักยภาพของ zkRollup จะถูกปลดปล่อยอย่างแท้จริง และสามารถให้การเข้าใจวิสันที่ของมันในการแตก trilemma บล็อกเชน