以太坊主网上测试工具推荐

语言: CN / TW / HK

当我们与多个 DEFI 协议交互时,往往只能在主网上测试,我们应该怎么做呢?

现在是2022年。为应对covid-19经济衰退而采取的量化宽松政策已导致 眼镜蛇效应 .全世界已经陷入了更严重的衰退。传统金融已经一去不复返了,而以太坊则是新金融科技革命的唯一希望,即这场革命可以使世界摆脱这场经济噩梦。

而你是一个才华横溢且有抱负的开发人员,希望创建下一个革命性的金融应用程序,这将有助于拯救我们所有人并恢复和平。你知道你的应用程序需要与主网上已建立的协议进行交互,例如Uniswap(交易所),Compound/Aave(借/贷),Nexus Mutual(保险)等。你想要快速构建它。

唯一的问题是,你不知道从哪里开始,并且你有很多问题:

  • 你如何编写合约?
  • 你如何测试合约?
  • 你如何与 其他协议交互
  • 你如何调试交易?

好吧,幸运的是,亲爱的有抱负的开发人员,我花费了8个月的投入到这个领域,专门为你准备了这篇文章。

免责声明: 本文是对我“非常”个人的经验的总结。

智能合约框架

如果你的目标是快速交付高质量代码,则 Dapp.tools 是你应该选择的工具。如果你想进行更深入的探讨,我也写过 单独文章 ,。

但是,如果你希望使用其他框架,则我建议按以下顺序选择:

在沙盒环境中进行测试

对我来说,我发现的最高效测试设置是使用EVM实现而不是实际的测试网运行代码。这样,我可以测试逻辑,而无需等待交易出块。仅此一项就极大地提高了我们的迭代速度。

如果你想进行确定性测试(不会在星期二通过,而星期五失败),我强烈建议你使用 dapp.tools .其背后使用 hevm ,这是 Haskell 的EVM实现

使用Haskell编写的EVM(而不是Python或JS)可以立即提供更严格的保证。如果失败,则可能与你的代码有关,而不是与EVM的实现有关。

其他EVM实现包括:

协议交互

在真实的产品中进行测试 - Andre Cronje

忽略所有其他网络,例如Rinkeby,Kovan或Goerli。你唯一需要关注的应该是主网,网络ID为1。

如果你正在与多个协议(例如OneInch,Curve,Uniswap,Aave,Compound等)进行交互,则很有可能。并非所有协议都将部署到同一测试网中。但是有100%的可能性将它们都部署在主网上。因此,你需要将主网用作测试网。

在流行的EVM实现中,例如 hevm , buidler-evm ,和 ganache-cli ,有一个选项可以 从主网 fork . 可以检索主网状态(即Uniswap上的流动性),并在本地沙盒环境中针对该状态运行测试。

我在后台使用 ganache-cli 缓存数据,然后再将其发送到hevm。这样可以大大减少测试时间,尤其是当测试需要与主网协议进行大量交互时

调试失败的交易

在沙箱中

如果你使用的是 dapp.tools , buidler ,或 brownie ,那应该恭喜你,他们已经将日志记录和堆栈跟踪内置到了测试框架本身( dapp.tools-v ),调试合约应该快速简单。

hevm 堆栈跟踪

但是,如果你使用的是 ganache-cli 的框架。那就得放慢你脚步,去放置revert消息,以找出问题所在。

有一些人会说,ganache-cli有一个 debugger 。我很清楚并且已经使用过它,但是由于花费了很多时间和精力,最终还是回到了使用revert消息。

在主网上

