【本文目標】 本文目標是指導如何使用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
做爲例子,運行「donate」函數後,點擊終端輸出器對應LOG的Detail按鈕展開交易信息,複製hash信息值輸入編輯框,點擊PLAY按鈕,便可進入Debug調試流程。 此效果等同於點擊交易信息的「Debug」按鈕。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語言官網中文版
尊重知識輸出,如需引用,敬請說明本文連接和做者-筆名輝哥。