เรียนรู้วิธีที่ Aztec ผสานการดำเนินการส่วนตัวและสาธารณะบน L2

คอนเทนต์การเรียนรู้icon

เรียนรู้กับ Aztec (AZTEC): สัญญาอัจฉริยะที่เน้นความเป็นส่วนตัวบน Ethereum L2

คำนำ: Aztec เป็น Layer 2 ที่เน้นความเป็นส่วนตัว ซึ่งช่วยให้นักพัฒนาสามารถสร้างสัญญาอัจฉริยะที่มีทั้งสถานะส่วนตัวและสาธารณะ รวมถึงการดำเนินการส่วนตัวและสาธารณะ ทำให้สามารถสร้างแอปที่มี “ความเป็นส่วนตัวแบบเลือกได้” ซึ่งรู้สึกเหมือน DeFi ทั่วไป โดยไม่ต้องเปิดเผยทุกอย่างบนโซ่

Aztec คืออะไร

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

วิธีการทำงานของธุรกรรมบน Aztec

Aztec แบ่งการดำเนินการออกเป็นสองสภาพแวดล้อมที่แยกจากกัน:
  1. สภาพแวดล้อมการดำเนินการส่วนตัว (PXE) — ทำงานบนฝั่งผู้ใช้

ฟังก์ชันส่วนตัวจะถูกดำเนินการทางด้านไคลเอนต์ภายใน PXE (อ่านว่า “พิกซี่”) เพื่อเพิ่มความเป็นส่วนตัวสูงสุด
PXE:
  • ดำเนินการฟังก์ชันส่วนตัวในท้องถิ่น
  • ถือกุญแจ + บันทึก
  • สร้าง zero-knowledge proof สำหรับการดำเนินการส่วนตัว
  • รวมอยู่ใน aztec.js (TypeScript) ใช้งานได้ใน Node หรือเบราว์เซอร์
  1. Public VM (AVM) — ทำงานบนโหนดของ Aztec

ฟังก์ชันสาธารณะจะทำงานบนเครือข่ายใน Aztec Virtual Machine (AVM) ซึ่งมีลักษณะเชิงแนวคิดคล้ายกับ EVM (ดังนั้น “สัญชาตญาณด้านประสิทธิภาพแก๊ส” จึงใช้ได้คล้ายกับ Solidity)

กฎการดำเนินการตามทิศทาง (สำคัญ)

ธุรกรรมไหลจากส่วนตัว → สาธารณะ:
  • ฟังก์ชันส่วนตัวสามารถเพิ่มฟังก์ชันสาธารณะเข้าคิวเพื่อเรียกใช้ในภายหลัง
  • ฟังก์ชันสาธารณะไม่สามารถเรียกใช้งานฟังก์ชันส่วนตัวได้
การแยกนี้ตั้งใจไว้: เครือข่ายสาธารณะไม่ควรสามารถ “เข้าถึง” การดำเนินการส่วนตัวได้

สถานะส่วนตัว vs สถานะสาธารณะ: บันทึก ตัวยกเลิก และต้นไม้

Aztec ใช้โมเดลสถานะที่แตกต่างกันตามระดับความเป็นส่วนตัว:

สถานะส่วนตัว = บันทึกแบบ UTXO

สถานะส่วนตัวถูกเก็บไว้เป็นบันทึก (ชิ้นข้อมูลแบบ UTXO) เพื่อรักษาความเป็นส่วนตัว:
  • บันทึกจะถูกเพิ่มเข้าไปในต้นไม้ UTXO แบบเพิ่มเฉพาะ
  • เมื่อหมายเหตุถูก “ใช้ไป/ลบออก” จะมีการสร้าง nullifier
  • Nullifiers ถูกเก็บไว้ในต้นไม้ nullifier ที่แยกต่างหาก
สิ่งนี้ช่วยให้เครือข่ายบังคับใช้การใช้แล้วเพียงครั้งเดียว โดยไม่เปิดเผยเนื้อหาส่วนตัวของบันทึก

สถานะสาธารณะ = การจัดเก็บแบบสาธารณะที่คล้ายบัญชี

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

การเป็นนามธรรมของบัญชี: ทุกบัญชีคือสัญญาอัจฉริยะ

