newsence
來源篩選

VOSA: Virtual One-time Sub-Account — A Simplified Privacy Primitive for EVM

Ethereum Magicians

VOSA is a privacy pattern that trades fund-flow privacy for simplicity and compliance. Essentially: UTXO without Merkle trees — using O(1) spent-markers with epoch cleanup . We have a working implementation and are exploring whether this is worth formalizing as an EIP. Looking for feedback. What is VOSA? V irtual: Addresses exist only as mapping keys, not real EVM accounts O ne-time: Each address used exactly once (like UTXO notes) S ub- A ccount: Derived from master key using stealth addresses (ERC-5564) State is a single flat mapping: mapping(address => bytes32) balanceCommitmentHash; // bytes32(0) → never used // Poseidon(amt, blind, ts) → has balance (timestamp for replay protection) // 0xDEADDEAD...|block# → spent (prefix + spent block number, deletable after configurable window) State machine: UNUSED → ACTIVE → SPENT → (cleanup) → UNUSED No Merkle trees. No nullifier sets. Spent-tracking is O(1) and cleanable. How It Works Each VOSA holds a Poseidon hash commitment hiding the balance amount. Operations use standard ECDSA (MetaMask works directly) + Groth16 ZK proofs (on-chain verification): Deposit : Transfer ERC-20 in → ZK proof verifies commitment == Poseidon(amount, blinder, timestamp) → store at fresh VOSA Transfer : ECDSA signature + ZK proof that sum(inputs) == sum(outputs) → mark inputs SPENT, create outputs Withdraw : ECDSA signature + ZK proof → mark SPENT, transfer ERC-20 out Consolidate : ECDSA signatures + ZK proof → merge multiple VOSAs into one (simplifies account management, reduces future gas) Cleanup : SPENT markers encode block.number . After a configurable window (default ~1 month), anyone can call cleanup() to delete expired entries and save gas Why Poseidon over Pedersen? ~350 constraints vs ~3,400 — proof time drops from ~500ms to ~92ms, storage from 64 bytes to 32 bytes. Key Design Choice: SPENT_MARKER vs Nullifier | Aspect | Traditional UTXO (Tornado/Railgun) | VOSA | |--------|-----------------------------------|------| | Double-spend prevention | Nullifier set | SPENT_MARKER | | State lookup | O(log n) Merkle proof | O(1) mapping | | State growth | Unbounded (nullifiers forever) | Bounded (cleanup) | | Fund flow | Hidden | Visible (by design) | | 10-year storage (10B txs) | ~320 GB | ~2.7 GB | VOSA deliberately exposes fund flow in exchange for: ~10x fewer ZK circuit constraints O(1) state operations 97% storage savings with Epoch cleanup Simpler client implementation Privacy Model Hidden : Amounts, Balances, Real-world identity of VOSA holders (via stealth addresses) Visible : VOSA-to-VOSA transfer graph (input→output links), Depositor address, Withdrawal recipient This is NOT a bug — it’s designed for compliance-friendly privacy. Performance Groth16 + snarkjs WASM, Apple M2. Gas includes ~200K for on-chain Groth16 verification. | Operation | Proof Time | Gas (L2) | |—|—|—| | Deposit (0→1) | ~92ms | ~300K | | Transfer (1→2) | ~95ms | ~350K | | Transfer (2→2) | ~147ms | ~370K | | Withdraw (partial) | ~92ms | ~330K | | Consolidate (5→1) | ~210ms | ~475K | Use Cases Corporate balance privacy (hide amounts from competitors) Personal wallet privacy (hide holdings) Compliant private transactions (auditable fund flow) Full anonymity (use Tornado/Railgun instead) Questions for Discussion Is this pattern useful enough to formalize? Or do existing EIPs already cover this? Is SPENT_MARKER sound? Any security concerns with this approach vs nullifiers? Standalone or combined? Should VOSA be an Informational EIP (the pattern), with a separate ERC for “VOSA-20” (wrapped private ERC-20)? Epoch cleanup incentives — Gas savings sufficient motivation, or need additional incentives? Related Work ERC-5564 (Stealth Addresses) Tornado Cash (Merkle + Nullifier) Railgun (UTXO with full privacy) Aztec (Private L2) 1 post - 1 participant Read full topic

newsence

VOSA:虛擬一次性子帳戶 — 一種簡化的 EVM 隱私原語

Ethereum Magicians
6 天前

AI 生成摘要

VOSA 是一種針對 EVM 的隱私模式,透過犧牲資金流向的隱私來換取簡潔性與合規性,利用 O(1) 支出標記取代默克爾樹,實現顯著的存儲與 Gas 節省。

VOSA:虛擬一次性子帳戶 (Virtual One-time Sub-Account) — 一種簡化的 EVM 隱私原語 - EIPs 資訊性文章 - Fellowship of Ethereum Magicians

摘要

本文提出了一種名為 VOSA (Virtual One-time Sub-Account) 的輕量級隱私原語。VOSA 允許用戶為單次交易生成臨時的、鏈下衍生的地址,而無需管理多個私鑰或依賴複雜的零知識證明 (ZKP) 系統。透過利用 CREATE2 和簽名委派,VOSA 實現了接收者隱私,同時保持了與現有 EVM 基礎設施的完全兼容性。

動機

目前的隱私解決方案(如隱身地址或混幣器)通常面臨以下挑戰:

  • 複雜性: 需要專用的錢包軟體或複雜的密碼學證明。
  • 成本: 鏈上驗證 ZKP 的 Gas 費用高昂。
  • 用戶體驗: 管理多個帳戶或等待匿名集增長會增加摩擦。

VOSA 旨在提供一個「剛好夠用」的隱私層,專注於接收者匿名性,且開發者整合難度極低。

核心機制

VOSA 的運作基於三個核心支柱:

  1. 確定性衍生: 用戶從其主密鑰對衍生出一個臨時的虛擬地址。
  2. CREATE2 預測: 合約地址在部署前即可預知,允許資金發送到尚未「存在」的帳戶。
  3. 一次性執行: 資金透過一個極簡的代理合約提取,該合約在執行後會自毀或失效,確保地址的一次性性質。

工作流程

  1. 生成: 接收者生成一個隨機鹽值 (Salt) 並計算對應的 VOSA 地址。
  2. 發送: 發送者將資金(ETH 或代幣)發送到該 VOSA 地址。
  3. 領取: 接收者提供簽名授權,透過工廠合約部署 VOSA 並立即將資金轉移到最終目的地。

優勢

  • 無狀態性: 錢包不需要存儲成千上萬個私鑰。
  • Gas 效率: 相比於基於 ZK 的解決方案,VOSA 的交互成本與標準合約部署相當。
  • 向後兼容: 適用於任何支持 CREATE2 的 EVM 鏈。

安全考量

雖然 VOSA 提供了強大的接收者隱私,但它並不提供發送者匿名性(除非配合混幣器使用)。此外,用戶必須確保鹽值的隨機性,以防止地址碰撞或被預測。

結論

VOSA 為 EVM 生態系統提供了一種實用的隱私權衡方案。它不追求完美的匿名性,而是提供了一種簡單、高效且易於實現的工具,用於在日常交易中保護用戶隱私。