
阿努比斯
阅读时间:12分钟
交易生命周期
在Anubis协议的架构中,交易生命周期构成连接用户隐私意图与链上确定性执行的核心桥梁。与以太坊通过单一账户模型处理状态变更的线性逻辑不同,Anubis引入了一种复杂的混合状态机。这种机制需要在单次原子执行中同时维护公共账户状态和私有笔记状态。这种设计不仅需要在密码学层面确保零知识证明的完整性和可靠性,还必须在系统工程层面应对一系列挑战,例如并发性、状态同步、抗审查性和gas经济性。
Anubis 的交易生命周期通过高度精密的工程设计,在看似无法调和的隐私性和透明性之间建立了一种自洽的逻辑。从底层协议扩展 EIP-2718,到客户端零知识证明的生成,再到链上原子混合状态的执行,每一步都经过了严格的密码学验证。
这种生命周期设计不仅实现了与以太坊生态系统的完全兼容,更重要的是,它将隐私从“附加”功能(例如混币器)提升为区块链底层结构的固有属性。通过 Type 103 交易,Anubis 使 DeFi 协议能够合规、透明地处理数十亿美元的资产转移,同时保障用户隐私数据安全,为 Web3 进入大规模机构应用时代奠定了坚实的技术基础。
本章将详细解释Anubis网络中的整个交易流程,从构建、证明、传播到最终的链上确认。我们将深入探讨该协议如何利用EIP-2718标准扩展交易类型(Type 100-103),如何在保持与EVM完全兼容的同时实现隐私资产的转移,以及如何通过创新的预编译合约系统确保DeFi操作的原子性和可组合性。

图 7-1 Anubis 事务生命周期的详细序列图
7.1 建筑哲学与国家二元性
Anubis 的交易生命周期设计遵循三大核心原则:默认隐私、选择性披露和最小化信任。在传统的 Layer 1 区块链中,交易不仅是价值转移的载体,也是在整个网络中广播的明文信息,导致用户财务图谱完全暴露。相反,虽然注重隐私的公有区块链隐藏了交易图谱,但它们往往牺牲了可编程性。Anubis 试图打破这个“不可能三角”,其核心在于对状态二元性的处理:
- 公共状态:采用标准的 Merkle Patricia Trie (MPT) 结构来存储智能合约代码、存储槽位和公共账户余额。本部分完全符合以太坊黄皮书规范,确保现有 Solidity/Vyper 合约的无缝运行。
- 私有状态:采用仅追加模式的稀疏默克尔树 (SMT) 来存储票据承诺,并搭配无效化集以防止双重支付。票据不仅作为资产容器,还作为价值载体,通过佩德森承诺进行加密。
交易生命周期的核心任务是通过数学证明向公共状态层证明状态变更的合法性,同时不泄露私有状态的具体细节(例如转账金额或发送者身份)。这种跨层交互要求交易在其生命周期的不同阶段呈现截然不同的形式:在客户端,它是一个包含私钥和明文数据的“见证”;在内存池中,它是一个包含零知识证明的加密“信封”;而在链上执行期间,它会转化为一个确定性的更新状态根。
7.2 扩展事务类型(EIP-2718)和数据结构
为了原生支持与 EVM 兼容的链上的隐私操作,Anubis 采用了 EIP-2718 类型的交易信封标准。与 EIP-1559(类型 2)等标准交易不同,Anubis 定义了自己的交易类型范围 0x64 到 0x67(十进制 100-103),用于承载隐私相关的元数据,例如零知识证明、空运算符和承诺。
这种设计允许传统的以太坊钱包(如 MetaMask)通过 RPC 接口识别和传递这些交易,而底层的 Anubis 节点可以解析它们的特定有效负载。
7.2.1 类型 100:块交易
操作代码:0x64
屏蔽交易是一种资产从公共领域转移到私有领域的单向通道。其本质是将公共账户(EOA)中的 ETH 或 ERC-20 代币锁定到 Anubis 隐私池合约中,并同时在票据承诺树中铸造等量的隐私票据。
- 隐私级别:0级
3级(完全隐私) - 资金流:公开演讲
隐私池合同 - 天然气付款:由发起交易的公共能源管理局 (EOA) 支付。
- 数据加载结构:

