05、(進階版)5分鐘編寫一個基于區(qū)塊鏈的投票系統(tǒng)

本文由EOSUnion(eos.ren)優(yōu)質內容計劃贊助


版權聲明

首發(fā)自微信公眾號:新個體

作者:飛帥


這里是以太坊開發(fā)系列課程,我將帶你從技術開發(fā)的角度理解以太坊,深入區(qū)塊鏈底層,以最清晰的視角與區(qū)塊鏈零距離親密接觸。

在這里,我將帶你挖礦,開發(fā)自己的代幣,編寫智能合約還有其他有趣的Dapp應用!


前置課程:

01、以太坊開發(fā)入門指南 - 快速理解核心概念

02、以太坊windows下的開發(fā)環(huán)境搭建

03、搭建以太坊網絡,挖礦生產以太幣ETH

04、編寫第一個智能合約 : 投票合約的開發(fā)部署和執(zhí)行

https://mp.weixin.qq.com/s/b7I4c8zdgJFmiEfZP83XSA


本期內容:

1、用代碼創(chuàng)建賬號,賬號轉賬,解鎖賬號

2、用代碼部署智能合約

3、用代碼執(zhí)行智能合約

一、用代碼創(chuàng)建賬號,賬號轉賬,解鎖賬號

錢包中有一個主賬號:"0xb41f9c14be264283bea8ee75016c1782a19b9ba9"

image

查看主賬號余額:

eth.getBalance(eth.accounts[0])

創(chuàng)建新賬號:

personal.newAccount('123456')

參數數賬號密碼:123456

查看賬號列表:

eth.accounts

查看新賬號余額:

eth.getBalance(eth.accounts[1])

image

錢包中可以看到兩個賬號和余額:

image

賬號需要解鎖,解鎖操作:

personal.unlockAccount(eth.accounts[0],"1q2w3e4r");

賬號轉賬:

eth.sendTransaction({from: '0xb41f9c14be264283bea8ee75016c1782a19b9ba9', to: '0xdd21b95398ec6e42328aec631160d02bf1b00e63', value: web3.toWei(1, "ether")})

錢包中可以看到賬號2多了1個ether:

image

這里將新賬號也解鎖:

personal.unlockAccount(eth.accounts[1],"123456");

轉賬效果如下:

image

二、用代碼部署智能合約

打開Browser-Solidityhttps://ethereum.github.io/browser-solidity/

將下面智能合約代碼拷貝到代碼區(qū):

pragma solidity ^0.4.18;
/**
* Author:Ethan.Zhou(飛帥)
* 公眾號:xingeti(新個體)
*/
contract VoteContract {
    
    //記錄投票值
    uint cnt = 1;
    
    /* 構造函數 */
    function construtor() pure public {
    }
    
    /*投票函數,將投票值加1*/
    function vote() public {
        cnt ++;
    }
    
    /*獲取投票值*/
    function getVote() constant  public returns (uint) {
        return cnt;
    }
    
}
image

點擊右邊的detail:

image

找到web3deploy部分,復制代碼:

image

復制代碼如下,修改了兩個變量的變量名:

var voteContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getVote","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"vote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"construtor","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]);

var voteContractDeploy = votecontractContract.new(
  {
    from: web3.eth.accounts[1], 
    data: '0x6080604052600160005534801561001557600080fd5b5060f2806100246000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630242f351146058578063632a9a5214608057806367fb2a66146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260b1565b005b348015609f57600080fd5b5060a660c4565b005b60008054905090565b6000808154809291906001019190505550565b5600a165627a7a72305820f12c095e03457a951742506b168ed4426792bd46cfc0d11d272e9c514c173b1b0029', 
    gas: '4700000'
  }, function (e, contract){
   console.log(e, contract);
   if (typeof contract.address !== 'undefined') {
        console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
   }
})

將代碼拷貝到geth控制臺,部署合約。

部署成功后,geth控制輸出日志:

image

查看后臺后臺日志,可以看到合約創(chuàng)建成功!

|16:05:42] ?? mined potential block                  number=32  hash=77aa13…cdc066
|16:05:43] Successfully sealed new block            number=33  hash=ad395e…c3eb18
|16:05:43] ?? block reached canonical chain          number=28  hash=94a823…15c72c
|16:05:43] Commit new mining work                   number=34  txs=0 uncles=0 elapsed=0s
|16:05:43] ?? mined potential block                  number=33  hash=ad395e…c3eb18
|16:27:19] Submitted contract creation              fullhash=0xc515d05b14a3e932f2f54ac966334d106c8b7c175fd4f135793ff481fea0417e contract=0x0137d67b4a894Dd75245D9A464109C9729Eaa55E

三、用代碼執(zhí)行智能合約

1、獲取合約實例

contractInstance = votecontractContract.at(voteContractDeploy.address)

2、合約調用

image
image

更多精彩,歡迎關注公眾號“新個體”
image
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容