【本文目标】 本文目标是指导如何使用REMIX完成一次智能合约交易调试。 【前置条件】 学习过Solidity语言,须要进行调试。 【技术收获】 1). 使用REMIX进行单步调试 2). REMIX的Debugger界面介绍html
【实操课程列表】 第一课 如何在WINDOWS环境下搭建以太坊开发环境 第二课 如何实现以太坊最简智能合约“Hello World”的运行 第四课 以太坊开发框架Truffle从入门到实战 第六课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例) 第七课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易 第八课 如何调试以太坊官网的智能合约众筹案例 第九课 如何在Remix环境下进行Solidity代码单步调试 第十课 Solidity语言编辑器REMIX指导大全bash
【说明】未列出的课程为知识普及的非实操类课程,全部区块链文章参考“区块链入口”专栏。框架
REMIX有2种方式启动调试。 新建一个智能合约文件”Donation.sol”,复制如下代码:编辑器
contract Donation {
address owner;
event fundMoved(address _to, uint _amount);
modifier onlyowner { if (msg.sender == owner) _; }
address[] _giver;
uint[] _values;
function Donation() {
owner = msg.sender;
}
function donate() payable {
addGiver(msg.value);
}
function moveFund(address _to, uint _amount) onlyowner {
uint balance = this.balance;
uint amount = _amount;
if (_amount <= this.balance) {
if (_to.send(_amount)) {
fundMoved(_to, _amount);
} else {
throw;
}
} else {
throw;
}
}
function addGiver(uint _amount) internal {
_giver.push(msg.sender);
_values.push(_amount);
}
}
复制代码
RUN运行环境选择JavaScript VM ,它用于模拟客户自定义环境,开始点击Create按钮执行智能合约:函数
设置´value´的值为10,单位选择ether,点击Donate 表示从当前帐号捐赠10个ETH给该智能合约。学习
Remix显示交易相关的一些信息。在终端输出器,这次交易被记录,点击”Debug”按钮可开始调试。区块链
在”Debugger”控制面板进入,在对应的编辑框输入transaction hash / block number、transaction index信息也能够开始会话。ui
Instructions面板显示当前高亮显示的运行合约的汇编语言。 注意:当该面板隐藏时,滑动条的运行粒度是一个course的,即便在多EVM环境构建,也只会在语法边界中止;当该面板显示时,才可能逐步进入到构建函数内部,即便对应相同的语句。this
导航栏的5,7按钮按钮用于回滚到前一个断点和执行到下一个断点。 在左侧编辑框的行数处单击便可增长和删除断点。 做为样例,在18行和20行双击,设置2个断点,在Run面板的moveFund输入框内输入参数,给第二个帐号转移0.0005个ETH。点击”MoveFund”执行该交易函数。spa
"0x14723a09acff6d2a60dcdf7aa4aff308fddc160c",500000000000000
合约交易执行成功后,点击终端输出器中的Debug按钮,点击调试面板的“Jump to the next breakpoint”程序会运行到第一个断点处。
再点击“Jump to the next breakpoint”按钮一次,直接运行到20行第二个断点处。 点击”Jump out”函数跳出该函数,运行完成后能够看到第二个帐号余额发生了改变,增长了0.0005个ETH。 点击展开Detail,能够看到EVENT事件记录的参数信息。
REMIX在“Environment”采用“Injected WEB3”的方式下,切换帐号会致使智能合约呈现消失。 此时能够经过调用合约地址的方式把合约和命令复原回来。 例如我有一个部署在ropsten的智能合约,地址为"0xbb7695fe978176cbe86d27b9e2b4e9eff1a04f82",恢复方法以下图所示:记得输入合约地址框不要加"" 哦。
1),REMIX调试英文官网文档 2), SOLIDITY语言官网中文版
尊重知识输出,如需引用,敬请说明本文连接和做者-笔名辉哥。