- 表 7-1 类型 100 数据加载结构表
- 深入分析:
- 100 型交易无需零知识证明,因为输入资金的来源公开且可验证。验证节点只需检查 EOA 余额是否充足,然后执行 TransferFrom 操作将代币转移到隐私池。
- 生成的承诺凭证 Commitment = Pedersen(amount, asset, blinding) 会被插入到默克尔树中,但此时它不会透露承诺的归属用户,从而切断了后续资金流向的可追溯性。
- 7.2.2 类型 101:隐私转移
- 操作代码:0x65
- 这是Anubis网络上最基本的隐私操作,类似于Zcash的Sapling交易。它允许用户在完全隐藏发送方、接收方和金额的情况下转移资产。由于采用了UTXO模型,这种交易通常涉及将多个小额交易“合并”并“拆分”成新的交易单。
- 隐私级别:3 级(完全隐私)
- 资金流:私募票据
私人笔记 - 燃气费用:由中继器通过成本抽象机制支付
- 数据加载结构:

- 表 7-2 类型 101 数据加载结构表
- 深入分析:
- 101 型交易的核心在于零知识证明。证明电路需要满足以下约束条件:

- 为防止交易关联分析,输入和输出的钞票数量通常是固定的(例如,2张入账,2张出账),任何短缺都用零值的“虚拟钞票”来填补。
- 7.2.3 类型 102:解除交易阻塞
- 操作代码:0x66
- 当用户需要将其隐私资产提取回公共账户(例如,用于在中心化交易所进行货币化或跨链交易)时,必须执行 102 型交易。
- 此过程会销毁隐私凭证,并将其从隐私池合约转移到指定的 EOA(事件对象账户)。
- 隐私级别:3级
0级 - 资金流:私募票据公共演讲
- 燃气费:通常从取款金额中扣除,或者由转运商支付。
数据加载结构:

表7-3 102 型数据负荷结构表
深入分析:
虽然接收地址和金额是公开的,但输入备注由无效符引用,因此外部人员无法从链上数据中得知资金来自哪个之前的 Shield 或 Transfer 交易,从而实现“发送者匿名性”。
7.2.4 类型 103:隐私合同调用
操作代码:0x67
Type 103 是 Anubis 的一项核心创新,实现了选择性隐私。它允许用户花费隐私币直接与任何 EVM 智能合约(例如 Uniswap、Aave)进行交互,同时仅公开合约逻辑所需的最小数据集(例如交易对和金额),从而隐藏用户的身份和总资产。
- 隐私级别:2 级(选择性隐私)
- 资金流:私募票据
临时账户
DeFi合约
私人笔记 - 燃气支付:中继支付服务。
数据加载结构:

表 7-4 103 型数据加载结构表
深入分析:
103 型交易引入了一种证明绑定机制。该电路不仅验证票据的所有权,还会计算一个哈希值(目标、调用数据、金额),并将其用作公开输入。这可以防止恶意中继者窃取有效的零知识证明并将资金重定向到其他合约(抢先交易/重放攻击)¹³。在执行过程中,系统会临时创建一个临时账户作为消息发送者,从而切断 DeFi 协议对用户真实身份的追踪。
7.3 链下生命周期:验证与构建
在交易广播到网络之前,客户端(钱包或SDK)必须完成一系列复杂的计算任务。由于这涉及到私钥和明文记录,因此该阶段必须在用户控制的设备或安全环境中执行,从而构成隐私保护的第一道防线。
7.3.1 笔记发现与同步
Anubis 钱包无法像 MetaMask 那样轻松地查询 eth_getBalance,因为所有账单都以加密方式存储在链上。
- 日志扫描:钱包连接到 RPC 节点,并从区块中提取 EncryptedNote 事件日志。
- 初步解密:系统尝试使用用户的查看密钥解密每条日志条目。由于使用了 ECDH 密钥交换协议,只有票据的合法接收者才能成功解密并获取金额和盲化因子。
- 状态检查:对于成功解密的笔记,钱包需要进一步查询完整节点的可空索引,以确认笔记的无效化符是否已被记录。只有未出现在可空索引中的笔记才处于有效且未花费的状态。
为了优化移动设备上的同步性能,Anubis 采用了布隆过滤器和模糊匹配标记机制,使轻量级客户端能够快速过滤掉 99% 的无关事务,从而大大降低带宽消耗。
7.3.2 隐蔽地址派生
为了确保接收者的隐私,发送者在构建交易时必须按照 EIP-5564 协议生成一次性隐蔽地址。

