ERC-2771如何还原调用者? 图 1
ERC-2771如何还原调用者? · 图 1

ERC-2771让接收合约从可信转发器附加的calldata中恢复原始发送者。本文说明isTrustedForwarder、msg.data尾部解析、升级权限和伪造调用者风险。

接收合约只能在msg.sender通过isTrustedForwarder时解析calldata末尾20字节,否则普通调用应保持原始msg.sender语义。 本文直接围绕ERC-2771可信转发器的规范字段、调用样例和失败分支展开;示例中的地址、区块和数值仅用于说明格式,实际操作必须替换成目标网络的原始数据。

什么时候才读取 calldata 后 20 字节

ERC-2771接收合约通过isTrustedForwarder判断转发器,再从calldata末尾20字节提取原始发送者。 只有 msg.sender 已通过 isTrustedForwarder 时,接收合约才从 calldata 尾部取原始发送者。普通 EOA 或其他合约直接调用时必须保留真实 msg.sender;否则攻击者只需在任意 calldata 后拼接地址就能冒充用户。

接收合约只能在msg.sender通过isTrustedForwarder时解析calldata末尾20字节,否则普通调用应保持原始msg.sender语义。 ERC-2771可信转发器的判断应绑定确定的区块、Slot或本地快照。若查询期间链头继续前进,前后两次响应必须标注各自状态点,不能拼成一份证据。

普通调用与转发调用的分叉

先让第二位复核者重放这个最小示例:

sender = isTrustedForwarder(msg.sender) && msg.data.length >= 20 ? address(bytes20(msg.data[msg.data.length-20:])) : msg.sender;

只有来自受信转发器的调用才能改写消息发送者语义;对普通调用仍应使用真实msg.sender。 实现检查包含短calldata拒绝、受信地址管理、_msgSender与_msgData覆盖、代理升级路径和撤销转发器后的回归测试。 集成测试至少包含四例:受信转发器带合法后缀、受信转发器缺后缀、陌生合约伪造后缀、普通函数的原始 calldata。每例都同时检查 _msgSender()_msgData(),防止业务解码仍把附加 20 字节当参数。

可信转发器检查伪代码

审计记录要列出所有受信转发器地址、代码哈希、管理员、变更事件、签名协议、nonce存储和目标链配置。

ERC-2771可信转发器威胁面观察证据处置
身份伪造调用者、签名域或转发来源身份链不完整即拒绝
参数替换原始载荷与链上回读不一致冻结动作并重新构造
重放或重入nonce、状态锁与重复事件阻断第二次状态变化
实现漂移代码哈希、版本或权限改变旧结论失效并重审

为ERC-2771可信转发器制作机器可读快照后,再生成面向人的摘要。摘要只引用快照字段,不允许增加原响应无法支持的“安全”“完成”等词。

升级权限为何决定伪造风险

若合约错误信任恶意转发器,对方可以伪造任意原始发送者,因此转发器配置和升级权限是核心安全边界。 一旦错误信任恶意或被接管的转发器,对方就能附加任意地址伪造业务调用者,绕过基于身份的授权判断。

ERC-2771不规定转发器怎样验签、管理 nonce 或收取 Gas。若转发器可升级,管理员密钥和实现变更等同于身份边界;若接收合约信任列表可被任意修改,所有权限函数都可能被伪造调用。审计必须追到转发器协议本身。

当前仍需确认的实现变量是:签名格式、nonce、费用赞助和重放保护由具体转发器协议负责,不由ERC-2771接收接口统一保证。 因此上线记录必须注明实际客户端、合约代码或中间件版本。

复核 ERC-2771可信转发器 时保存什么

审计记录要列出所有受信转发器地址、代码哈希、管理员、变更事件、签名协议、nonce存储和目标链配置。

ERC-2771可信转发器的审计日志要防止事后覆盖,并设置可解释的保留周期。外部链接可以失效,因此关键规范版本和摘要也应随记录归档。 对ERC-2771可信转发器的空值、过期值和错误环境分别采样,三类结果不能压缩成同一个“失败”标签。

ERC-2771可信转发器的一级资料与适用边界

  1. ERC-2771:在ERC-2771可信转发器核验中支持定义、接口、当前规范字段和主流程;本文访问日期为2026年7月24日。
  2. ERC-2771 source:在ERC-2771可信转发器核验中支持实现来源、边界条件、版本或交叉验证;本文访问日期为2026年7月24日。

转发器可信只覆盖调用上下文,不证明签名界面和业务合约安全;本文仅做防御分析,不构成投资建议。 关于ERC-2771可信转发器的结论只对记录中的网络、版本和状态点有效;一级规范与代码镜像来自同一规范体系,镜像用于核对版本,不视为独立事实来源。

与ERC-2771可信转发器配套的延伸阅读:Watchtower离线保护描述符安全检查钓鱼网站识别