本文深入探讨了以太坊网络的Gas费用及DAI合约中的Permit功能,通过本地搭建示例展示了如何使用该功能,帮助开发者降低交易费用。文章也提供了代码示例及具体操作步骤,附带了图示和测试环境的设置,适合希望了解ERC20Token管理与Gas优化的开发者。
你已经知道,在以太坊网络(包括 Polygon、Arbitrum 和 Optimism)上执行交易需要 #Gas 费用。
什么是 Gas 和 Gas 费用? 请阅读这里: shorturl.at/nLWZ7
现在,当原生代币的价格“实惠”时,gas 费用的讨论并不多;然而,一旦原生代币的价格开始上涨,你的 Twitter 信息流中就会充满高昂 gas 费用的讨论。出于显而易见的原因。
除此之外,我们还有一个事实,即与某些智能合约进行交互,例如 Uniswap 路由合约(Uniswap 应用),用户必须进行 2 次交易:
approve
功能,以允许一个固定数量的代币可供其他智能合约在交易中使用; transferFrom
。可以轻易猜出,这增加了进行交易的整体 gas 成本。
虽然业界已经解决了“高” gas 费用问题的多种方法,但本文只关注,可能是首个大规模实施的方案:DAI 智能合约的 Permit 功能。
如果你正在设计需要发行和管理 ERC20 代币的智能合约,建议将此功能设计到你的 ERC20 代币智能合约中。
虽然从理论上讲,我们可以写更多的内容,但我们只是展示 DAI 稳定币的智能合约中 Permit function
的用例。
(A) 本地设置
你可以从这里克隆教程存储库: Github,然后进入 eip-2612 文件夹。
(B) 安装
一旦代码在你的本地系统上设置好,你需要确保使用 npm i
或 yarn install
安装所有依赖,这取决于你的个人偏好。
(C) 代码中发生了什么
第 1 行到第 17 行是直接的;第 19 行到第 21 行也是如此。
第 18 行: nonce
这不是任何钱包地址的 nonce。这是 DAI 合约独立维护的 nonce。原因:假设我给予一条签名消息,批准你的地址使用我的 DAI。这条信息由你使用,但不是一次,而是两次 → 这技术上算作“重复消费”,因此 DAI 智能合约维护了一个独立的 nonce
。
第 63 行: 消息签名。类型: _signTypedData
现在,DAI 遵循 EIP712 标准进行类型消息签名。我不会复杂化这一点(除非有人真的想讨论,那么请在下面的评论中提及)。简单而言,它是为了签署可以由智能合约“执行”的消息而需采用的标准,且在这种情况下是 DAI 智能合约。
如你所见,_signTypedData
需要 3 个参数:
(a) 运行脚本: node scripts/sign.js
(b) 一旦在你的环境变量中运行后,你将在控制台中看到类似于下面的图片:
(c) 测试批准是否成功:
— 在 buildbear.io 上创建一个私有测试网络,从以太坊主网分叉。
— 首先从 BuildBear 水龙头获取一些代币到不同的账户中:
— 在我的私有测试网络浏览器中访问 DAI 智能合约:
— 使用 Permit 功能(在写入合约部分):📝
— 执行交易(显然是失败的交易):❌
— 通过访问交易的追踪来检查为什么失败:🤯
瞧!我能够看到交易内部发生了什么,而不仅仅是事务回退的原因。
尝试运行相同的脚本,但这次截至日期为 2 分钟,并重做所有步骤以进行成功的交易将导致:
显然,如果你注意到我从一个完全不同的账户提交了上述交易,这个账户可以被称为“中继者”。该账户支付了提交到区块链的 gas 费用,允许账户 0xD31950cD762281b9849c33bfa5CE9A42B756155
转移我的 DAI 代币。
证明:
关于如何在 DAI 合约中使用 Permit Function
的内容就是这些。
关于 BuildBear
BuildBear 为你提供一个私有测试节点,使测试过程顺畅高效。
要了解有关 BuildBear 的更多信息,请阅读这里 docs
从 这里 获取上述 Github 代码。👈
- 原文链接: medium.com/buildbear/lea...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!