Aztec มีการแยกแยะบัญชีแบบเนทีฟในระดับโปรโตคอล:
  • ไม่มี EOA (ไม่มีบัญชีแบบ “คู่กุญแจ” อย่างง่าย)
  • บัญชีทุกบัญชีเป็นสัญญาอัจฉริยะ
  • นักพัฒนาสามารถกำหนดกฎของตนเองสำหรับ:
    • การยืนยันตัวตน (ลายเซ็น, มัลติซิก, พาสคีย์, เงื่อนไขที่กำหนดเอง)
    • นโยบายการอนุญาต (ขีดจำกัด สิทธิ์ และคีย์เซสชัน)
    • nonce / การป้องกันการส่งซ้ำ
    • กลยุทธ์การชำระค่าธรรมเนียม (ชำระค่าธรรมเนียมด้วยโทเค็นต่างๆ แบบผู้สนับสนุน ฯลฯ)

ทำไมสิ่งนี้จึงช่วยป้องกันการโจมตีแบบ DoS (ปัญหา “การตรวจสอบใช้ทรัพยากรสูง”)

แบบจำลองของ Aztec ผลักดันการตรวจสอบที่ซับซ้อนไปยังฝั่งไคลเอนต์:
  • ลูกค้าตรวจสอบและสร้างหลักฐาน ZK ว่า “การตรวจสอบสำเร็จ”
  • ผู้จัดเรียงยืนยันหลักฐานขนาดคงที่
  • ดังนั้น ความซับซ้อนในการตรวจสอบจึงไม่ทำให้ต้นทุนการตรวจสอบเครือข่ายพุ่งสูงขึ้น
สิ่งนี้ช่วยให้ตรรกะบัญชีสำหรับผู้ใช้ขั้นสูงทำงานได้ โดยไม่ทำให้เครือข่ายช้า

ปุ่มในบัญชี Aztec (เน้นความเป็นส่วนตัว)

บัญชี Aztec แต่ละบัญชีได้รับการรองรับโดยคีย์คู่ 3 คู่:
  • คู่กุญแจ Nullifier: ใช้ในการคำนวณ note nullifiers
  • คู่กุญแจการดูที่กำลังเข้ามา: ใช้ในการเข้ารหัสบันทึกสำหรับผู้รับ
  • คู่กุญแจการดูออก: ใช้ในการเข้ารหัสบันทึกสำหรับผู้ส่ง
เนื่องจากบัญชีเป็นสัญญาอัจฉริยะ จึงไม่มีคู่กุญแจลงนามโดยอัตโนมัติ—การยืนยันตัวตนขึ้นอยู่กับการออกแบบสัญญาของบัญชี

พยานการยืนยันตัวตน: ปลอดภัยกว่า “การอนุมัติแบบไม่จำกัด”

Aztec แทนรูปแบบ “การอนุมัติแบบไม่จำกัด” ที่มีความเสี่ยงด้วย Authentication Witnesses (AuthWit):
  • แทนที่จะให้สิทธิ์แบบไม่จำกัดตลอดไป
  • ผู้ใช้อนุญาตการกระทำเฉพาะพร้อมพารามิเตอร์เฉพาะ
สิ่งนี้ออกแบบมาเพื่อลดความเสี่ยงจากการอนุมัติอย่างต่อเนื่อง ขณะเดียวกันก็ยังคงรักษาประสบการณ์ผู้ใช้ที่ดี (การรวมรายการ อัตโนมัติ)

สร้างบน Aztec ด้วย Noir

สัญญาอัจฉริยะของ Aztec เขียนด้วย Noir ซึ่งเป็นภาษาที่เน้น ZK สำหรับการเขียนโปรแกรม/สัญญาที่สามารถพิสูจน์ได้ คำเตือนสำคัญจากเอกสาร: ฟังก์ชันส่วนตัวสามารถเขียนในลักษณะที่ไม่ได้รับการปรับแต่งอย่างเหมาะสม เพราะการพิสูจน์มีความเข้าใจด้านประสิทธิภาพที่ต่างจากการดำเนินการปกติ—ดังนั้นการเรียนรู้ “วิธีเขียน Noir ที่มีประสิทธิภาพ” จึงมีความสำคัญ