您好,登錄后才能下訂單哦!
本篇內容主要講解“如何用智能合約開發以太坊DApp應用程序”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何用智能合約開發以太坊DApp應用程序”吧!
我們使用一個模擬的內存區塊鏈(ganache)代替真實的區塊鏈在進行開發。在本教程的2章,我們將與真實的區塊鏈交互。下面是安裝ganache、web3js的步驟,然后在linux上啟動一個測試鏈。在macOS上安裝過程也是一樣的。
你可以看到ganache-cli自動創建了10個測試賬號,每個賬號預分配了100(虛構的)ethers
如果需要更詳細的開發環境安裝教程,可以參考如下文章:
windows以太坊開發環境搭建
linux/ubuntu以太坊開發環境搭建
我們將使用solidity編程語言來編寫我們的合約。如果您熟悉面向對象編程,學習編寫solidity合約應該是輕而易舉的事。我們將編寫一個合約對象,含有一個構造函數初始化候選人數組。合約對象有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的定義,因為將來你總是需要與合約交互的。
到此,相信大家對“如何用智能合約開發以太坊DApp應用程序”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。