这篇文章上次修改于 643 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

用 ERC20 token 支付 gas

![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3088661f-b8f9-4228-b490-f431d7857a4a/Untitled.png)

2023-02-11T06:51:41.png

1 Biconomy Relayer

是支付 gas 的第三方。

meta tx 不直接发送到区块链,而是发送元交易到第三方 Relayer,该第三方支付 gas。

2 ERC20Fowarder

合约代码

  • 存储用来计算费用的其它合约的地址,包括 FeeManager 和 Oracle Aggregator。其中,FeeManager 是给 token 一个费用乘数,Oracle Aggregator 用来获得 token 价格。
  • 在执行成功后向用户收费。调用特定 ERC20 token 的 transferFrom 方法 -- 向用户收费。
  • 用户的 gas 会被转到 feeReceiver 地址,该地址是部署 ERC20Forwarder 合约的 owner,Biconomy 拥有 feeReceiver 地址。

3 Fee Manager

合约代码

该合约为负责为 user/token 组合给定一个费用乘数 -- getFeeMultipiler(address user, address token)。费用乘数本身是是在基础 tokenGasPrice 设置加价的方式。

Biconomy 的默认实现是 CentralizedFeeManager.sol,然而,任何实现 IFeeManager.sol 的合约都可以作为费用管理器。这为定制打开了大门。

费用乘数可以在 0 和 6.5535 之间-表示为从 0 到 65535 的 uint16 基点。然而,对于未来的定制选项,我们可能会规定最小值 >1。

4 Oracle Aggregator

合约代码

不同的 token 有不同的流动性和经济,这将影响我们获取他们价格数据的方式。

对于流行的 token,比如 Dai 和 USDC,可以使用 Chainlink 的价格源。对于更多具有 AMM 流动性的代币,使用 Uniswap TWAP 价格源。可能需要一些代币的完全定制安排,比如,定价数据来自另一个 DeFi 协议。

5 BiconomyForwarder (Trusted Forwarder)

合约代码

  • 验证签名
  • 将用户的地址添加到 call data
  • 用户合约仅依赖 forwarder 保证安全性

6 DApp Smart Contract

用户的合约,获取原始 sender 并执行原始 tx

需要兼容 ERC-2771 标准

参考

Forward - Enable Paying Gas in ERC20

Moving Forward, save your ETH. Pay gas in ERC20 tokens.

metatx-standard