KeyFrame

基于 OpenZeppelin 保密库的保密型 Solidity 合约 Zama 开发者专区・第九届以太坊开发者大会(EthCC 9)

Zama中文·6月19日週五·16 min中文

三句話摘要

OpenZeppelin 發布 Confidential 合約庫,講解機密 Solidity 的核心差異、庫結構與三大安全陷阱。 機密 Solidity 的最大陷阱是「失敗不報錯」,開發者必須主動用 FHESELECT 讀取每次操作的實際結果,而非依賴 revert 來保障正確性。 1. 機密 Solidity 的根本差異在於「沒有明文、沒有分支、沒有 revert」

重點整理

重點
  • 1

    1. 機密 Solidity 的根本差異在於「沒有明文、沒有分支、沒有 revert」

  • 2

    所有變數返回的都是密文句柄,需在鏈下解密;無法用 if 分支,必須用 FHESELECT 選擇路徑;函數不能 revert,不足餘額時只能返回加密零值,呼叫者自行判斷結果。

  • 3

    2. 機密代幣(EC-7984)是 ERC-20 的隱私版本,介面設計全面加密化

  • 4

    balanceOf 返回加密句柄、totalSupply 同樣加密、transfer 需提供帶有 ZK 證明的加密金額;此外支援 operator 機制,授權他人在一定期間內使用代幣。

  • 5

    3. ERC-20 包裝器實現「公開代幣 ↔ 機密代幣」雙向轉換,解包需兩步驟

  • 6

    包裝直接呼叫 wrap() 即可完成;解包因須鏈下解密,必須先呼叫 unwrap() 觸發解密請求,取得明文與解密證明後,再呼叫 finalizeUnwrap() 才能取回 ERC-20 代幣。

  • 7

    4. 機密合約的安全模型與一般合約截然不同,需主動防禦靜默失敗

  • 8

    由於沒有 revert,開發者必須透過 FHESELECT 主動捕捉餘額不足、必須用暫態授權(transient allowance)避免密文被複製濫用、必須讀取實際轉帳結果而非假設成功。

實用技巧與重點

乾貨
  • 機密代幣標準:EC-7984
  • 庫分類:Utilities(安全 Map、Access Control)、Confidential Token、進階合約(Confidential Mixer、Confidential Vesting Wallet)
  • ERC-20 擴展:EC-20 Wrapper、Observer Access、RWA 合規模組
  • 真實案例:已有 3200 萬美元 USDT 以機密包裝器在生產環境中運行
  • 解包流程:兩步驟 — ① 呼叫 unwrap(加密金額 + 證明) → ② 取得明文後呼叫 finalizeUnwrap(明文 + 解密證明)
  • 安全漏洞一:靜默下溢(silent underflow)— 餘額不足不 revert,直接默默扣成負數;解法:FHESELECT 檢查餘額,不足返回加密零值
  • 安全漏洞二:持久授權(persistent allowance)被惡意複製密文攻擊;解法:改用暫態授權(transient allowance),並在第 14 行驗證 msg.sender 是否有權存取該密文句柄
  • 安全漏洞三:拍卖合約未驗證實際轉帳金額,零餘額用戶可成為最高出價者;解法:讀取實際轉帳結果,用 FHE gt + FHESELECT 判斷
  • 開發工具:OpenZeppelin Wizard 新增 Confidential 頁籤,可視化生成機密合約
  • 三條開發守則:① 避免靜默下溢 ② 使用暫態授權取代持久授權 ③ 始終讀取機密操作的實際返回值

結論

結論

機密 Solidity 的最大陷阱是「失敗不報錯」,開發者必須主動用 FHESELECT 讀取每次操作的實際結果,而非依賴 revert 來保障正確性。

完整解析

詳細

OpenZeppelin(影片中稱 OpenSapin)長期為 Solidity 開發者維護三個核心庫:主庫、可升級庫與社群庫。此次發表的 Confidential Contracts 是第四個成員,針對全同態加密(FHE)環境下的智慧合約開發提供標準化實作。講者 James 首先釐清了一個常見誤解:機密 Solidity 並不是一門新語言,而是在既有 Solidity 基礎上疊加的工具層,但它帶來了三項根本性的程式設計限制。

首先是型別差異——所有數值(uint、address 等)在機密環境中都以密文句柄(ciphertext handle)表示,這個句柄只是鏈外加密資料的識別符,本身不含明文。其次是沒有條件分支,開發者必須改用 FHESELECT 在兩個加密值之間做選擇。第三是沒有 revert,當轉帳餘額不足時,合約不會中止執行,而是返回一個加密的零值;呼叫者須自行解密判斷結果,這對熟悉傳統 Solidity 的開發者來說是最需要適應的思維轉換。

