
代付的基本含义
区块链代付通常指由其他主体承担用户操作产生的链上手续费。本文讨论以太坊及 ERC-2771 元交易机制:用户签署操作请求,中继者提交链上交易并支付执行费用。理解这套机制,需要分别看待操作授权、交易提交和费用承担。
Gas 与费用参数
以太坊开发文档将 Gas 定义为执行操作所需计算量的计量单位。Gas fee 是费用,按实际消耗的 Gas 与实际每单位价格计算,以 ETH 支付;gwei 是 ETH 的计价单位。Gas limit 限制执行可消耗的 Gas 数量,base fee 是协议确定的基础费用,priority fee 是优先费,maxFeePerGas 是每单位 Gas 的费用上限。

这些术语分别描述资源数量和资源单价。代付改变费用承担者,操作本身仍消耗网络资源;提高数量上限也不代表一定消耗全部额度。

元交易、中继者与可信转发器
OpenZeppelin 的元交易文档描述了 ERC-2771 的角色分工:用户在链下签署请求,Relayer(中继者)负责提交,Forwarder(转发器)验证并转发,目标合约通过可信转发器提供的上下文识别原始用户。
中继者负责把请求送上链,转发器负责链上处理。目标合约看到的直接调用者可能是转发器,因此需要通过兼容的身份解析机制识别签名用户,才能正确执行权限判断。
签名请求中的术语
在上述转发器实现中,from 表示授权用户,to 表示目标合约,data 表示调用内容,value 表示随调用附带的原生币数量,gas 表示目标调用的 Gas 限额。nonce 用于区分请求并防止重复执行,deadline 规定请求的有效期限。
value 与手续费是不同概念:前者属于调用附带的资金,后者属于网络执行成本。请求中的 gas 也不能直接视为整笔代付交易的全部消耗,因为验证和转发同样需要执行。
适用条件与常见问题
任意合约都能直接接受这种代付吗?ERC-2771 路径要求目标合约支持相应上下文机制,并信任指定转发器。用户签名授权的是具体请求,签名本身不代表目标操作已经完成。
代付是否等于免费?它可以让用户无需直接支付链上手续费,但成本仍由中继者等主体承担,是否另有收费取决于服务安排。
失败是否仍有费用?已经上链并执行的交易,即使回退,也可能消耗 Gas;执行中耗尽 Gas 与入块前被拒绝需要区分。核验成功与否,应分别查看外层交易状态和目标操作结果。