7.3.3 证明生成和委托
这是整个生命周期中计算量最大的部分。Anubis 使用 PLONK 证明系统,该系统在桌面端生成证明大约需要 1-3 秒,但在移动端可能需要 10 秒以上。为了解决移动设备上的性能瓶颈,Anubis 提供了一种委托证明机制。
- 本地生成:用户设备计算见证(包括诸如默克尔路径和私钥之类的私有输入)并生成使用证明者算法。这是最安全的模式。
- 委托生成:用户加密并将见证发送给可信的证明服务节点。
- 隐私权衡:用户必须向证明节点披露交易元数据(例如转账金额和收款人),但用户的支出私钥永远不会离开本地设备。即使证明节点恶意行事,也无法窃取资金,而只能泄露交易隐私。应用场景 适用于对延迟敏感但对单笔交易元数据隐私性要求不高的移动支付场景
7.3.4 票据合并
由于零知识电路的限制(通常将输入票据的数量限制为 2 或 4 个),当用户持有大量小额票据(例如挖矿奖励或多笔付款)并尝试进行大额转账时,SDK 会自动触发合并和收购操作。这可能需要连续生成多个证明,将多个小额票据合并为一个大额票据,然后执行最终转账。此过程对用户透明,但实际上会在整个交易生命周期中表现为一系列相互依赖的原子操作。
7.4 网络传播和中继机制
构建的交易是一个包含零知识证明的大型二进制对象。由于隐私交易的发起者通常没有公开披露的 ETH/ANB 余额来支付 gas 费(否则,他们会将自己的身份与 gas 费关联起来),因此必须引入中继者角色。
7.4.1 成本抽象和中继市场
Anubis 的隐私交易支持成本抽象。用户在交易的输出备注中指定要支付给中继器的费用(例如,5 ANB)。
- 广播:用户将其签名有效载荷(不包括 gas 支付信息)广播到 P2P 网络的中继池。
- 收到订单后:中继器会监控资金池,以验证 ZK 证明的有效性,以及费用票据是否足以支付当前的 Gas 成本加上利润。
- 打包:获胜的 Relayer 将用户的隐私有效载荷封装到标准的以太坊交易中,使用 Relayer 自己的 EOA 签名并支付 gas 费用。
- 链上:交易被打包到一个区块中。当智能合约执行时,手续费凭证的所有权将转移给中继器。
7.4.2 阈值加密内存池
为了防止 MEV(最大可提取价值)攻击和审查,Anubis 计划在 2.0 阶段引入阈值加密内存池。
- 机制:用户使用验证者委员会的聚合公钥对整个交易有效载荷进行加密。
- 排序:验证器在不知道交易内容的情况下对加密交易进行排序和打包。
- 解密和执行:只有在区块头得到共识确认后,验证者委员会才会协作发布解密私钥片段,解密并执行交易。
- 影响:这完全消除了“三明治攻击”和对特定隐私交易的审查,因为在交易变得不可逆转之前,没有人知道交易的内容(即使是 103 型中的公共呼叫部分也是加密的)。
- 0x0100 (VERIFY_PROOF)接收 PLONK 证明和公共输入。验证器执行双线性配对检查。如果检查失败,则整个交易回滚,并消耗 gas。
- 0x0103(NULLIFIER_CHECK)检查交易中声明的可空值是否已存在于全局 NullifierSet 中。这对于防止双重支付至关重要。与简单的布尔检查不同,此预编译合约还能处理并发交易中的可空值冲突。
- 验证阶段:
- 调用 VERIFY_PROOF 函数来验证零知识证明。该证明包括:用户拥有输入的备注,输入的总金额足以覆盖 publicAmountIn,以及空运算符的计算正确。
- 调用 NULLIFIER_CHECK 以确保输入的钞票尚未被使用。
- “虚拟”解锁:
- 系统从内存中删除输入的音符(逻辑上销毁它们)。
- 系统从隐私池合约中铸造指定数量的 publicAmountIn 代币(例如 USDC)到系统级临时账户。
- 要点:此临时帐户的地址是随机生成的,与用户的真实历史记录无关。
- 外部呼叫:
- 将 EVM 上下文切换到临时帐户。
- 执行调用(target,value,data)。例如,调用 Uniswap V3 执行换币操作。
- 由于这是一次标准的 EVM 调用,所有 DeFi 逻辑(滑点检查、转账、事件触发)都会正常执行。Uniswap 看到的 msg.sender 是一个临时账户。
- 再次阻止:
- 外部调用完成后,系统会检查临时账户中的令牌余额。
- 如果余额
publicAmountOut,系统会将这些代币转回隐私池合约进行锁定。 - 根据有效载荷中的承诺,系统将新生成的输出票据(代表通过交换获得的代币)插入到票据承诺树中。
- 状态:已提交
- 将输入笔记的空符号写入 NullifierSet,并将其永久标记为已使用。
- 更新 Notes 树的默克尔根。
- 如果在上述任何步骤中发生错误(例如,兑换失败或余额不足),则整个交易将原子性地回滚;不会记录无效符,并且票据状态将恢复。
- 回滚逻辑:智能合约维护最近 256 个区块的历史根节点和前沿节点快照。如果发生深度重组,则需要回滚逻辑来保护这些快照。
合约会自动从快照加载
舍弃其后插入的所有承诺。
- 客户端响应:检测到重组后,用户的钱包必须将受影响的“已确认”票据的状态重置为“待处理”或“无效”。如果用户已在分叉链上花费了票据,则重组后这些票据将恢复为“未花费”,允许用户重新发起交易。
- 隐私是一种基础设施:隐私计算费用设有上限,以确保用户即使在网络拥堵严重时期也能负担得起隐私交易。
- 验证成本补贴:协议资金可在必要时补贴验证成本,以维持隐私功能的可用性。
- 长期激励机制:隐私交易量越大,网络就越安全(匿名集越大),因此不应过度惩罚隐私用户。
- 签名验证:验证交易发起人的 ECDSA 签名(在 0 级交易中)或 Schnorr 签名(用于授权隐私交易中的 Note 支出)。
- 反垃圾邮件机制:防止恶意节点以极低的成本向 P2P 网络广播大量无效交易,从而消耗所有节点的验证带宽。
- 原生优化:预编译合约在其底层使用高度优化的 Rust 库(集成 Halo2 或 Arkworks 后端),并利用汇编级指令集(例如 AVX-512)来加速有限域算术运算。
- 成本固定:经过基准测试,我们对单个标准PLONK证明(约包含约)的验证成本进行了基准测试。约束条件)约为 50,000 Gas。该值会动态调整;协议治理层可以根据网络中所有验证节点的平均硬件性能来升级这些参数。
- 批量折扣:该协议支持聚合证明验证。如果一笔交易包含多个证明(例如复杂的 DeFi 组合操作),则后续证明验证的成本将降低,因为某些配对检查可以同时执行。
- 空值写入:对于每张已花费的 Note,其对应的空值标识符必须写入全局空值标识符集合,以防止重复花费。这相当于一次 SSTORE 操作,但由于空值标识符集合需要支持高频查询且永不被清理,因此其写入成本设置为 20,000 Gas。
- 承诺树插入:每次生成新的 Note 时,其承诺都必须插入到深度为 32 的 Merkle 树中。这涉及到计算从叶节点到根节点的哈希路径更新。为了优化性能,Anubis 使用类似于 Zcash 的增量式 Merkle 树算法,但在 gas 定价方面,我们对每次插入操作收取 30,000 Gas。这是为了反映在所有节点上维护海量 Merkle 树数据的长期存储负担。
这是针对标准 EVM 操作码和存储读/写操作的。目标是每个区块使用 15M 执行 Gas。
这是针对与隐私相关的预编译调用(例如 VERIFY_PROOF)和 Note 树更新而进行的。调优目标是每个数据块处理 500 次证明验证。
- 场景A:如果一个区块中充满了常规的以太坊交易,但没有隐私交易,将会崛起,并且将会减少。这鼓励用户在网络拥堵期间执行“资产屏蔽”,因为此时隐私保护操作相对便宜。
- 场景B:如果发生大规模隐私撤回(例如,交易聚合)。将迅速上升以抑制证明验证节点的负载,而正常的合约交互不会受到影响。与标准的以太坊交易类似,任何进入Anubis内存池的交易都必须支付固定的基础费用。该费用设定为21,000 Gas,用于支付以下成本:
- 上下文无关预验证: VERIFY_PROOF 预编译函数被设计为一个纯函数,独立于区块链状态(例如哪个账户调用它)。这意味着节点可以在交易进入内存池之前,利用空闲的 CPU 核心对证明进行并发的数学验证。只有通过数学验证的证明才能进入内存池排队。这利用了零知识证明的非对称特性:“验证成本低,伪造难度极高”。
- 惩罚性扣款:如果一笔交易通过了P2P层的预验证,但由于状态冲突(例如,无效化符已被花费)而未能被包含在区块中,协议仍将扣除全部金额。
这可以防止攻击者利用竞态条件。 - 验证器资源隔离:建议验证节点将EVM执行线程和ZK验证器线程进行物理隔离。即使ZK验证器队列已满,也不会阻塞区块生成和共识投票过程,从而确保网络活性。
7.5 链上执行和原子性保证
当验证者执行区块时,Anubis 独特的双层虚拟机架构便会发挥作用。执行虚拟机 (EVM) 通过预编译合约与底层隐私引擎交互,确保状态转换的原子性。
7.5.1 预先编制的合同的干预
Anubis EVM 注入了一组特定的预编译合约地址,用于处理昂贵的加密计算。这些预编译合约使用 Go/Rust 本地代码实现,从而绕过了 EVM 解释器的开销。
7.5.2 原子态转变过程
以最复杂的类型 103(隐私合约调用)为例,其链上执行流程如下:
7.5.3 跨层一致性
Anubis 必须保证公共状态(账户余额)和私有状态(笔记树)之间的一致性。在任何给定时间,锁定在隐私池合约中的代币总数必须等于所有有效隐私笔记的总和。这种不变性通过电路约束和合约逻辑来强制执行:

7.6 状态同步和最终性
隐私区块链中的状态同步比普通区块链更具挑战性,因为状态树是加密的且规模庞大。
7.6.1 仅添加树和边界
票据承诺树是一棵深度为 32 的默克尔树。为了高效更新,链上仅存储树的边界(即最右侧路径上的节点集合)。这使得可以在边界内插入新的叶子节点并计算新的根节点。
无需重建整个树,即可展现复杂性。

7.6.2 加工链重组
当发生分叉或重组时,以太坊只需要回滚账户余额,但阿努比斯必须回滚默克尔树状态。
7.7 气体模型和隐私计算的计量经济学
在Anubis协议的设计中,经济模型不仅是资源分配的手段,更是网络安全和抵御拒绝服务(DoS)攻击的第一道防线。由于Anubis采用了混合状态架构——同时维护传统的EVM账户状态树和隐私保护的UTXO票据承诺树——其计算资源消耗模式与传统的以太坊单维Gas模型显著不同。隐私交易涉及昂贵的加密运算(例如椭圆曲线配对、多标量乘法MSM)以及复杂的稀疏默克尔树(SMT)更新,因此需要引入更精细的多维Gas定价机制。
7.7.1 计算成本构成深入分析
ANUBIS的 gas 消耗模型旨在准确反映底层硬件资源的消耗情况,包括 CPU 周期、内存使用、磁盘 I/O 和网络带宽。我们将分析 gas 消耗情况。
隐私交易可以分解为以下四个核心组成部分。
隐私交易可以分解为以下四个核心组成部分。
1. 基本交易成本(
)

