了解 Aztec 如何在 L2 上整合私有與公有執行

學習內容icon

學習 Aztec(AZTEC):基於以太坊 L2 的隱私優先智能合約

介紹:Aztec 是一間以隱私為先的第二層解決方案,讓開發者能夠建立同時具有私有與公開狀態、私有與公開執行的智能合約,實現「選擇性隱私」應用程式,體驗如同常規去中心化金融(DeFi)一樣,卻無需將所有資料暴露於鏈上。

什麼是 Aztec?

Aztec 是一個以隱私為設計核心的第二層網絡,同時在需要時仍支援公開的可組合性。
核心概念很簡單:
  • 針對敏感使用者操作(餘額、身份、意圖、策略)的私有執行與私有狀態。
  • 公開執行與公開狀態,適用於必須全球可見的內容(公開流動性、公開合約邏輯、共享狀態)。
因此,Aztec 支援混合型應用程式,而非僅選擇「全部公開」或「全部私有」。

Aztec 上交易的運作方式

Aztec 將執行分為兩個獨立的環境:
  1. 私人執行環境(PXE)— 在用戶端運行

私有功能在 PXE(發音為 “pixie”)內於用戶端執行,以最大化隱私。
PXE:
  • 在本地執行私有功能
  • 持有鑰匙 + 備註
  • 為私密操作生成零知識證明
  • 包含於 aztec.js(TypeScript)中,可在 Node 或瀏覽器中運行
  1. 公共 VM(AVM)— 在 Aztec 節點上運行

公共函數在 Aztec 虛擬機器(AVM)上執行,其概念類似於 EVM(因此「氣體效率直覺」更類似於 Solidity)。

方向性執行規則(重要)

一筆交易從私有流向公有:
  • 私有函數可以將公有函數排入佇列,以延後執行。
  • 公開函數不能調用私有函數。
這種分離是故意的:公共網絡不應能夠「介入」私有執行。

私有狀態與公開狀態:備註、空值與樹狀結構

Aztec 根據隱私需求使用不同的狀態模型:

私有狀態 = UTXO 式的「註記」

私有狀態以備註形式儲存(類似 UTXO 的數據塊)。為確保私密性:
  • 備註將被附加至一個僅可追加的 UTXO 樹中
  • 當一筆註記被「花費/刪除」時,會產生一個空值符號
  • Nullifiers 存儲在獨立的 nullifier 樹中
這使得網路能在不洩露筆記私密內容的情況下,強制執行「僅能使用一次」的規則。

公開狀態 = 像帳戶一樣的公開儲存

公共狀態的行為更像以太坊:
  • 儲存在公共資料樹中
  • 直接更新並於鏈上顯示
開發者重點:
  • 私有狀態工作 = 承諾 + 消除器(證明正確性而不洩露資料)
  • 公共狀態工作 = 直接更新(正常的區塊鏈儲存行為)

帳戶抽象:每個帳戶都是一個智能合約

Aztec 在協議層級具有原生帳戶抽象:
  • 沒有 EOAs(沒有簡單的「金鑰對帳戶」)
  • 每個帳戶都是一個智能合約
  • 開發者可以為以下項目自定義規則:
    • 認證(簽名、多重簽名、通行密鑰、自定義邏輯)
    • 授權政策(限額、權限、會話金鑰)
    • nonce / 重放保護
    • 費用支付策略(以不同代幣支付費用、贊助模式等)

為何這有助於防禦 DoS(「驗證成本高昂」問題)

Aztec 的模型將複雜的驗證推送到用戶端:
  • 客戶驗證並生成一個「驗證成功」的 ZK 證明
  • 序列器驗證一個固定大小的證明
  • 因此,驗證複雜性不會導致網路驗證成本急劇上升
這可在不讓區塊鏈變慢的情況下啟用「進階使用者」帳戶邏輯。

Aztec 帳戶(注重隱私)的密鑰

每個 Aztec 帳戶均由 3 組密鑰對支援:
  • 隱藏金鑰對:用於計算筆記消滅值
  • 即將到來的檢視金鑰對:用於加密給接收者的備註
  • 發出檢視金鑰對:用於加密給發送方的備註
由於帳戶是智能合約,它們不會自動擁有簽名密鑰對——驗證取決於帳戶合約的設計。

認證見證人:比「無限授權」更安全

Aztec 以認證證據(AuthWit)取代了高風險的「無限批准」模式:
  • 而非永久授予無限權限,
  • 使用者授權特定操作與特定參數
此設計旨在降低持續批准的風險,同時仍能提供良好的使用者體驗(批次處理、自動化)。

在 Aztec 上使用 Noir 建構

Aztec 的智能合約使用 Noir 撰寫,這是一種專為零知識證明(ZK)設計的語言,用於編寫可證明���程式/合約。文件中有一個重要提醒:私有函數可能以效率低下的方式撰寫,因為證明的效能直覺與一般執行不同——因此學習「如何撰寫高效能的 Noir」至關重要。