中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

以太坊開發方法是什么

發布時間:2021-12-24 17:00:46 來源:億速云 閱讀:96 作者:iii 欄目:互聯網科技

這篇文章主要講解了“以太坊開發方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“以太坊開發方法是什么”吧!


1. 設置開發環境

我們使用一個模擬的內存區塊鏈(ganache)代替真實的區塊鏈在進行開發。在本教程的2章,我們將與真實的區塊鏈交互。下面是安裝ganache、web3js的步驟,然后在linux上啟動一個測試鏈。在macOS上安裝過程也是一樣的。

以太坊開發方法是什么

你可以看到ganache-cli自動創建了10個測試賬號,每個賬號預分配了100(虛構的)ethers

如果需要更詳細的開發環境安裝教程,可以參考如下文章:

  • windows以太坊開發環境搭建

  • linux/ubuntu以太坊開發環境搭建

2.簡單的投票合約

我們將使用solidity編程語言來編寫我們的合約。如果您熟悉面向對象編程,學習編寫solidity合約應該是輕而易舉的事。我們將編寫一個合約對象,含有一個構造函數初始化候選人數組。合約對象有2個方法:

  1. 返回候選人獲得的總票數

  2. 增加候選人的投票數。

注意:構造函數只被調用一次,當您部署合約到區塊鏈。不像在網絡世界里的每一個部署你的代碼覆蓋舊的代碼,部署后的代碼在區塊鏈上是不變的。例如,如果你更新你的合約并且再次部署,舊合約仍然會在區塊鏈上, 它所存儲的數據不受影響,新的部署將創建一個新實例的合約。

下面是投票合約的代碼:

pragma solidity ^0.4.18;  
    // We have to specify what version of compiler this code will compile with  
      
    contract Voting {  
      /* mapping field below is equivalent to an associative array or hash.  
      The key of the mapping is candidate name stored as type bytes32 and value is  
      an unsigned integer to store the vote count  
      */  
        
      mapping (bytes32 => uint8) public votesReceived;  
        
      /* Solidity doesn't let you pass in an array of strings in the constructor (yet).  
      We will use an array of bytes32 instead to store the list of candidates  
      */  
        
      bytes32[] public candidateList;  
      
      /* This is the constructor which will be called once when you  
      deploy the contract to the blockchain. When we deploy the contract,  
      we will pass an array of candidates who will be contesting in the election  
      */  
      function Voting(bytes32[] candidateNames) public {  
        candidateList = candidateNames;  
      }  
      
      // This function returns the total votes a candidate has received so far  
      function totalVotesFor(bytes32 candidate) view public returns (uint8) {  
        require(validCandidate(candidate));  
        return votesReceived[candidate];  
      }  
      
      // This function increments the vote count for the specified candidate. This  
      // is equivalent to casting a vote  
      function voteForCandidate(bytes32 candidate) public {  
        require(validCandidate(candidate));  
        votesReceived[candidate] += 1;  
      }  
      
      function validCandidate(bytes32 candidate) view public returns (bool) {  
        for(uint i = 0; i < candidateList.length; i++) {  
          if (candidateList[i] == candidate) {  
            return true;  
          }  
        }  
        return false;  
      }  
    }

復制上面的代碼,在hello_world_voting目錄下創建一個Voting.sol文件。現在讓我們來編譯代碼并將其部署到ganache的區塊鏈上.

為了編譯solidity代碼,我們需要安裝名字為solc的npm模塊

~/hello_world_voting$ npm install solc

我們將在node控制臺中使用這個庫來編譯我們的合約。在上一篇文章中我們提到,web3js是一個讓我們可以通過rpc訪問區塊鏈的庫。我們將使用該庫來部署我們的應用程序并與之交互。

首先,在命令行中斷運行node命令進入node控制臺,初始化solc和文本對象。下面的所有代碼片段都需要在node控制臺中鍵入

~/hello_world_voting$ node  
> Web3 = require('web3')  
> web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

為了確保web3對象已經初始化、區塊鏈能夠訪問,讓我們試一下查詢區塊鏈上的所有賬戶。您應該看到如下的結果:

> web3.eth.accounts  
    ['0x9c02f5c68e02390a3ab81f63341edc1ba5dbb39e',  
    '0x7d920be073e92a590dc47e4ccea2f28db3f218cc',  
    '0xf8a9c7c65c4d1c0c21b06c06ee5da80bd8f074a9',  
    '0x9d8ee8c3d4f8b1e08803da274bdaff80c2204fc6',  
    '0x26bb5d139aa7bdb1380af0e1e8f98147ef4c406a',  
    '0x622e557aad13c36459fac83240f25ae91882127c',  
    '0xbf8b1630d5640e272f33653e83092ce33d302fd2',  
    '0xe37a3157cb3081ea7a96ba9f9e942c72cf7ad87b',  
    '0x175dae81345f36775db285d368f0b1d49f61b2f8',  
    '0xc26bda5f3370bdd46e7c84bdb909aead4d8f35f3']

從voting.sol加載代碼,保存在一個字符串變量中,然后開始編譯

> code = fs.readFileSync('Voting.sol').toString()  
> solc = require('solc')  
> compiledCode = solc.compile(code)

當你的代碼編譯成功并打印了合約對象的內容(在node控制臺中輸出的內容),有2個字段很重要,需要理解它們:

  • compiledCode.contracts[‘:Voting’].bytecode: Voting.sol源代碼編譯后得到的字節碼。這是將被部署到blockchain的代碼。

  • compiledCode.contracts[‘:Voting’].interface: 合約接口或模板(稱為ABI)告訴用戶合約含有哪些方法。您需要這些ABI的定義,因為將來你總是需要與合約交互的。

感謝各位的閱讀,以上就是“以太坊開發方法是什么”的內容了,經過本文的學習后,相信大家對以太坊開發方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金沙县| 从江县| 普兰店市| 温州市| 吴忠市| 崇左市| 广水市| 视频| 庆云县| 扎兰屯市| 卓资县| 莒南县| 北川| 平湖市| 荣成市| 中卫市| 永年县| 北宁市| 怀宁县| 沂水县| 德阳市| 蒙自县| 梁平县| 青川县| 新乡市| 商水县| 宜兴市| 怀安县| 荃湾区| 双峰县| 无为县| 抚远县| 旬邑县| 靖宇县| 延安市| 庄河市| 八宿县| 莱西市| 武功县| 石景山区| 罗定市|