原生交易断言如何强制执行交易的最终结果
以太坊基金会 Trillion Dollar Security 计划将盲签与交易不确定性视为用户体验风险,并探索原生交易断言作为下一步,与 Clear Signing 一起强制执行交易最终结果。文章解释有效签名为何不总保证预期结果,并讨论 EIP-7906 等设计与现有防御局限。
以太坊基金会 Trillion Dollar Security 计划将盲签(blind signing)与交易不确定性列为用户体验风险,并正在探索原生交易断言(native transaction assertions),作为与 Clear Signing 并列的下一步,用以强制执行交易的最终结果。文章指出,有效签名并不总能保证用户想要的结果,并讨论原生交易断言如何在现有防御失效处保护用户、其背后的设计选择,以及 EIP-7906(Transaction Assertions via State Diff Opcode)作为一种可能方案。
签名交易可能以两种方式出错。第一类是意图不匹配:Bybit 事件中,签名者授权替换 Safe 的实现合约;BadgerDAO 攻击中,用户授予攻击者花费其代币的权限;两者都因被入侵的前端提供了与用户认知不同的签名请求。第二类是结果不匹配:Aave 与 CoW 抵押品交换中,用户请求将约 5040 万美元的 aEthUSDT 换成 aEthAAVE,但 AAVE 流动性远不足以承接该规模。CoW 的 gas 上限在验证时拒绝了更复杂的报价,只剩约 329 aEthAAVE 的已验证报价;界面显示 99.9% 价格影响警告并要求用户确认可能损失全部价值,用户仍签名,最终收到价值约 36,000 美元的代币。
文章认为,上述三例都缺少一条独立于交易构建者、并在执行期间强制执行的结果状态可信规则:Bybit 的规则本应要求已批准的 Safe 实现保持不变;Badger 用户的规则本应只允许对已发布 Badger 合约的新代币授权;Aave 用户的规则本应设定独立于界面报价的最低可接受输出(在此类 solver 流程中,签名订单或 CoW 结算协议也必须要求该断言)。以太坊目前没有通用机制让链上代码检查交易产生的全部净状态变化和事件。签名只承诺请求的动作,包括目标、价值和 calldata;EVM 按交易执行时的合约代码和状态执行,这些可能自签名后已改变。代理实现可在执行前变更,交易排序也可改变调用遇到的状态,例如三明治攻击可在签名交易不变的情况下移动池子价格。
现有防御包括 Clear Signing、模拟、合约检查与钱包 guard。Clear Signing 向用户解释 calldata 请求的动作,但依赖准确解码及签名者识别出该动作与意图不同;模拟用选定链状态预测交易效果,但链状态可能在打包前改变,且签名交易可能与模拟交易不同。Radiant Capital 案例中,钱包界面和模拟都显示预期交易,但签名者机器上的恶意软件在签名时替换了恶意 payload。Uniswap 会在输出低于 amountOutMinimum 时回滚交换;Safe 的 checkAfterExecution hook 允许 guard 在执行后检查账户状态,并对违反所有者或配置规则的交易回滚。但二者都必须预先选择要检查的状态,读取其他合约存储依赖其暴露的函数;代币的 balanceOf 便于余额检查,代理却不必通过函数暴露实现地址,没有该接口 guard 无法直接读取实现 slot,也无法询问 EVM 还有哪些变化。
原生交易断言将允许链上代码在交易动作执行后检查完整的净状态变化。断言使用只读逻辑,将起始值与最终值同规则比较;若规则失败,动作回滚。规则被包含在交易中,并随动作一起签名,可覆盖余额净变化等内容。原文在此处截断,未完整说明断言可覆盖的全部范围、EIP-7906 的完整设计、实施时间或是否已部署;这些属于待核实点。
来源说明:本文依据 Ethereum Foundation Blog 公开页面整理,未复制原文全文。
原文链接:https://blog.ethereum.org/en/2026/10/05/transaction-assertions
请结合原文核实信息和上下文。
访问原文 ↗最近更新:2026-10-06