คำนำ
คำนำ
Ethereum Virtual Machine เป็นสภาพแวดล้อมการทำงานของรหัสที่สร้างขึ้นบน Ethereum blockchain รหัสสัญญาสามารถแยกออกจากภายนอกได้อย่างสมบูรณ์และเรียกใช้ภายใน EVM หน้าที่หลักของมันคือการประมวลผลสัญญาอัจฉริยะในระบบ Ethereum เหตุผลที่ Ethereum ทัวริงเสร็จสมบูรณ์คือนักพัฒนาสามารถใช้ภาษา Solidity เพื่อสร้างแอปพลิเคชันที่ทำงานบน EVM และสามารถคำนวณปัญหาการคำนวณทั้งหมดได้ แต่ความสมบูรณ์ของทัวริงยังไม่เพียงพอ ผู้คนยังพยายามห่อหุ้ม EVM ในระบบพิสูจน์ ZK แต่ปัญหาคือจะมีความซ้ำซ้อนมากเมื่อห่อหุ้ม zkEVM "โหมดโต๊ะเล็ก" ที่คิดค้นโดย Fox ไม่เพียงรับประกันว่านักพัฒนา Solidity Ethereum ดั้งเดิมจะสามารถโยกย้ายไปยัง zkEVM ได้อย่างราบรื่น แต่ยังช่วยลดต้นทุนที่ซ้ำซ้อนในการห่อหุ้ม EVM ลงในระบบพิสูจน์ ZK อีกด้วย
EVM อยู่ระหว่างการเปลี่ยนแปลงครั้งยิ่งใหญ่ของ ZK นับตั้งแต่ก่อตั้งขึ้นในปี 2558 การเปลี่ยนแปลงครั้งใหญ่นี้มีสองทิศทางหลัก
ทิศทางแรกคือแทร็กที่เรียกว่า zkVM โปรเจ็กต์แทร็กนี้มีไว้เพื่อปรับปรุงประสิทธิภาพของแอปพลิเคชันให้เหมาะสมที่สุดและความเข้ากันได้กับเครื่องเสมือน Ethereum ไม่ใช่ข้อพิจารณาหลัก มีสองทิศทางย่อยที่นี่ หนึ่งคือ สร้าง DSL (ภาษาเฉพาะโดเมน) ของคุณเอง ตัวอย่างเช่น StarkWare มุ่งมั่นที่จะส่งเสริมภาษาไคโรซึ่งไม่ใช่เรื่องง่ายในการโปรโมต อย่างที่สองคือเป้าหมายนั้นเข้ากันได้กับภาษาที่ค่อนข้างพัฒนาแล้วที่มีอยู่ เช่น RISC Zero มุ่งมั่นที่จะทำให้ zkVM เข้ากันได้กับ C++/Rust ความยากของแทร็กนี้คือข้อจำกัดในผลลัพธ์สุดท้ายนั้นซับซ้อนมากขึ้นเนื่องจากการแนะนำชุดคำสั่ง ISA
ทิศทางที่สองเรียกว่าแทร็ก zkEVM โปรเจ็กต์แทร็กนี้มีไว้สำหรับความเข้ากันได้ของ EVM Bytecode นั่นคือโค้ด EVM ที่ระดับ Bytecode และเหนือสิ่งอื่นใดสร้างการพิสูจน์ความรู้เป็นศูนย์ที่สอดคล้องกันผ่าน ZkEVM เพื่อให้นักพัฒนา Solidity Ethereum ดั้งเดิม จะสามารถโอนย้ายไปยัง zkEVM ได้โดยไม่มีค่าใช้จ่าย ผู้เล่นในแทร็กนี้ส่วนใหญ่ประกอบด้วย Polygon zkEVM, Scroll, Taiko และ Fox ความยากของแทร็กนี้คือเข้ากันได้กับต้นทุนที่ซ้ำซ้อนของ EVM ซึ่งไม่เหมาะสำหรับการห่อหุ้มในระบบป้องกัน ZK หลังจากคิดและโต้เถียงกันเป็นเวลานาน ในที่สุด Fox ก็พบกุญแจสำคัญในการลดความซ้ำซ้อนอย่างมากของ zkEVM รุ่นแรก: "โหมดโต๊ะเล็ก" zkEVM
วงจรข้อมูลและการพิสูจน์เป็นองค์ประกอบหลักสองประการของ zkEVM ในการสร้างการพิสูจน์ ในแง่หนึ่ง ใน zkEVM ผู้พิสูจน์ต้องการข้อมูลทั้งหมดที่เกี่ยวข้องกับการทำธุรกรรมเพื่อพิสูจน์ว่าการถ่ายโอนสถานะที่เกิดจากการทำธุรกรรมนั้นถูกต้อง ในขณะที่ข้อมูลใน EVM มีขนาดใหญ่และซับซ้อน ดังนั้น วิธีการจัดระเบียบและจัดระเบียบข้อมูลที่จำเป็นสำหรับการพิสูจน์จึงเป็นปัญหาที่ต้องพิจารณาอย่างรอบคอบเพื่อสร้าง zkEVM ที่มีประสิทธิภาพ ในทางกลับกัน วิธีพิสูจน์ (หรือยืนยัน) ความถูกต้องและความถูกต้องของการดำเนินการคำนวณอย่างมีประสิทธิภาพผ่านชุดข้อจำกัดของวงจรเป็นพื้นฐานในการรับรองความปลอดภัยของ zkEVM
คำอธิบายภาพ

รูปที่ 1: โซลูชัน zkEVM สองรุ่นสำหรับโต๊ะขนาดใหญ่และโต๊ะขนาดเล็ก
ตัวอย่างเช่น เรารวบรวมการเปลี่ยนแปลงแต่ละองค์ประกอบในสแต็ก เขียนการพิสูจน์วงจรสแต็กโดยเฉพาะ เขียนชุดของวงจรเลขคณิตสำหรับการดำเนินการเลขคณิตบริสุทธิ์ และอื่นๆ ด้วยวิธีนี้ สถานการณ์ที่แต่ละวงจรจำเป็นต้องพิจารณากลายเป็นเรื่องง่าย วงจรเหล่านี้ที่มีฟังก์ชันต่างๆ กัน มีชื่อเรียกต่างกันใน zkEVM ต่างๆ บางคนเรียกมันว่าวงจรโดยตรง ในขณะที่คนอื่นๆ เรียกมันว่า (sub)state machine แต่สาระสำคัญของแนวคิดนั้นเหมือนกัน
เพื่ออธิบายความหมายของการทำเช่นนี้ให้ชัดเจนยิ่งขึ้น ขอยกตัวอย่าง สมมติว่าเราต้องการพิสูจน์การบวก (นำองค์ประกอบ 2 ตัวบนของสแต็กออก แล้วใส่ผลรวมกลับไปที่ด้านบนสุดของสแต็ก):
สมมติว่ากองเดิมคือ [ 1, 3, 5, 4, 2 ]
จากนั้นหากเราไม่แยกประเภทและแยก เราต้องพยายามพิสูจน์ว่าหลังจากการดำเนินการข้างต้น สแต็กจะกลายเป็น [ 1, 3, 5, 6 ]
และหากมีการแยกประเภท เราก็เพียงต้องพิสูจน์สิ่งต่อไปนี้แยกกัน:
วงจรสแต็ค:
C 1 : พิสูจน์ว่า [ 1, 3, 5, 4, 2 ] โผล่ 2 และ 4 และกลายเป็น [ 1, 3, 5 ]
C 2 : พิสูจน์ว่า [ 1, 3, 5 ] กลายเป็น [ 1, 3, 5, 6 ] หลังจากกด ( 6)
วงจรเลขคณิต:
C 3 :a= 2, b= 4,c= 6 พิสูจน์ว่า a+b=c
คำอธิบายภาพ