在庫結構方面,OpenZeppelin Confidential 分三層:底層是工具集(安全 Map、Access Control 等低階原語);中層是機密代幣合約,遵循 EC-7984 標準,並提供 EC-20 包裝器、Observer Access、RWA 合規等擴展;上層是更複雜的應用合約,如 Confidential Mixer(隱私混幣)與 Confidential Vesting Wallet(隱私歸屬錢包)。其中 EC-20 包裝器已在生產環境部署,目前有 3200 萬美元的 USDT 以機密形式運行。包裝(wrap)是單步操作,用戶存入 ERC-20 即獲得等量機密代幣;而解包(unwrap)因須在鏈下解密,設計為兩步驟流程:先呼叫 unwrap 觸發解密請求,取得明文與解密證明後,再呼叫 finalizeUnwrap 才能取回原始 ERC-20。

最後,講者分享了三個從實際開發中歸納的安全漏洞範式。第一,靜默下溢:若合約直接對餘額做減法而不用 FHESELECT 設保護,餘額不足時不會 revert 而是靜默溢出,同時另一方餘額仍然增加,造成憑空鑄幣。第二,持久授權濫用:若合約給予費用處理合約永久性的密文存取授權,惡意者可複製密文句柄直接呼叫費用計算函數繞過正常流程;正確做法是使用暫態授權,並在函數入口驗證 msg.sender 是否有權存取該密文。第三,拍賣合約的虛假出價:若合約在接受出價時未讀取實際轉帳的加密結果,零餘額的惡意用戶只需提交一個最高加密金額,就能被登記為最高出價者;解法是讀取實際轉帳量並透過 FHE 比大小函數確認。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「GitHub 熱點」的內容

Open Source AI
3 min
GitHub 熱點英文6月19日

Open Source AI

Kiraa

  • Apple Silicon 擁有業界頂尖的硬體整合架構,但原生軟體生態系不足,Kira 團隊選擇以 Swift 直接開發以填補這個缺口,充分發揮統一記憶體的優勢。
  • NVIDIA 的 GPU 運算模型建立在 CPU 與 GPU 分離的舊概念之上,這在 Apple 的統一晶片架構下是根本性的設計劣勢,因此需要全新的軟體堆疊。
  • Swift Pandas 能以傳統 Python Pandas 的 80 倍效能執行資料運算,使原本需要數天完成的工作縮短為數小時,直接改變了資料工作流程的可行性。
5個GitHub工具大觀:AI、OCR與生產力工具
9 min
GitHub 熱點中文6月19日

5個GitHub工具大觀:AI、OCR與生產力工具

Jerry's Productivity Tech Channel

  • Beetroot 提供最完整的剪貼板體驗,但穩定性仍有待改善。 相較於 Ditto 或 CopyQ,Beetroot 額外記錄剪貼內容來源應用程式、支援圖片獨立列表,並整合多個 AI 供應商,但 OCR 目前無法辨識中文與數學公式,且方向鍵操作偶爾失靈。
  • Tolaria 以執行效能換取快速開啟,並以 Git 取代雲端同步需求。 以 Rust 撰寫使其啟動速度遠快於 Obsidian,編輯體驗接近 Notion(斜線選單),並原生整合 Git,無需額外設定檔案同步方案。
  • Snippai 以 LLM 彌補傳統 OCR 對複雜內容的識別盲區。 傳統 OCR 對數學公式與表格結構常出錯,Snippai 改以語言模型理解圖像語意,輸出 LaTeX 格式公式或結構化表格,適合學術或技術內容截圖。
GitHub Trending Today - astrid, mcp-server-cloudflare, ai & More | #90
編輯精選
16 min
GitHub 熱點英文6月19日

GitHub Trending Today - astrid, mcp-server-cloudflare, ai & More | #90

GitHub Trending Digest

  • AI 框架走向 microkernel 設計:Astrid 採用類 Linux 的微核心架構,核心固定、外部模組可替換,讓開發者能混搭不同 AI 供應商與工具,避免整個專案被單一平台綁死。
  • MCP 成為 AI 與基礎設施的橋樑:Cloudflare MCP Transporter 將 Model Context Protocol 落地,讓 Cursor 或 Claude 等 AI 客戶端直接操作 Cloudflare 帳戶,實現自然語言管理雲端資源的工作流。
  • 供應商無關的 AI SDK 是前端整合的關鍵:Sandstack AI 提供統一 API,讓同一套邏輯能切換 OpenAI、Anthropic、Gemini 等供應商,並原生支援 React、Vue、Svelte、Solid,降低多平台適配成本。