免 Gas 使用合约的早期网络账:ERC-1613 加油站网络的押金与罚没
“这个 dApp 用起来不用自己付 Gas”——这个体验在智能账户流行之前就有过一整套系统设计,ERC-1613 加油站网络。它允许合约接受“到付电话”,由合约方为进来的调用买单,文件头记录创建于 2018 年 11 月 18 日,仓库记录状态为 Draft。规范的核心不是某个合约,而是一张由押金维系的网络账本。
三方角色
系统的中心是 RelayHub:一个全体参与的 dApp 合约共同信任的单例。它维护活跃 relay 名单、居中转发 relay 与合约之间的通信、向合约提供可信版本的真实发送者与调用数据、保管 relay 交的质押金(有最低额度,退出要等冷静期),保管各合约预存的 Gas 款,并把作恶 relay 的质押判给提交证明的地址。规范同时强调:这个中心合约人人都能审计,系统其余部分是信任无关的。
Relay 节点也就是加油站:持一个小额热钱包付 Gas,对外开着公开接口,在 RelayHub 挂牌自己的价格——按真实交易成本乘一个系数——并运行每 6000 区块一次的心跳交易维持在册。监控其他 relay 的失败交易、抢着提交罚没证明这种活,任何人都可以干,不限于 relay。
RelayRecipient 是接单的 dApp 合约:知道自己的 RelayHub 地址并信任它提供的交易信息,在 RelayHub 预存一小笔 Gas 款,代码里用 getSender() 和 getMessageData() 替代原始的 msg.sender 与 msg.data。

闸门函数:返回零才收单
接不接这笔代付,由 acceptRelayedCall 说了算——这是一个视图函数,返回零表示愿意接受并付款,非零则交易被回滚。关键规则是:无论交易最终成功还是回滚,relay 只有在 acceptRelayedCall 返回零时才拿得到补偿。规范给的实现示例包括白名单成员、由 dApp 后端维护的信用卡充值账本(用户先法币充值、账本记欠额,dApp 永远不会被某个用户亏超过其充值额)、链下签名的 approval 凭证,以及带 Sybil 防护的匿名入门交易——后者要求配合 gasPrice 限制和受信 relay 白名单,防 relay 造假日交易吞预存款。前后还各挂一个钩子 preRelayedCall 与 postRelayedCall,默认什么都不做,供 dApp 按自己的方式向用户计费。
一笔交易的握手
用户从名单里挑 relay(可参考手续费、质押规模与锁定期、近期表现、自有声誉名单),把收件合约、调用数据、约定的费用与 gasPrice、当前 nonce、max_nonce 等打包签名,并核对收款方在 RelayHub 余额够付手续费、relay 钱包够付 Gas。relay 一侧先通过 RelayHub 的 canRelay 预检收款合约是否接单、nonce 是否匹配、各方余额是否充足,任何一项不过就回错误;通过则包一层自己签名付 Gas 提交。用户随即独立复核这笔包装交易(签名、nonce、余额、max_nonce),必要时自己再广播一次双保险,然后盯链——若 relay 用同一 nonce 塞了另一笔交易,用户可以经另一个 relay 调 penalizeRepeatedNonce:该函数验证攻击成立后没收作恶 relay 的质押,一半给提交证明的调用者,另一半直接发送到零地址烧掉。规范解释烧掉的理由很讲究:如果全部质押都判给举报者,作弊的 relay 完全可以安排自己的另一个地址来举报自己,等于左手倒右手、实际不受罚;烧掉一半让作弊在数学上必然净亏。举报成立后该 relay 被移出网络,代价是全部质押。
为什么它重要、又为何停在这里
这套“押金+预存款+可证明作恶罚没”的结构,后来在代付方、转发器、账户抽象的各种方案里反复出现,ERC-1613 是把它完整写清楚的最早文本之一。对使用者,它提醒一个常识:免 Gas 不等于无成本,也不等于无信任——费用改由合约方垫付或摊进别处,代付通道自己的激励与罚没规则才是安全来源。仓库状态 Draft 意味着它仍是提案而非定稿,且整个设计早于今天的智能账户体系;读它时,把“机制设计”与“当前该用哪套”分开,才不会拿旧地图找新路。本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。