รูปที่ 2: โมเดลโต๊ะขนาดใหญ่ที่นำมาใช้โดย zkEVM รุ่นแรก
เมื่อแยกประเภทแล้ว สถานการณ์ของแต่ละส่วนจะค่อนข้างง่าย ดังนั้นความยากในการพิสูจน์จะลดลงอย่างมาก
แต่การจำแนกประเภทและการแยกวงจรก็จะนำมาซึ่งปัญหาอื่นๆ ตามมาด้วย นั่นคือปัญหาความสอดคล้องของข้อมูลของวงจรประเภทต่างๆ นั่นเอง เช่น จากตัวอย่างข้างต้น จริงๆ แล้วเราต้องพิสูจน์ 2 สิ่งต่อไปนี้
C 4 : "ตัวเลขที่โผล่ใน C 1" = "a และ b ใน C 3"
C 5 : "จำนวนครั้งที่กดใน C 2" = "c ใน C 3"
เพื่อแก้ปัญหานี้ เรากลับไปที่คำถามแรก นั่นคือ เราจะจัดระเบียบข้อมูลที่เกี่ยวข้องกับการทำธุรกรรมอย่างไร และเราจะพูดถึงหัวข้อนี้ต่อไป:
วิธีที่เข้าใจง่ายคือ: ผ่านการติดตาม เราสามารถแยกแยะแต่ละขั้นตอนที่เกี่ยวข้องกับธุรกรรมทั้งหมด ทราบข้อมูลที่เกี่ยวข้อง และส่งคำขอไปยังโหนดเพื่อรับส่วนของข้อมูลที่ไม่อยู่ในการติดตาม จากนั้นเราจะดำเนินการ จัดเป็นโต๊ะตัว T ขนาดใหญ่ดังนี้
"การดำเนินการขั้นที่หนึ่ง" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการขั้นที่หนึ่ง"
"การดำเนินการขั้นตอนที่ 2" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการขั้นตอนที่ 2"
..."การดำเนินการที่ n" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการที่ n"
ในตัวอย่างข้างต้น เราจะมีบรรทัดที่บันทึก
"ขั้นตอน k: การบวก" "a= 2, b= 4, c= 6"
และซี4ข้างต้นสามารถพิสูจน์ได้ดังนี้
C 4(a): ตัวเลขที่แสดงโดย C 1 สอดคล้องกับขั้นตอนที่ k ในตารางขนาดใหญ่ T
C 4(a): a และ b ของ C 3 สอดคล้องกับขั้นตอน k ในตารางขนาดใหญ่ T
คำอธิบายภาพ

รูปที่ 3: "โหมดโต๊ะเล็ก" zkEVM ที่คิดค้นโดย Fox
เราพิจารณาโครงสร้างตารางต่อไปนี้:
แบบฟอร์มตา:
"การดำเนินการครั้งแรกของประเภท a" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการครั้งแรกของประเภท a"
"การดำเนินการครั้งที่สองของประเภท a" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการครั้งที่สองของประเภท a"
..."การดำเนินการ mth ประเภท a" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการ mth ประเภท a"
แบบฟอร์ม Tb:
"การดำเนินการครั้งแรกของประเภท b" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการครั้งแรกของประเภท b"
"การดำเนินการครั้งที่สองของประเภท b" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการครั้งที่สองของประเภท b"
..."การดำเนินการ mth ของประเภท b" "ข้อมูลที่เกี่ยวข้องกับการดำเนินการที่ n ของประเภท b"
…สร้างตารางขนาดเล็กหลายๆ ตารางด้วยวิธีนี้ ข้อดีของการทำเช่นนี้คือ เราสามารถค้นหาตารางขนาดเล็กที่เกี่ยวข้องได้โดยตรงตามประเภทของการดำเนินการที่เกี่ยวข้องกับข้อมูลที่ต้องการ ด้วยวิธีนี้ ประสิทธิภาพสามารถปรับปรุงได้อย่างมาก
ตัวอย่างง่ายๆ (สมมติว่าเราค้นหาได้ครั้งละ 1 องค์ประกอบเท่านั้น) คือหากเราต้องการพิสูจน์ว่ามีตัวอักษร 8 ตัว a~h อยู่ใน [a, b, c, d, e, f, g, h] เราจะ ต้องทำการค้นหา 8 ครั้งในตารางขนาด 8 แต่ถ้าเราแบ่งตารางเป็น [a, b, c, d] และ [e, f, g, h] เราก็แค่ทำการค้นหา 4 ครั้งบน ตารางตามลำดับ!
สรุปแล้ว
สรุปแล้ว
zkEVM "โหมดโต๊ะเล็ก" ที่คิดค้นโดย Fox ไม่เพียงช่วยให้แน่ใจว่านักพัฒนา Solidity Ethereum ดั้งเดิมสามารถโยกย้ายไปยัง zkEVM ได้โดยไม่มีค่าใช้จ่าย แต่ยังช่วยลดต้นทุนที่ซ้ำซ้อนของการห่อหุ้ม EVM ลงในระบบพิสูจน์ ZK อีกด้วย นี่เป็นการเปลี่ยนแปลงครั้งใหญ่ในโครงสร้างของ zkEVM ซึ่งจะส่งผลกระทบอย่างมากต่อแผนการขยายของ Ethereum


