1. 文章摘要
【本文目標】
本文翻譯和實踐語言編輯器REMIX官網幫助文檔,但并不拘泥于逐字翻譯,而時根據實踐用中文語言講透編輯器相關功能 。
【前置條件】
了解以太坊ETH和語言 。
【技術收獲】
1). 使用REMIX編輯器進行語言編程ubuntu下相關服務器的搭建,編譯,運行,調試 。
2). REMIX界面介紹
【實操課程列表】
第一課 如何在環境下搭建以太坊開發環境
第二課 如何實現以太坊最簡智能合約“Hello World”的運行
第四課 以太坊開發框架從入門到實戰
第六課 技術小白如何開發一個DAPP區塊鏈應用(以寵物商店為例)
第七課 技術小白如何在45分鐘內發行通證(TOKEN)并上線交易
第八課 如何調試以太坊官網的智能合約眾籌案例
第九課 如何在Remix環境下進行代碼單步調試
第十課 語言編輯器REMIX指導大全
【說明】未列出的課程為知識普及的非實操類課程,所有區塊鏈文章參考“區塊鏈入口”專欄 。
2. 使用REMIX編輯器執行”HELLO WORLD”的智能合約
REMIX是一個智能合約編程語言的集成開發環境 。
最簡單的入門就是進行”HELLO WORLD”的程序運行 。
2.1 智能合約編譯
在瀏覽器上點擊鏈接REMIX官網瀏覽器版編輯器即可打開REMIX編輯器 。部分不能正常訪問官網的,可以訪問筆者的國內REMIX編輯器 。
新增一個命名為“.sol”的文件,復制以下代碼:
pragma solidity ^0.4.17;contract Hello { address creator;string greeting;function Hello(string _greeting) public{ creator = msg.sender; greeting = _greeting; }function greet() public constant returns (string){ return greeting; }function setGreeting(string _newgreeting) public { greeting = _newgreeting; }/********** Standard kill() function to recover funds**********/function kill() public {if (msg.sender == creator) suicide(creator); // kills this contract and sends remaining funds back to creator }}
點擊”Start to “按鈕 , 會得到一下結果:
0.智能合約編譯.png
除一些函數的告警提示外,結果表明該智能合約編譯成功 。
2.1.1 編譯告警
如果編寫的程序有告警,REMIX會有提示 。一般來說,提示不必修改 。
編譯告警
2.1.2 編譯錯誤
為了說明編譯錯誤案例 , 把該文件的第17行” ;”改為” ;”, 重新編譯,得到以下結果
編譯錯誤
如果編寫的程序存在語法錯誤,Remix編譯器會以粉紅色底色提示顯示錯誤原因,并在編輯器窗口提示位置 。
編譯錯誤演示完后,恢復第17行代碼為” ;”
2.1.3 詳情信息
點擊””按鈕,可以看到詳細信息 。其中部分的內容就是在案例《第二課 如何實現以太坊最簡智能合約“Hello World”的運行》中geth控制臺使用的編譯后代碼 。
的內容
2.2 智能合約運行
1. 創建智能合約
選擇“Run”的頁面,選擇環境為 VM,在“”按鈕前輸入框內輸入”Hello World!”[注意:輸入字符串一定要有英文雙引號] , 點擊“”按鈕 。
創建智能合約
2. 運行greet函數
點擊淺藍色函數”greet”按鈕,可以看到輸出結果為“Hello World!”
運行函數greet
說明:淺藍色按鈕函數表示該交易函數運行時不需要消耗GAS的 。3. 運行函數
在函數按鈕的輸入框輸入內容”Hello !”, 運行后在點擊執行”greet”函數,發現該函數的輸出內容已變為”Hello !”了,說明執行正常 。
運行函數
說明:粉紅色按鈕函數表示該交易函數運行時是需要消耗GAS的 。3. REMIX界面詳解
第2章以“Hello World”為例,介紹了REMIX集成環境的基本使用方法 。本章介紹REMIX編輯器的詳細功能描述 。
3.1 REMIX集成環境概述
REMIX是一個智能合約編程語言的集成開發環境,它集成了一個調試器和測試環境 。
如果你對以下內容感興趣,REMIX是一個不錯的學習方式:
1,開發智能合約(REMIX集成了編輯器)
2,調試智能合約
3 , 獲取已運行合約的狀態和屬性
4,調試已經提交的合約
5,分析代碼 , 以便減少編碼錯誤和加強最佳實踐
6,配合Mist(或者任何植入web3的工具),REMIX可用于測試和調試DAPP分布式程序 。(參考鏈接 a Dapp using Remix – Mist – Geth )
詳解介紹使用的程序案例為”.sol”文件的代碼,完整代碼如下:
pragma solidity ^0.4.0;contract Ballot { struct Voter { uint weight; bool voted; uint8 vote; address delegate; } struct Proposal { uint voteCount; } address chairperson; mapping(address => Voter) voters; Proposal[] proposals; /// Create a new ballot with $(_numProposals) different proposals. function Ballot(uint8 _numProposals) public { chairperson = msg.sender; voters[chairperson].weight = 1; proposals.length = _numProposals; } /// Give $(toVoter) the right to vote on this ballot. /// May only be called by $(chairperson). function giveRightToVote(address toVoter) public { if (msg.sender != chairperson || voters[toVoter].voted) return; voters[toVoter].weight = 1; } /// Delegate your vote to the voter $(to). function delegate(address to) public { Voter storage sender = voters[msg.sender]; // assigns reference if (sender.voted) return; while (voters[to].delegate != address(0) && voters[to].delegate != msg.sender) to = voters[to].delegate; if (to == msg.sender) return; sender.voted = true; sender.delegate = to; Voter storage delegateTo = voters[to]; if (delegateTo.voted) proposals[delegateTo.vote].voteCount += sender.weight; else delegateTo.weight += sender.weight; } /// Give a single vote to proposal $(toProposal). function vote(uint8 toProposal) public { Voter storage sender = voters[msg.sender]; if (sender.voted || toProposal >= proposals.length) return; sender.voted = true; sender.vote = toProposal; proposals[toProposal].voteCount += sender.weight; } function winningProposal() public constant returns (uint8 _winningProposal) { uint256 winningVoteCount = 0; for (uint8 prop = 0; propwinningVoteCount) { winningVoteCount = proposals[prop].voteCount; _winningProposal = prop; } }}
REMIX主界面截圖如下,具體說明參考各個子章節 。
REMIX主界面截圖
具體界面介紹章節分類如下:
3.2 文件瀏覽器
3.3 語言編輯器
3.4 終端輸出器
3.5 分頁控制面板
3.5.1 編譯合同
3.5.2 運行
3.5.3 調試
3.5.4 設置
3.5.5 分析
3.5.6 支持3.2 文件瀏覽器
文件瀏覽器
1)增加新文件( new File)
點擊在瀏覽器上增加一個新的智能合約文件
9.增加新文件.png
2)打開文件(Add Local File)
打開存在文件
3) 匿名發布到( to Gist)
11. 匿名發布到.png
4) 復制文件列表到其他瀏覽器(Copy to)
例如,把“”的文件列表復制到另一個瀏覽器“”
修改輸入目標瀏覽器的網址:
12.復制到別的瀏覽器.png
打開新的瀏覽器,文件列表已復制過來了:
13.別的瀏覽器的文件列表.png
5)鏈接本地服務器( to )
在Remix文件瀏覽器上的文件并不會同步到本地文件系統,對瀏覽器文件列表的新增/修改/刪除并不會同步本地文件 。一般操作時ubuntu下相關服務器的搭建,調試成功的代碼需要在本地文件系統新建文件保存 。Remix瀏覽器提供了一種方法,就是使用,允許保存和同步瀏覽器文件到你的本地計算機中 。因為根據官網文檔,筆者沒有能夠在 10系統或者中安裝成功,本文不再詳細介紹該功能 。有興趣的朋友歡迎根據官網文檔嘗試使用同步 。成功者歡迎跟輝哥反饋交流,補充完整這個文檔 。
14. 鏈接本地文件系統.png
3.3 語言編輯器
15.瀏覽器.png
語言編輯器重要的功能列表:
1 , TAB頁面顯示打開的文件
2,編譯告警或者錯誤會顯示在編輯器最左側邊
3,Remix自動保存當前文件(修改后5秒內)
4,+/- 表示增加/減少編輯器的字體大小
3.4 終端輸出器
終端輸出器窗口
終端輸出器功能說明:
1,點擊1按鈕可隱藏終端輸出器
2,點擊2按鈕可情況輸出器內容
3,點擊3按鈕可復制地址信息等到緩存,便于粘貼
4,點擊按鈕可展開交易詳細內容
5,點擊Debug按鈕可調試該交易合約
6,點擊復選框 , 可增加選擇顯示所有的交易還是只顯示智能合約相關的交易程序 。默認只顯示后者 。
17. 終端顯示內容.png
7,輸入關鍵字可搜索定位輸出內容
例如輸入”Hello “關鍵字,相關的內容就顯示出來了 。
18. 搜索Hello關鍵字
8,監聽網絡( to )
勾選后,REMIX不僅監聽REMIX編輯器中創建的交易,還監聽當前環境中所有的交易 。3.5 分頁控制面板
3.5.1 編譯合約
20. 控制面板.png
1,發布到Swarm網絡( on Swarm)
點擊“ on Swarm”按鈕可把智能合約源碼和對應的ABI信息發布到網絡上 。這個合約智能是非抽象類的才能發布 。
合約發布后,你可以點擊按鈕,在彈出窗口的“SWARM ”
位置找到對應的信息 。
信息中的SWARM 位置有對應網址,在能科學上網的計算機就可找到該合同的信息 “bzzr://”
3.5.2 運行
21. Run控制面板.png
重點特性說明
1) 環境選擇
VM: 所有交易在瀏覽器的沙盒中被執行 。這以為著沒有結果是永久保存的 。當頁面重載后,一個新的區塊鏈會被從零開始運行,老的會被丟棄 。
: Remix將連接被植入的Web3對象 。例如Mist或者錢包是提供植入的Web3對象的例子 。例如《第八課 如何調試以太坊官網的智能合約眾籌案例》就是使用Meta的賬號 。
Web3 : Remix將連接到一個遠程節點 。你可以用這個地址來選擇錢包客戶端:geth,or any.
2) 初始化合約
1] 創建合約
“”按鈕用于創建合約 。合約創建時 , 需要參考左邊構建函數定義(智能合約的同名函數為構建函數)的類型來輸入參數 。
25. 創建合約.png
注意:如果輸入參數為地址或者字符串 , 都需要使用英文雙引號(“”)囊括起來,使用英文(“,”)表示輸入參數分割 。2] 運行合約
假設給出的地址是一個選擇合同的實例 。通過這種方法就可以跟已經運行的合同進行交互 。要特別謹慎使用該功能,因為系統不做驗證 。運行時要確認信任這個地址的合同 。
3] 等待()合約
26,掛起合約.png
等待合約表示還沒有完成執行過程的合約 。按鈕功能描述參考上述附件 。
3.5.1.1 Web3 遠程節點配置
1) 啟動客戶端 。不熟悉的,可參考該篇文章的對應關鍵字“在上安裝”安裝好客戶端 。
22. 啟動客戶端.png
2) 輸入Web3 遠程節點 , 例如的簽寶地址為“:7545”
23. 輸入WEB3 的服務器地址.png
3) 輸入完成后,Remix的賬號列表更新為的賬號列表了 。
24. 賬號為的賬號列表.png
【第十一課 Solidity語言編輯器REMIX指導大全】3.5.3 調試
調試/回滾和單步調試是一個很重要的功能,點擊《第九課 如何在Remix環境下進行代碼單步調試》文章查看 。
3.5.4 設置
27. .png
重要特性說明:
(1) :編譯版本,不調整的話系統會默認選擇最新正式發布的版本 。
(2) useVM at Load:勾選此項會在重新加載時默認選擇 VM環境 。
(3) :勾選此項會節省運行GAS,JVM等測試環境可不用勾選 。3.5.5 分析
分析面板顯示的是最后一次編譯的信息,默認情況下每一次編譯都會產生一個新的分析 。
這個分析面板顯示的是合約代碼的詳細信息,它可以幫助你避免代碼錯誤或者增強編碼能力 。
28. 頁面.png
:
: 如果tx.被使用則會告警;
Check : 避免潛在的可重入性BUG;
: 使用植入匯編方式;
Block :maybe ;
Low level calls:maybe ;
Block. usage: 自毀調用;
Gas & :
Gas costs: 函數的GAS消耗太高會告警 。
This on local calls: 勾選后本地函數會被喚醒;
:
: 檢查潛在的常量函數
names: 檢查變量名是否太相似
下方顯示的是本次編譯的優化告警,供程序員優化代碼使用 。
28. 頁面2.png
3.5.6 支持
支持頁面 , 可點擊需求技術支持和交流 。
4.典型錯誤介紹
4.1 REMIX編譯器官網鏈接打不開
提示內容:點擊官網鏈接(),如果打不開或者有錯誤提示“mock :not found”
原因分析: 這個主要是不能科學上網引起官網瀏覽器不能下載完全 。
解決辦法:
1,參考歐陽哥哥的文章《【以太坊開發】Remix IDE本地部署與配置個性風格》完成本地REMIX的部署;
2,采用一個已國內部署的REMIX瀏覽器鏈接:
4.2 參數轉換失敗
提示內容: 終端輸出器顯示為“ to . : Error: Error:”
原因分析:
函數定義為” ( _to, uint )”
RUN面板的函數輸入參數如下,希望轉移5個ETH給目標賬號 。
“0c”,5000
結果提示錯誤 。
這個原因主要是因為”5 *10^18”的值超過了計算器的范圍,需要增加””來讓程序進行轉換 。的默認單位為wei,1 ETH = 1*10^18 wei 。
解決辦法:
輸入參數改為2個參數均有雙引號則不會有錯誤提示 。
“0c”,”5000″
在remix中 , 任何輸入參數都可以帶””表示 。
4.3導入依賴編譯失敗
提示內容:
編譯一個智能合約,有以下依賴導入代碼
import "./SafeERC20.sol";import "../../ownership/Ownable.sol";import "../../math/SafeMath.sol";
REMIX編譯失敗,提示為“ to“math/.sol”: File not found”
原因分析:
REMIX支持打開本地文件,目前還不支持本地文件導入 。
解決辦法:
直接從上導入文件 。改為如下代碼即可編譯成功 。
import 'https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol';import 'https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/math/SafeMath.sol';import 'https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/ownership/Ownable.sol';
注意哦,的地址為 , 而不是瀏覽器能打開的地址 。
5.參考文檔
1) , REMIX英文官網幫助文檔
2), 【以太坊開發】Remix IDE本地部署與配置個性風格
3), 語言官網中文版
尊重知識輸出,如需引用,敬請說明本文鏈接和作者-筆名輝哥 。
本文到此結束,希望對大家有所幫助 。
- 濮陽市油田第十中學八年級開展心理健康系列講座之觀后感
- 九上《道德與法治》第一課踏上強國之路第二課時走向共同富裕重點
- 「育嬰師育兒百科」新媽媽第一課:1-42天新生兒體檢項目及時間表
- 「育嬰師育兒百科」新媽媽第一課:新生兒的臍帶怎樣護理
- [育嬰師育兒百科]新媽媽第一課:2~3個月的寶寶喝多少牛奶為宜?如何避免寶寶過食?
- 【育嬰師育兒百科】新媽媽第一課:寶寶不宜穿開襠褲
- 「育嬰師育兒百科」新媽媽第一課:剛出生的寶寶屁股為什么有青痕?
- 「育嬰師育兒百科」新媽媽第一課:怎么知道給寶寶蓋的被子多還是少了?
- 「娛樂有個圈」原創寶寶出生第十一天曬全家照,眼睛太像媽媽,難怪都說兒子隨媽
- 「育嬰師育兒百科」新媽媽第一課:寶寶大便黑綠色是怎么回事?
