如何使用DAI稳定币的授权功能

  • BuildBear
  • 发布于 2022-12-22 19:14
  • 阅读 33

本文深入探讨了以太坊网络的Gas费用及DAI合约中的Permit功能,通过本地搭建示例展示了如何使用该功能,帮助开发者降低交易费用。文章也提供了代码示例及具体操作步骤,附带了图示和测试环境的设置,适合希望了解ERC20Token管理与Gas优化的开发者。

你已经知道,在以太坊网络(包括 Polygon、Arbitrum 和 Optimism)上执行交易需要 #Gas 费用。

什么是 Gas 和 Gas 费用? 请阅读这里: shorturl.at/nLWZ7

现在,当原生代币的价格“实惠”时,gas 费用的讨论并不多;然而,一旦原生代币的价格开始上涨,你的 Twitter 信息流中就会充满高昂 gas 费用的讨论。出于显而易见的原因。

除此之外,我们还有一个事实,即与某些智能合约进行交互,例如 Uniswap 路由合约(Uniswap 应用),用户必须进行 2 次交易:

  1. 首先是 approve 功能,以允许一个固定数量的代币可供其他智能合约在交易中使用;
  2. 其次是智能合约调用,这将调用 transferFrom

可以轻易猜出,这增加了进行交易的整体 gas 成本。

虽然业界已经解决了“高” gas 费用问题的多种方法,但本文只关注,可能是首个大规模实施的方案:DAI 智能合约的 Permit 功能。

如果你正在设计需要发行和管理 ERC20 代币的智能合约,建议将此功能设计到你的 ERC20 代币智能合约中。

虽然从理论上讲,我们可以写更多的内容,但我们只是展示 DAI 稳定币的智能合约中 Permit function 的用例。

让我们动手实践

(A) 本地设置

你可以从这里克隆教程存储库: Github,然后进入 eip-2612 文件夹。

(B) 安装

一旦代码在你的本地系统上设置好,你需要确保使用 npm iyarn install 安装所有依赖,这取决于你的个人偏好。

(C) 代码中发生了什么

第 1 行到第 17 行是直接的;第 19 行到第 21 行也是如此。

第 18 行: nonce

这不是任何钱包地址的 nonce。这是 DAI 合约独立维护的 nonce。原因:假设我给予一条签名消息,批准你的地址使用我的 DAI。这条信息由你使用,但不是一次,而是两次 → 这技术上算作“重复消费”,因此 DAI 智能合约维护了一个独立的 nonce

第 63 行: 消息签名。类型: _signTypedData

现在,DAI 遵循 EIP712 标准进行类型消息签名。我不会复杂化这一点(除非有人真的想讨论,那么请在下面的评论中提及)。简单而言,它是为了签署可以由智能合约“执行”的消息而需采用的标准,且在这种情况下是 DAI 智能合约。

如你所见,_signTypedData 需要 3 个参数:

  • domain: 想象一下这些是消息所针对的智能合约的详细信息
  • types: 定义消息各个项目的名称和类型
  • message: 字面上就是你想传递给智能合约的消息。

看到上述内容的实际应用

(a) 运行脚本: node scripts/sign.js

  • 是的,我不使用 Hardhat,因为我不需要。你可以仅使用 Ethers 完成这项工作。它只是生成签名。
  • 出于方便起见,我将 nonce 设置为合约返回的值。也就是说,它将自动根据合约中存储的值获取正确的 nonce。
  • 为了安全起见,我将截至日期设置为从当前 block.timestamp 起 15 秒。也就是说,这个签名必须在 生成后的 15 秒内 提交给智能合约。然后,我将故意在 15 秒内未能登记此签名并提交交易。它应该失败。

(b) 一旦在你的环境变量中运行后,你将在控制台中看到类似于下面的图片:

(c) 测试批准是否成功:

— 在 buildbear.io 上创建一个私有测试网络,从以太坊主网分叉。

— 首先从 BuildBear 水龙头获取一些代币到不同的账户中:

— 在我的私有测试网络浏览器中访问 DAI 智能合约:

— 使用 Permit 功能(在写入合约部分):📝

— 执行交易(显然是失败的交易):❌

— 通过访问交易的追踪来检查为什么失败:🤯

瞧!我能够看到交易内部发生了什么,而不仅仅是事务回退的原因。

尝试运行相同的脚本,但这次截至日期为 2 分钟,并重做所有步骤以进行成功的交易将导致:

显然,如果你注意到我从一个完全不同的账户提交了上述交易,这个账户可以被称为“中继者”。该账户支付了提交到区块链的 gas 费用,允许账户 0xD31950cD762281b9849c33bfa5CE9A42B756155 转移我的 DAI 代币。

证明:

关于如何在 DAI 合约中使用 Permit Function 的内容就是这些。

关于 BuildBear

BuildBear 为你提供一个私有测试节点,使测试过程顺畅高效。

要了解有关 BuildBear 的更多信息,请阅读这里 docs

这里 获取上述 Github 代码。👈

  • 原文链接: medium.com/buildbear/lea...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
BuildBear
BuildBear
https://medium.com/buildbear