对于一个新手来说,ta的Aha时刻来自于ta终于可以运行自己的第一行代码,我还记得我当年写的可以运行的“烂代码”的兴奋时刻。而当我利用自己的编程技能找到工作时,其中的一个Aha时刻来自于我学会了如何调试程序。调试程序占用工作的时间有时候会达到50%,面对着一堆代码逻辑就是不知道问题在哪里。而当我掌握了如何利用断点查看当前的变量和状态后,我的工作效率提升了一倍,bug变少了,幸福感提升了。

调试Solidity有一个很好的工具:Remix,通过这个链接可以进入到Remix的网站:http://remix.ethereum.org 。

代码编辑

智能合约 | 如何调试Solidity-Rebase


之后我们可以把Solidity代码放到编辑器中,上图中可以看到最左侧的行数旁边有警告/错误提示,把鼠标放到上面会有具体的信息提示,根据提示修改代码就可以消除错误信息了。修改后的示例代码可以在这里获取:https://gist.github.com/luckyyang/8edc58ad647f35424823448ea4404f8d 。

合约编译

之后我们可以选择对应的编译器版本,示例代码中的版本是0.4.25,然后就可以编译了,看到绿色的提示表明编译成功。编译的主要工作是生成ABIbytecode,本文不做阐述。

智能合约 | 如何调试Solidity-Rebase


合约部署

编译成功后,就可以切换到Run标签进行合约的部署了,这里我们可以选择EnvironmentJavaScript VM,直接在浏览器中运行一个虚拟的区块链网络,这样就不用我们使用Mistganache-cli这类的工具再去运行区块链网络了。

智能合约 | 如何调试Solidity-Rebase


如上图所示,选择JavaScript VM后,会自动帮我们生成5个Account,每个Account中有100个Ether,足够我们开发使用了。

智能合约 | 如何调试Solidity-Rebase


如上图所示,点击Deploy按钮后就可以部署合约了,部署成功后会自动显示合约的信息。点击合约会显示所有的变量和方法。

合约交互

智能合约 | 如何调试Solidity-Rebase


如上图所示,红色表示此类方法会修改合约的状态,也表明了需要消耗gas;青色表示此类方法的作用是获取信息,不会修改合约的状态。点击具体的方法名字就可以和合约进行交互了。

合约调试

智能合约 | 如何调试Solidity-Rebase


如上图所示,同时与合约交互的transaction也会显示到代码区下面的区域。点击Debug按钮会跳转到Debugger界面(下图),不但可以进行单步调试,还可以看到合约中更具体的信息,如变量和合约状态等。


智能合约 | 如何调试Solidity-Rebase


总结

利用Remix可以很方便的对Solidity进行编辑,部署和调试,各位Solidity开发者赶快用起来吧。


原文始发于微信公众号(Rebase社区):智能合约 | 如何调试Solidity