与标准的以太坊交易类似,任何进入Anubis内存池的交易都必须支付固定的基础费用。该费用设定为21,000 Gas,用于支付以下成本:
2. 零知识证明验证成本(
)

这是隐私交易中最大的单一成本来源。在传统的EVM链上,使用Solidity编写的验证合约执行一次PLONK证明验证可能需要消耗超过30万Gas,这严重限制了隐私应用的可扩展性。Anubis通过引入原生预编译合约0x0100(VERIFY_PROOF)解决了这个问题。
3. 状态存储和更新成本(
)

Anubis 的两级状态模型意味着状态更新的成本也是双轨的。
4. 数据可用性成本(
)

隐私交易虽然会隐藏转账金额和地址,但加密后的票据必须发布到链上,以便接收方可以同步并解密。这些数据以 Calldata 的形式存储,遵循 EIP-2028 标准;非零字节消耗 16 Gas,零字节消耗 4 Gas。
7.7.2 双轨制天然气定价机制
为了避免隐私交易和常规 DeFi 交易在同一资源池中出现恶性竞争,Anubis 创新性地实施了双轨 gas 定价机制。该机制基于多维资源定价理论,承认“零知识证明验证能力”和“EVM 通用计算能力”是两种不能完全替代的网络资源。
机构设计原则
在一维 Gas 市场(例如以太坊主网)中,如果热门 NFT 项目的发行导致 Gas 价格飙升,即使是简单的交易也会变得极其昂贵。在 Anubis 网络中,我们不希望看到公共层的 DEX 交易拥堵导致隐私层交易成本的急剧增加,因为隐私的有效性依赖于匿名集的持续高频构建。
因此,区块头中维护着两个独立的 BaseFee:



由于 VERIFY_PROOF 的计算密集型特性,恶意攻击者可能会尝试发送大量失败的验证请求来耗尽节点的计算能力。Anubis 已在 P2P 网络层和内存池层实施了严格的防御措施:
