22

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

 3 years ago
source link: https://learnblockchain.cn/article/1624
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

当我们与多个 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 ),调试合约应该快速简单。

JfqMnqR.png!mobile

hevm 堆栈跟踪

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

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

在主网上

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

YneUrum.png!mobile

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 ),调试合约应该快速简单。

JfqMnqR.png!mobile

hevm 堆栈跟踪

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

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

在主网上

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

YneUrum.png!mobile

ethtx.info堆栈跟踪示例

有用的链接

结论

dapp.tools 很不错。

本翻译由 Cell Network 赞助支持。

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

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK