日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Solidity语言编辑器REMIX指导大全

發布時間:2023/12/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Solidity语言编辑器REMIX指导大全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章摘要

本文目標:本文翻譯和實踐Solidity語言編輯器REMIX官網幫助文檔,但并不拘泥于逐字翻譯,而時根據實踐用中文語言講透編輯器相關功能。

前置條件:了解以太坊ETH和Solidity語言。

技術收獲:

  • 使用REMIX編輯器進行Solidity語言編程,編譯,運行,調試。

  • REMIX界面介紹

    2?使用REMIX編輯器執行”HELLO WORLD”的智能合約

REMIX是一個智能合約編程語言Solidity的集成開發環境。

最簡單的入門就是進行”HELLO WORLD”的程序運行。

2.1 智能合約編譯

在CHROME瀏覽器上點擊鏈接REMIX官網瀏覽器版編輯器(http://remix.ethereum.org/)即可打開REMIX編輯器。部分不能正常訪問官網的,可以訪問筆者的國內REMIX編輯器(http://remix2.ju3ban.net/)。

新增一個命名為“HelloWorld.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 compile”按鈕,會得到一下結果:

智能合約編譯

除一些函數的告警提示外,結果表明該智能合約編譯成功。

2.1.1 編譯告警

如果編寫的程序有告警,REMIX會有提示。一般來說,提示不必修改。

REMIXD編譯告警

2.1.2 編譯錯誤

為了說明編譯錯誤案例,把該文件的第17行”return greeting;”改為”return _greeting;”, 重新編譯,得到以下結果

REMIXD編譯錯誤

如果編寫的Solidity程序存在語法錯誤,Remix編譯器會以粉紅色底色提示顯示錯誤原因,并在編輯器窗口提示位置。

編譯錯誤演示完后,恢復第17行代碼為”return greeting;”

2.1.3 詳情信息

點擊”Detail”按鈕,可以看到詳細信息。其中WEB3DEPLOY部分的內容就是在案例《第二課 如何實現以太坊最簡智能合約“Hello World”的運行》(https://www.jianshu.com/p/2a5d60744988)中geth控制臺使用的編譯后代碼。

DETAIL的內容

2.2 智能合約運行

2.2.1 創建智能合約

選擇“Run”的頁面,選擇Environment環境為Javascript VM,在“Create”按鈕前輸入框內輸入”Hello World!”[注意:輸入字符串一定要有英文雙引號],點擊“Create”按鈕。

創建智能合約

2.2.2 運行greet函數

點擊淺藍色函數”greet”按鈕,可以看到輸出結果為“Hello World!”

運行函數greet

說明:淺藍色按鈕函數表示該交易函數運行時不需要消耗GAS的。

2.2.3 運行setGreeting函數

在setGreeting函數按鈕的輸入框輸入內容”Hello Duncan!”, 運行后在點擊執行”greet”函數,發現該函數的輸出內容已變為”Hello Duncan!”了,說明setGreeting執行正常。

運行函數SetGreeting

說明:粉紅色按鈕函數表示該交易函數運行時是需要消耗GAS的。

3

REMIX界面詳解

第2章以“Hello World”為例,介紹了REMIX集成環境的基本使用方法。本章介紹REMIX編輯器的詳細功能描述。

3.1 REMIX集成環境概述

REMIX是一個智能合約編程語言Solidity的集成開發環境,它集成了一個調試器和測試環境。

如果你對以下內容感興趣,REMIX是一個不錯的學習方式:

  • 開發智能合約(REMIX集成了SOLIDITY編輯器)

  • 調試智能合約

  • 獲取已運行合約的狀態和屬性

  • 調試已經提交的合約

  • 分析SOLIDITY代碼,以便減少編碼錯誤和加強最佳實踐

  • 配合Mist(或者任何植入web3的工具),REMIX可用于測試和調試DAPP分布式程序。(參考鏈接Debugging a Dapp using Remix - Mist - Geth )(https://remix.readthedocs.io/en/latest/tutorial_mist.html)

詳解介紹使用的程序案例為”ballot.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; prop < proposals.length; prop++) ? ? ? ? ? ?if (proposals[prop].voteCount > winningVoteCount) { ? ? ? ? ? ? ? ?winningVoteCount = proposals[prop].voteCount; ? ? ? ? ? ? ? ?_winningProposal = prop; ? ? ? ? ??} ? ?}}

REMIX主界面截圖如下,具體說明參考各個子章節。

REMIX主界面截圖

3.2 文件瀏覽器

文件瀏覽器

1)增加新文件(Create new File)

點擊在瀏覽器上增加一個新的智能合約文件

增加新文件

2)打開文件(Add Local File)

打開存在文件

3) 匿名發布到GitHub(Publish to Gist)

匿名發布到GitHub

4) 復制文件列表到其他瀏覽器(Copy to another instance)

例如,把“http://remix2.ju3ban.net”的文件列表復制到另一個瀏覽器“http://remix.ju3ban.net”

修改輸入目標瀏覽器的網址:

復制到別的瀏覽器

打開新的瀏覽器,文件列表已復制過來了:

別的瀏覽器的文件列表

5)鏈接本地服務器(Connect to Localhost)

在Remix文件瀏覽器上的文件并不會同步到本地文件系統,對瀏覽器文件列表的新增/修改/刪除并不會同步本地文件。一般操作時,調試成功的代碼需要在本地文件系統新建文件保存。Remix瀏覽器提供了一種方法,就是使用Remixd,允許保存和同步瀏覽器文件到你的本地計算機中。因為根據官網文檔,筆者沒有能夠在Windows 10系統或者Ubuntu中安裝成功Remixd,本文不再詳細介紹該功能。有興趣的朋友歡迎根據官網文檔()嘗試使用REMIXD同步。成功者歡迎跟輝哥反饋交流,補充完整這個文檔。

鏈接本地文件系統

3.3 Solidity語言編輯器

Solidity 瀏覽器

Solidity語言編輯器重要的功能列表:

  • TAB頁面顯示打開的文件

  • 編譯告警或者錯誤會顯示在編輯器最左側邊

  • Remix自動保存當前文件(修改后5秒內)

  • +/- 表示增加/減少編輯器的字體大小

3.4 終端輸出器

終端輸出器窗口

終端輸出器功能說明:

  • 點擊1按鈕可隱藏終端輸出器

  • 點擊2按鈕可情況輸出器內容

  • 點擊3按鈕可復制地址信息等到緩存,便于粘貼

  • 點擊Details按鈕可展開交易詳細內容

  • 點擊Debug按鈕可調試該交易合約

  • 點擊復選框,可增加選擇顯示所有的交易還是只顯示智能合約相關的交易程序。默認只顯示后者。

終端顯示內容

  • 輸入關鍵字可搜索定位輸出內容?
    例如輸入”Hello “關鍵字,相關的內容就顯示出來了。

搜索Hello關鍵字

  • 監聽網絡(Listen to network)?
    勾選后,REMIX不僅監聽REMIX編輯器中創建的交易,還監聽當前環境中所有的交易。

3.5 分頁控制面板

3.5.1 編譯合約

Compile控制面板

發布到Swarm網絡(Publish on Swarm)

點擊“Publish on Swarm”按鈕可把智能合約源碼和對應的ABI信息發布到網絡上。這個合約智能是非抽象類的才能發布。

合約發布后,你可以點擊Detail按鈕,在彈出窗口的“SWARM LOCATION”

位置找到對應的MetaDATA信息。

信息中的SWARM LOCATION位置有對應網址,在能科學上網的計算機就可找到該合同的MetaData信息?“bzzr://165fad4c3d8ead3a7fe28296777b4bedafb09bb57de2e9ba39c1547866437182”

3.5.2 運行

?Run控制面板

重點特性說明

1) 環境選擇

JavaScript VM: 所有交易在瀏覽器的沙盒中被執行。這以為著沒有結果是永久保存的。當頁面重載后,一個新的區塊鏈會被從零開始運行,老的會被丟棄。

Injected Provider: Remix將連接被植入的Web3對象。例如Mist或者Metamask錢包是提供植入的Web3對象的例子。例如《第八課 如何調試以太坊官網的智能合約眾籌案例》(https://www.jianshu.com/p/c7c87c7ad74f)就是使用Meta的賬號。

Web3 Provider: Remix將連接到一個遠程節點。你可以用這個地址來選擇錢包客戶端:geth, parity or any Ethereum client.

2) 初始化合約

創建合約

“Create”按鈕用于創建合約。合約創建時,需要參考左邊構建函數定義(智能合約的同名函數為構建函數)的類型來輸入參數。

創建合約

注意:如果輸入參數為地址或者字符串,都需要使用英文雙引號(“”)囊括起來,使用英文(“,”)表示輸入參數分割。

運行合約

假設給出的地址是一個選擇合同的實例。通過這種方法就可以跟已經運行的合同進行交互。要特別謹慎使用該功能,因為系統不做驗證。運行時要確認信任這個地址的合同。

等待(pending)合約

掛起合約

等待合約表示還沒有完成執行過程的合約。按鈕功能描述參考上述附件。

3.5.1.1 Web3 Provider遠程節點配置

1) 啟動Ganache客戶端。不熟悉的,可參考該篇文章的對應關鍵字“在WINDOWS上安裝Ganache”安裝好客戶端(https://www.jianshu.com/p/683ea7d62a39)。

啟動Ganache客戶端

2) 輸入Web3 Provider遠程節點,例如Ganache的簽寶地址為“HTTP://127.0.0.1:7545”

輸入WEB3 privider的服務器地址

3) 輸入完成后,Remix的賬號列表更新為Ganache的賬號列表了。

3.5.3 調試

調試/回滾和單步調試是一個很重要的功能,點擊《第九課 如何在Remix環境下進行Solidity代碼單步調試》(https://www.jianshu.com/p/a2502274b092)文章查看。

3.5.4 設置

重要特性說明:

  • Solidity version:編譯SOLIDITY版本,不調整的話系統會默認選擇最新正式發布的版本。

  • Always use Ethereum VM at Load:勾選此項會在重新加載時默認選擇JavaScript VM環境。

  • Enable Optimization:勾選此項會節省運行GAS,JVM等測試環境可不用勾選。

3.5.5 分析

分析面板顯示的是最后一次編譯的信息,默認情況下每一次編譯都會產生一個新的分析。

這個分析面板顯示的是合約代碼的詳細信息,它可以幫助你避免代碼錯誤或者增強編碼能力。

Security:?
Transaction origin: 如果tx.origin被使用則會告警;?
Check effects: 避免潛在的可重入性BUG;?
Inline assembly: ?使用植入匯編方式;?
Block timestamp: Semantics maybe unclear;?
Low level calls: Semantics maybe unclear;?
Block.blockhash usage: 自毀調用;

Gas & Economy:?
Gas costs: 函數的GAS消耗太高會告警。?
This on local calls: 勾選后本地函數會被喚醒;

Miscellaneous:?
Constant functions: 檢查潛在的常量函數?
Similar variable names: 檢查變量名是否太相似

Miscelllaneous下方顯示的是本次編譯的優化告警,供程序員優化代碼使用。

3.5.6 支持

支持頁面,可點擊需求技術支持和交流。

4

典型錯誤介紹

4.1 REMIX編譯器官網鏈接打不開

提示內容:點擊官網鏈接(http://remix.ethereum.org),如果打不開或者有錯誤提示“mock compiler: source not found”

原因分析: 這個主要是不能科學上網引起官網瀏覽器不能下載完全。

解決辦法:

1,參考歐陽哥哥的文章《【以太坊開發】Remix IDE本地部署與配置個性風格》完成本地REMIX的部署;?
2,采用一個已國內部署的REMIX瀏覽器鏈接:http://remix2.ju3ban.net

4.2 參數轉換失敗

提示內容: 終端輸出器顯示為“transact to Donation.moveFund errored: Error encoding arguments: Error: Assertion failed ”

原因分析:?
Solidity函數定義為”function moveFund(address _to, uint _amount)”

RUN面板的函數輸入參數如下,希望轉移5個ETH給目標賬號。

“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,500000000000000

結果提示錯誤。

這個原因主要是因為”5 *10^18”的值超過了計算器的范圍,需要增加”“來讓程序進行轉換。Solidity的默認單位為wei,1 ETH = 1*10^18 wei。

解決辦法:?
輸入參數改為2個參數均有雙引號則不會有錯誤提示。

“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,”500000000000000”

在remix中,任何輸入參數都可以帶”“表示。

5

參考文檔

REMIX英文官網幫助文檔(http://remix.readthedocs.io/en/latest/)

【以太坊開發】Remix IDE本地部署與配置個性風格(https://www.jianshu.com/p/afdee36ccbc0)

SOLIDITY語言官網中文版(http://solidity-cn.readthedocs.io/zh/develop/solidity-in-depth.html)

總結

以上是生活随笔為你收集整理的Solidity语言编辑器REMIX指导大全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。