区块链开发(一)搭建基于以太坊go-ethereum的私有链环境

通过各方资料了解学习之后,决定自己开始搭建基于以太坊go-ethereum的私有链环境。由于本人的电脑系统为win7,为避免window环境出现过多莫名其妙的问题,特意通过vm搭建了一台ubuntu16.04版本的虚拟系统。以下内容均基于ubuntu16.04系统。

 

go-ethereum客户端

下载地址&参考手册

 

首先,可以查看一下go-ethereum项目在git上的地址:
https://github.com/ethereum/Go-ethereum

可以在点击项目上的wiki标签,也可以通过一下地址访问wiki:
https://github.com/ethereum/Go-ethereum/wiki/Building-Ethereum

在wiki页面选择ubuntu系统的安装说明,也可以直接访问下面链接:
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu

ubuntu下安装命令

安装之前先安装ssh,这样接下来就可以用putty或者SecureCRT之类的客户端远程连接Ubuntu了。

 

sudo apt-get install ssh

打开命令行窗口,或通过快捷键CTL+ALT+T,依次输入以下命令,即可安装成功:

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum

PS:如果安装过程中需要依赖其他组件,则先安装其他组件。另外,在ubuntu16.04版本,sudo apt-get install命令可精简为sudo apt install。

 

安装测试

安装完成之后在命令行输入:

geth --help

 

如果现实出命令行各种参数提示信息,则说明安装成功。

 

创世块

在以上安装成功之后,直接启动,即可连接公有链。现在通过配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。

创建一个eth的根目录,在根目录下新建创世块json文件genesis.json。内容如下:

{
    "config": {
        "chainId": 8888,
        "homesteadBlock": 0,
        "daoForkBlock": 0,
        "daoForkSupport": true,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0,
        "byzantiumBlock": 0,
        "constantinopleBlock": 0,
        "petersburgBlock": 0,
        "ethash": {}
    },
    "nonce": "0x42",
    "timestamp": "0x0",
    "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
    "gasLimit": "0xffffffff",
    "difficulty": "0x1",
    "alloc": {
        "093f59f1d91017d30d8c2caa78feb5beb0d2cfaf": {
            "balance": "0xffffffffffffffff"
        },
        "ddf7202cbe0aaed1c2d5c4ef05e386501a054406": {
            "balance": "0xffffffffffffffff"
        }
    }
}

参数解释:

参数名称参数描述
mixhash与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
noncenonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase矿工的账号,随便填
timestamp设置创世块的时间戳
parentHash上一个区块的hash值,因为是创世块,所以这个值是0
extraData附加信息,随便填,可以填你的个性信息
gasLimit该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

连接公有链使用如下命令:

$nohup geth --datadir "/data"  --cache 512 --rpc --rpcaddr 0.0.0.0& 
// 后台执行
geth --datadir "/data"  --cache 512 --rpc --rpcaddr 0.0.0.0   
//可以看到执行日志和状态

 

启动私有链节点

启动私有节点所需参数

参数名称参数描述
identity区块链的标示,随便填写,用于标示目前网络的名字
init指定创世块文件的位置,并创建初始块
datadir设置当前区块链网络数据存放的位置
port网络监听端口
rpc启动rpc通信,可以进行智能合约的部署和调试
rpcapi设置允许连接的rpc的客户端,一般为db,eth,net,web3
networkid设置当前区块链的网络ID,用于区分不同的网络,是一个数字
console启动命令行模式,可以在Geth中执行命令

初始化&启动

本人启动eth所在目录为:

/home/cuijb/eth

此目录下放置刚才配置好的创世块json文件:piccgenesis.json

初始化

初始化创世块有两种方法:
方法一:执行命令先进行初始化(注意需要在你准备防止eth的根目录下执行)

$ geth  --datadir "./" init genesis.json

 

出现如下图:

 

 

创建自己的私有链条

 

执行一条最简单的geth命令,来创建自己的私有链条

geth --datadir "./" --nodiscover console 2>>geth.log

参数说明: --nodiscover :表示我创建的私有链,不允许别人加入过来,我自己单独的网络。

geth的参数项目很多,有兴趣的可以打geth –help 来获得详细信息,我们也会在之后的章节中对关键参数项进行说明。可以看到如下如显示:

 

随后就是相关的命令操作,在下一篇博客中进一步说明。

 

 

2017-11-30 写于深圳

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值