一、调试模式
目前browser-solidity有两种常用的调试方式,一个是采用本地虚拟机调试模式,一个是连接到本地的私有链进行调试。
1.本地虚拟机调试模式
本地虚拟机调试,就是不连接任何一个节点,在内存虚拟出一个以太坊节点进行调试,优点是速度快,配置简单,缺点是因为只是虚拟调试,可能最后放到真正的区块链 节点上运行智能合约会和预想的结果不同。
首先在DEBUG环境设置中,选择JavaScript VM以设置本地虚拟调试模式。
智能合约代码编写好后,点击“Create”按钮部署智能合约到内存中,并进行调试,如果部署成功,会出现智能合约的函数运行按钮和参数输入框,然后就可以调试你的智能合约了。
运行函数后,会出现相应的交易数据,可以完成整个智能合约调试。
如果想逐步调试智能合约,那么选择小虫子图标,切换到逐步调试界面,即可实现单步运行智能合约,注意这里的单步运行不是指代码而是指智能合约编译后的OPCODE。
2.连接到本地私有链调试
连接到本地私有链调试,就是通过RPC接口,连接本地的以太坊节点,实际部署并调试智能合约,缺点是速度较慢,配置复杂,优点是能够真实运行智能合约,最大程度的防止出错,关于私有链的配置,请参考我原先发表的文章《区块链开发(一)搭建基于以太坊的私有链环境》。
首先在DEBUG环境设置中,选择Web3 Provider以设置本地虚拟调试模式,同时默认会给出一个连接地址为http://localhost:8545 ,如果你配置的私有链RPC端口修改了,记得要改成对应的端口
然后,切换到账号状态栏,此时显示的可用账号,应该都是你部署的私有链里面的账号,如果不是,说明没有成功连接私有链。可能的原因有两个,一是私有链提供的端口是用http访问,而browser-solidity的网页访问地址是https,解决的方法就是将browser-solidity访问地址改为http协议的地址即可http://ethereum.github.io/browser-solidity/ ;二是系统的时间没有和网络同步,使用windows系统自带的时间同步功能同步一下即可。
二、调试手段
1. 变量查看
(1)变量可设置为public address public withDrawAddress= 0x0;
(2)在rimix函数变量调试栏,点击变量同名按钮,即可查看当前值
2. 日志查看
(1)增加event事件的事件声明 event TransferWithDraw(uint balance);
(2)在要调用日志的地方,执行事件调用 TransferWithDraw(withDraw);
(3)执行函数时,remix在logs列,有TransferWithDraw日志输出语句
3 使用remix的Debug功能
(1)在remix右侧,点击执行要执行的函数
(2)查看remix下方,有执行结果输出
(3)点击remix下半部分的“Debug”按钮,在右侧弹出Debug工具栏
主要关心当前的调试步进,还有当前的变量值。
三、完整实例代码
1 | pragma solidity ^0.4.14; |
四、其他常见智能合约资源
下面一些例子网站去参考一些成熟的代码,方便快速迭代学习,常见的例子网站如下:
https://github.com/ethereum/wiki/wiki/Solidity-Collections
http://ether.fund/contracts/
https://github.com/chriseth/solidity-examples
https://github.com/ethereum/dapp-bin
https://github.com/fivedogit/solidity-baby-steps
http://dapps.ethercasts.com
http://ether.fund/contracts
开发框架
常用的有3个:
Truffle:说明书地址http://truffle.readthedocs.io/en/latest/
以太坊目前很流行的开发框架Truffle的说明书,这个框架比较流行。(主要推荐)Dapple:说明书地址http://dapple.readthedocs.io/en/master/
这个开发框架是在gitter chart上看到的,感觉用的人不多,先观察Meteor:说明书地址https://github.com/ethereum/wiki/wiki/Dapp-using-Meteor
这个开发框架是以太坊官方推荐的,写进了以太坊的官方wiki,值得学习,当然,以太坊官方经常转换方向,以后换别的也没准