第一個Dapp-Voting
- 創(chuàng)建工作目錄
mkdir Voting
- 安裝testrpc、web3和solc
npm install ethereal-testrpc web3@0.20.1 sole
3.啟動testrpc
testrpc
如果運行成功了,如下圖所示:
testrpc創(chuàng)建了10個賬戶,每個賬戶都有100個eth可供使用。
4.編寫合約:簡單的Voting代碼话瞧。
5.啟動Node,使用web3與blockchain交互
> Web3 = require('Web3') //引用Web3庫
> web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));//使用server地址初始化web3
> web3.eth.accounts //查詢賬戶
[ '0xd84f54f54f18a5ed94246cdef94c525454e0b607',
'0xdf1892ff499fe2683d5f017d6a97c5e8053cae76',
'0x8a624e7852ec62f3c28a4fa3b1c24ffc02228c5f',
'0xd931a86fd7673a0e18dadc024cda309483dabe27',
'0x77d85933e3b9725b42fbf753dba059538c4e2d28',
'0x467d5ccd570397fab0026a0f8f68b0026e43ced5',
'0xbc1ee573d36b8009d23918a48d6e708166a706a0',
'0xc4e1275f17012beba77c3e3c94ea97cb0b3cd9b0',
'0x8083c17ce4d339f1e9f09c8541ecb32a733f5aae',
'0xbc19808198a4b4d88f3db83e9ae22e1e7bde20f1' ]
可以看到web3提供的賬戶與testrpc服務所提供的賬戶是一致的。
> solc = require('solc')//引用solc
> code = fs.readFileSync('Voting.sol').toString();//引入合約文件
> compileCode = solc.compile(code);//編譯合約
> byteCode = compileCode.contracts[':Voting'].bytecode;//將來部署到blockchain的執(zhí)行code
> abi = compileCode.contracts[':Voting'].interface;//contract的接口(ABI)
> abiDefinition = JSON.parse(abiDefinition);
部署contract:
> VotingContract = web3.eth.contract(abiDefinition);//
> deployedContract = VotingContract.new(['A','B','C'],{data:byteCode,from:web3.eth.accounts[0],gas:470000});//部署
> deployedContract.address
'0xd1b2cb25b7d6bf9fd7775d46610aa6747fd75615'//合約地址
> contractInstance = VotingContract.at(deployedContract.address)//初始化寝姿,到此我們就可以調(diào)用合約中的方法了
> contractInstance.totalVotesFor('A').toString();//查詢A的票數(shù)
'0'
> contractInstance.voteForCandidate('A',{from:web3.eth.accounts[0]});//給A投票
'0x21298cd14cad4ca81ce8a69372b4e95e646d50e7dba4433242e6b2dab2eece04'
> contractInstance.totalVotesFor('A').toString();
'1'
到此在shell上部署成功交排,接些來是,與blockchain交互的界面会油。
index.html
index.js
完成之后个粱,即可使用瀏覽器打開index.html來進行投票了古毛,如果能夠看到投票翻翩,并看到更新后的票數(shù),那么恭喜你稻薇,第一個Dapp已經(jīng)成功運行了嫂冻。