哇,在主网上失败的交易,我该如何调试? Ethtx.infobloxy.info 提供了有关指定交易哈希的详细堆栈跟踪(我怀疑它背后使用的是openethereum的[debug_tracetransaction](https://geth.ethereum.org/docs/rpc/ns-debug #debug_tracetransaction)。

ethtx.info堆栈跟踪示例

有用的链接

结论

dapp.tools 很不错。

本翻译由 Cell Network 赞助支持。

现在是2022年。为应对covid-19经济衰退而采取的量化宽松政策已导致 眼镜蛇效应 .全世界已经陷入了更严重的衰退。传统金融已经一去不复返了,而以太坊则是新金融科技革命的唯一希望,即这场革命可以使世界摆脱这场经济噩梦。

而你是一个才华横溢且有抱负的开发人员,希望创建下一个革命性的金融应用程序,这将有助于拯救我们所有人并恢复和平。你知道你的应用程序需要与主网上已建立的协议进行交互,例如Uniswap(交易所),Compound/Aave(借/贷),Nexus Mutual(保险)等。你想要快速构建它。

唯一的问题是,你不知道从哪里开始,并且你有很多问题:

  • 你如何编写合约?
  • 你如何测试合约?
  • 你如何与 其他协议交互
  • 你如何调试交易?

好吧,幸运的是,亲爱的有抱负的开发人员,我花费了8个月的投入到这个领域,专门为你准备了这篇文章。

免责声明: 本文是对我“非常”个人的经验的总结。

智能合约框架

如果你的目标是快速交付高质量代码,则 Dapp.tools 是你应该选择的工具。如果你想进行更深入的探讨,我也写过 单独文章 ,。

但是,如果你希望使用其他框架,则我建议按以下顺序选择:

在沙盒环境中进行测试

对我来说,我发现的最高效测试设置是使用EVM实现而不是实际的测试网运行代码。这样,我可以测试逻辑,而无需等待交易出块。仅此一项就极大地提高了我们的迭代速度。

如果你想进行确定性测试(不会在星期二通过,而星期五失败),我强烈建议你使用 dapp.tools .其背后使用 hevm ,这是 Haskell 的EVM实现

使用Haskell编写的EVM(而不是Python或JS)可以立即提供更严格的保证。如果失败,则可能与你的代码有关,而不是与EVM的实现有关。

其他EVM实现包括:

协议交互

在真实的产品中进行测试 - Andre Cronje

忽略所有其他网络,例如Rinkeby,Kovan或Goerli。你唯一需要关注的应该是主网,网络ID为1。

如果你正在与多个协议(例如OneInch,Curve,Uniswap,Aave,Compound等)进行交互,则很有可能。并非所有协议都将部署到同一测试网中。但是有100%的可能性将它们都部署在主网上。因此,你需要将主网用作测试网。

在流行的EVM实现中,例如 hevm , buidler-evm ,和 ganache-cli ,有一个选项可以 从主网 fork . 可以检索主网状态(即Uniswap上的流动性),并在本地沙盒环境中针对该状态运行测试。

我在后台使用 ganache-cli 缓存数据,然后再将其发送到hevm。这样可以大大减少测试时间,尤其是当测试需要与主网协议进行大量交互时

调试失败的交易

在沙箱中

如果你使用的是 dapp.tools , buidler ,或 brownie ,那应该恭喜你,他们已经将日志记录和堆栈跟踪内置到了测试框架本身( dapp.tools-v ),调试合约应该快速简单。

hevm 堆栈跟踪

但是,如果你使用的是 ganache-cli 的框架。那就得放慢你脚步,去放置revert消息,以找出问题所在。

有一些人会说,ganache-cli有一个 debugger 。我很清楚并且已经使用过它,但是由于花费了很多时间和精力,最终还是回到了使用revert消息。

在主网上

哇,在主网上失败的交易,我该如何调试? Ethtx.infobloxy.info 提供了有关指定交易哈希的详细堆栈跟踪(我怀疑它背后使用的是openethereum的[debug_tracetransaction]( https://geth.ethereum.org/docs/rpc/ns-debug #debug_tracetransaction)。

ethtx.info堆栈跟踪示例

有用的链接

结论

dapp.tools 很不错。

本翻译由 Cell Network 赞助支持。

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 26分钟前
  • 阅读 ( 7 )
  • 学分 ( 0 )
  • 分类:以太坊
分享到: