以太坊私链与智能合约部署学习(博主修正篇)—— 第一篇

    以太坊(Ethereum)自2017年5月诞生以来,发展迅速。作为了一个小白,博主初步打算上个车,过个瘾。那什么是以太坊?请参看度娘的解释(https://baike.baidu.com/item/%E4%BB%A5%E5%A4%AA%E5%9D%8A/20865117?fr=aladdin)。

    事物是个新事物,也是个好东西,但资料不多,所以小白博主也只能慢慢找寻资料,慢慢记录自己填坑的过程。

    第一篇的主题是:以太坊私链的创建:)

   一、配置环境与软件安装

    1、安装geth

    以下的资料来自:http://8btc.com/article-4537-1.html

MAC OSX

    首先确保已安装 homebrew,没有安装过的可以在命令行下执行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 进行安装
    brew tap ethereum/ethereum
    brew install ethereum

WINDOWS

    访问 https://geth.ethereum.org/downloads/
    下载并安装 Geth for Windows

LINUX

    git clone https://github.com/ethereum/go-ethereum
    sudo apt-get install -y build-essential golang
    cd go-ethereum
    make geth

    在这里,我们约定,go-ethereum的绝对路径为:/alidata/go-ethereum。

    如果你觉得按照上面的命令能顺利执行,那就图森破了。这里有两点需要注意:

    首先:千万选用ubuntu而不是centos,各种库无法编译,单单填centos依赖库的坑都能把搓衣板跪穿。对于像我这样的小白级别,建议跟着教程走,调通了demo之后再去折腾centos。

    其次:golang的安装,要到https://www.golangtc.com/download下载go1.9.2.linux-amd64.tar.gz,进行编译安装。因为apt-get下载后的版本是1.6,而go-ethereum需要的最低版本是1.7。报错信息为:go-ethereum 1.6 Makefile:15: recipe for target 'geth' failed。编译步骤:

tar -xvf go1.9.linux-amd64.tar.gz
mv go /usr/local/src 
mkdir $HOME/gosrc && cd $HOME/gosrc
mkdir bin  pkg  src

更新系统变量:

vim ~/.profile
 
export GOROOT=/usr/local/src/go
export GOPATH=$HOME/gosrc
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOROOT/bin

source ~/.profile

安装完Golang之后,再进入/alidata/go-ethereum,进行make geth,就可以顺利编译了。成功之后执行/alidata/go-ethereum/build/bin/geth -h,有如下回显则说明安装成功:

 

    2、安装npm

    因为solc的安装要依赖于nodejs的npm组件。这一步相对简单:apt-get install npm

   

    3、安装solc

    按照教程示例,只需要简单的npm install -g solc,慢慢坐着等即可。

    运行一段时间后,你会发现,自己又太天真了,天朝的网络质量,可以让你等到天荒地老。天朝的问题,只能在天朝内解决,我们可以依靠无所不能的大淘宝:

    npm install -g cnpm --registry=https://registry.npm.taobao.org

    apt-get install install nodejs-legacy

    cnpm install solc

    cnpm install -g solc

    注意:到这里,solc安装成功。(但博主仍感觉有什么地方怪怪的,之后的文章会进一步求证,广大客官就先不用纠结了,答案近期分晓)

 

    二、配置私链节点

    以下这一部分,参照http://8btc.com/article-4537-1.html  说明的步骤进行操作,不会有问题。

    1、创世区块的设置

    创建/alidata/godblock/路径,这个路径的名称随意,觉得怎么牛B就怎么取。在这个路径下创建genesis.json文件和data目录。

genesis.json 的内容如下:

    {
    "config": {
            "chainId": 123456,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
    },
    "nonce": "0x0000000000000042",
    "difficulty": "0x020000",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
    "gasLimit": "0x4c4b40",
    "alloc": {}
    }

解释一下各个参数的作用:(来自:http://blog.csdn.net/sportshark/article/details/51855007)

 

mixhash

与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.

nonce

nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。

difficulty

设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度

alloc

用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

coinbase

矿工的账号,随便填

timestamp

设置创世块的时间戳

parentHash

上一个区块的hash值,因为是创世块,所以这个值是0

extraData

附加信息,随便填,可以填你的个性信息

gasLimit

该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

 

    2.2 初始化

    在命令行下进入刚才创建的文件夹/alidata/godblock/,输入如下命令:
    /alidata/go-ethereum/build/bin/geth --datadir data init genesis.json

 

    2.3 启动节点

     /alidata/go-ethereum/build/bin/geth --datadir data --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover console

    geth的参数解释:

identity

区块链的标示,随便填写,用于标示目前网络的名字

init

指定创世块文件的位置,并创建初始块

datadir

设置当前区块链网络数据存放的位置

port

网络监听端口

rpc

启动rpc通信,可以进行智能合约的部署和调试

rpcapi

设置允许连接的rpc的客户端,一般为db,eth,net,web3

networkid

设置当前区块链的网络ID,用于区分不同的网络,是一个数字

console

启动命令行模式,可以在Geth中执行命令

 

不出所料,这时节点将成功启动,并进入JavaScript控制台,如下图所示:

 

第一篇就先到这里吧,下一篇将一步一步地布署属于小白的第一个智能合约。不见不散:)

 

参考文章:

http://8btc.com/article-4537-1.html    以太坊私链与智能合约部署入门教程

http://blog.csdn.net/sportshark/article/details/51855007    区块链开发(一)搭建基于以太坊的私有链环境

http://npm.taobao.org/    淘宝NPM镜像

http://blog.csdn.net/weixin_40139875/article/details/77879915    go-ethereum 1.6 Makefile:15: recipe for target 'geth' failed

posted on 2017-11-13 15:52  咚..咚  阅读(3594)  评论(1编辑  收藏  举报

导航