从零开始以太坊区块链开发指南二

前言

上一篇我们介绍了Geth的安装,今天我们介绍如何部署智能合约。如果你还没有看上一篇介绍的内容,我建议你先看看上一篇从零开始以太坊区块链开发指南一。部署智能合约首先需要一个由solidity编写的合约文件以及用于开发以太坊的框架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安装成功。


创建solidity工程

  • 我们选择一个目录创建一个solidity工程,在该目录下运行
truffle init
从零开始以太坊区块链开发指南二_第1张图片
创建solidity工程

该命令会自动创建一个工程和相关文件。并且给我们创建了一个自带的合约文件Migrations.sol

从零开始以太坊区块链开发指南二_第2张图片
truffle创建的工程目录
  • 创建vote.sol
    在上面由truffle init创建的contracts文件夹下添加Voting.sol文件,这是一个投票应用,只要你有过编程经历,我相信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 winningVoteCount){
                winningVoteCount = proposals[p].voteCount;
                winningProposalIndex = p ;
            }
        }
    }
    
    function winnerName()public constant returns(bytes32 winnerName){
        winnerName = proposals[winningProposalIndex()].name;
    }
}
  • 利用Truffle编译合约
    打开工程里面的truffle.js,将下面的配置复制进去。
module.exports = {
  // See 
  // to customize your Truffle configuration!
  networks: {
    development: {
      host: "localhost",
      port: 8081,
      network_id: "*", // Match any network id
      gas: 1000000
    }
  }
};

host和port是你本地一个以太坊节点的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
从零开始以太坊区块链开发指南二_第3张图片
编译成功

运行 truffle migrate

truffle migrate
从零开始以太坊区块链开发指南二_第4张图片
正在部署

对应的以太坊节点上可以看到对应的输出

从零开始以太坊区块链开发指南二_第5张图片
以太坊节点输出

这证明我们的合约已经部署到我们的私有链上去了。
运行命令

txpool.status
从零开始以太坊区块链开发指南二_第6张图片
已经被打包的合约准备被部署

我们运行

miner.start()

之后truffle会出现

从零开始以太坊区块链开发指南二_第7张图片
部署成功

表面我们的合约部署成功了。


好了,我们已经成功部署了一个合约,下一章我们将说明如何调用这个合约。

你可能感兴趣的:(从零开始以太坊区块链开发指南二)