從零開始以太坊區(qū)塊鏈開發(fā)指南二

前言

上一篇我們介紹了Geth的安裝午衰,今天我們介紹如何部署智能合約。如果你還沒有看上一篇介紹的內(nèi)容,我建議你先看看上一篇從零開始以太坊區(qū)塊鏈開發(fā)指南一氨菇。部署智能合約首先需要一個由solidity編寫的合約文件以及用于開發(fā)以太坊的框架Truffle


安裝Solc
solc是用來編譯智能合約文件的編譯器诀姚。

npm install -g solc

安裝完成之后檢查是否安裝成功响牛。

$solcjs --version
0.4.19+commit.c4cbbb05.Emscripten.clang

輸出版本號則表示安裝成功。


安裝Truffle

npm install -g truffle

安裝完Truffle之后赫段,我們運行命令呀打。

truffle version

輸出

Truffle v4.0.3 (core: 4.0.3)
Solidity v0.4.18 (solc-js)

表示我們Truffle安裝成功。


創(chuàng)建solidity工程

  • 我們選擇一個目錄創(chuàng)建一個solidity工程糯笙,在該目錄下運行
truffle init
創(chuàng)建solidity工程

該命令會自動創(chuàng)建一個工程和相關文件贬丛。并且給我們創(chuàng)建了一個自帶的合約文件Migrations.sol

truffle創(chuàng)建的工程目錄
  • 創(chuàng)建vote.sol
    在上面由truffle init創(chuàng)建的contracts文件夾下添加Voting.sol文件,這是一個投票應用,只要你有過編程經(jīng)歷给涕,我相信solidity的語法對你來說毫無難度豺憔,將下面的solidity代碼copy進去
pragma solidity ^0.4.2;

contract Voting{
    //voter struct
    struct Voter{
        bytes32 name;
        bool voted;//is voted or not
        uint vote;//vote who
        uint givenRightTime;//aurth  time
        uint votetime;//vote time
    }
    struct Proposal{
        bytes32 name;
        uint voteCount;
    }
    address public chairperson;//vote initiator
    
    mapping(address=>Voter)public voters;//voters
    Proposal[] public proposals;//can vote to who
    
    //constructor
    function  Voting(bytes32[] proposalNames) public{
        chairperson = msg.sender;
        //init proposals
        for(uint i = 0;i<proposalNames.length;i++){
            proposals.push(Proposal({name:proposalNames[i],voteCount:0}));
        }
    }
    
    function giveRightToVote(address voter,bytes32 voterName) public{
        if(msg.sender != chairperson || voters[voter].voted){
            revert();
        }
        voters[voter].name = voterName;
        voters[voter].voted = false;
        voters[voter].votetime = 0 ;
        voters[voter].givenRightTime = now;
    }
    
    //vote
    function vote(uint proposalIndex)public{
        Voter storage sender = voters[msg.sender];
        //check is voted
        if(sender.voted){
            revert();
        }
        //modify sender status
        sender.voted = true ;
        sender.votetime = now;
        sender.vote =  proposalIndex;
        proposals[proposalIndex].voteCount += 1;
    }
    
    //get winner
    function winningProposalIndex()public constant returns(uint winningProposalIndex){
        uint winningVoteCount = 0;
        for(uint p = 0 ;p<proposals.length;p++){
            if(proposals[p].voteCount > winningVoteCount){
                winningVoteCount = proposals[p].voteCount;
                winningProposalIndex = p ;
            }
        }
    }
    
    function winnerName()public constant returns(bytes32 winnerName){
        winnerName = proposals[winningProposalIndex()].name;
    }
}
  • 利用Truffle編譯合約
    打開工程里面的truffle.js,將下面的配置復制進去。
module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  networks: {
    development: {
      host: "localhost",
      port: 8081,
      network_id: "*", // Match any network id
      gas: 1000000
    }
  }
};

host和port是你本地一個以太坊節(jié)點的IP地址和端口,gas是部署需要花費的coin够庙,接著打開工程文件的migrations文件夾下的1_initial_migration.js將你要部署的文件改成Voting.sol

// var Migrations = artifacts.require("./Migrations.sol");
var Voting = artifacts.require("./Voting.sol");
module.exports = function(deployer) {
  deployer.deploy(Voting,['hexo','tfboys']);
};
  • truffle部署合約
    運行
truffle compile
編譯成功

運行 truffle migrate

truffle migrate
正在部署

對應的以太坊節(jié)點上可以看到對應的輸出

以太坊節(jié)點輸出

這證明我們的合約已經(jīng)部署到我們的私有鏈上去了恭应。
運行命令

txpool.status
已經(jīng)被打包的合約準備被部署

我們運行

miner.start()

之后truffle會出現(xiàn)

部署成功

表面我們的合約部署成功了。


好了首启,我們已經(jīng)成功部署了一個合約暮屡,下一章我們將說明如何調(diào)用這個合約。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毅桃,一起剝皮案震驚了整個濱河市褒纲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钥飞,老刑警劉巖莺掠,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異读宙,居然都是意外死亡彻秆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唇兑,“玉大人酒朵,你說我怎么就攤上這事≡剑” “怎么了蔫耽?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長留夜。 經(jīng)常有香客問我匙铡,道長,這世上最難降的妖魔是什么碍粥? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任鳖眼,我火速辦了婚禮,結(jié)果婚禮上嚼摩,老公的妹妹穿的比我還像新娘钦讳。我一直安慰自己,他們只是感情好枕面,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布蜂厅。 她就那樣靜靜地躺著,像睡著了一般膊畴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上病游,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天唇跨,我揣著相機與錄音,去河邊找鬼衬衬。 笑死买猖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的滋尉。 我是一名探鬼主播玉控,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狮惜!你這毒婦竟也來了高诺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碾篡,失蹤者是張志新(化名)和其女友劉穎虱而,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體开泽,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡牡拇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惠呼。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡导俘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剔蹋,到底是詐尸還是另有隱情旅薄,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布滩租,位于F島的核電站赋秀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏律想。R本人自食惡果不足惜猎莲,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望技即。 院中可真熱鬧著洼,春花似錦、人聲如沸而叼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葵陵。三九已至液荸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脱篙,已是汗流浹背娇钱。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绊困,地道東北人文搂。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像秤朗,于是被迫代替她去往敵國和親煤蹭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 最新內(nèi)容會更新在主站深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊是什么 - 以太坊開發(fā)入門指南 很多同學已經(jīng)躍躍欲試投入到區(qū)...
    深入淺出區(qū)塊鏈閱讀 2,510評論 2 20
  • 一取视、區(qū)塊鏈 1. 分布式去中心化 比特幣設計的初衷就是要避免依賴中心化的機構硝皂,沒有發(fā)行機構,也不可能操縱發(fā)行數(shù)量作谭。...
    Tenny1225閱讀 33,707評論 5 35
  • 《人間失格》丢早,從題面上很容易理解姨裸,即失去了做人的資格秧倾。 很壓抑的一本書,讓我難過的是傀缩,我竟然無從反駁那先,反而,找到了...
    冬梔梔閱讀 1,075評論 3 6