搭建基于以太坊的私有链环境

以太坊搭建私有链环境

本文主要讲在Ubuntu 16.04系统下搭建以太坊环境:
参考[https://github.com/ethereum/wiki/wiki]

Ubuntu下安装Geth客户端

之所以采用Ubuntu,是因为以太坊的官方对Ubuntu支持的很好,是在各个linux系统中安装最简单。[参考https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu]

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

安装好之后,切换到自己的工作目录下,新建一个skloisgensis.json文件,输入如下内容并保存

{
        "config": {
                "chainId": 123,
                "homesteadBlock": 0,
                "eip155Block": 0,
                "eip158Block": 0
                },
    "nonce":"0x0000000000000042",
    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "difficulty": "0x80000",
    "alloc": {},
    "coinbase":"0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "",
    "gasLimit":"0x2fefd8"
}

解释一下各个参数的作用:

参数作用
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的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

启动Geth即可以启动以太坊的区块链,为了构建私有链 ,需要在Geth启动时加入一些参数,Geth参数含义如下:

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

在Ubuntu下,首先切换到打算运行的目录,目录下应该有配置好的piccgenesis.json文件,执行如下命令

basepath=$(cd `dirname $0`; pwd)

获取当前的目录

geth  --datadir "$basepath/chain" init skloisgenesis.json

创建数据存放地址并初始化创世块
初始化创世块

geth --identity "skloisetherum"  --rpc  --rpccorsdomain "*" --datadir "$basepath/chain" --port "30303"  --rpcapi "db,eth,net,web3" --networkid 95518 console

这里写图片描述

可以看到Listening on [::]:30303和Welcome to the Geth JavaScript console!的提示,说明已经启动成功

注意:如果想将Ubuntu作为永久区块链节点使用,当使用nohup命令时,Geth启动参数console必须去掉,否则Geth会自动停止。

使用节点创建账号

启动节点成功后,会进入Geth的命令行模式,输入如下命令

personal.newAccount()

系统会提示你输入账号密码,并确认,最后会显示一个新生成的账号。
这里写图片描述
首先要知道自己的节点信息,在Geth命令行界面下输入命令,注意大小写

admin.nodeInfo

系统会显示
这里写图片描述
其中
enode: “enode://8a638f95c04478afb68a20e38a99a9626581f27d30e7e302620923b313a9632e9f9d5e14ee0a1b8d4c48b67b12d2f674f8c3390135e67e924248895a15958a1b@0.0.0.0:30303”
就是自己节点的信息,注意要把“0.0.0.0“换成你自己的IP。将这个信息发送给其他节点,在其他节点的命令行中输入:
admin.addPeer(‘enode://8a638f95c04478afb68a20e38a99a9626581f27d30e7e302620923b313a9632e9f9d5e14ee0a1b8d4c48b67b12d2f674f8c3390135e67e924248895a15958a1b@192.168.1.101:30303’)
如果添加成功,输入admin.peers会显示出新添加的节点。
这里写图片描述

ubuntu3 8a638f95c04478afb68a20e38a99a9626581f27d30e7e302620923b313a9632e9f9d5e14ee0a1b8d4c48b67b12d2f674f8c3390135e67e924248895a15958a1b 192.168.111.242
ubuntu2 cf370cc7e6bfb7546f7f606123b25c41217ede30b5cf01c5a784d4ca3f4f514200f6c41f927cce9f5101c43128ec809cf169e106bcaec89d7fe1540c95b6b448 192.168.111.71
ubuntu1 eb704402e7977e47cee63243140068d0c50bf889e1680d241f49b5fab135a78908e9a845d67a3f584061cd6dd1a07987ce5d46d698a4db225869d0dffe8dd9a5 192.168.111.193

ubuntu3
admin.addPeer(‘enode://cf370cc7e6bfb7546f7f606123b25c41217ede30b5cf01c5a784d4ca3f4f514200f6c41f927cce9f5101c43128ec809cf169e106bcaec89d7fe1540c95b6b448@192.168.111.71:30303’)
admin.addPeer(‘enode://eb704402e7977e47cee63243140068d0c50bf889e1680d241f49b5fab135a78908e9a845d67a3f584061cd6dd1a07987ce5d46d698a4db225869d0dffe8dd9a5@192.168.111.193:30303’)

ubuntu2
admin.addPeer(‘enode://8a638f95c04478afb68a20e38a99a9626581f27d30e7e302620923b313a9632e9f9d5e14ee0a1b8d4c48b67b12d2f674f8c3390135e67e924248895a15958a1b@192.168.111.242:30303’)
admin.addPeer(‘enode://eb704402e7977e47cee63243140068d0c50bf889e1680d241f49b5fab135a78908e9a845d67a3f584061cd6dd1a07987ce5d46d698a4db225869d0dffe8dd9a5@192.168.111.193:30303’)

ubuntu1
admin.addPeer(‘enode://cf370cc7e6bfb7546f7f606123b25c41217ede30b5cf01c5a784d4ca3f4f514200f6c41f927cce9f5101c43128ec809cf169e106bcaec89d7fe1540c95b6b448@192.168.111.71:30303’)
admin.addPeer(‘enode://8a638f95c04478afb68a20e38a99a9626581f27d30e7e302620923b313a9632e9f9d5e14ee0a1b8d4c48b67b12d2f674f8c3390135e67e924248895a15958a1b@192.168.111.242:30303’)

使用节点进行挖矿

在Geth命令行界面下,输入miner.start()即启动挖矿,挖矿后,会不停刷屏,输入miner.stop()即停止,不用管刷屏导致的命令不全,命令会正常执行。

到这一步,已经组建一个私有链的网络,可以像其他区块链一样不停的扩充这个网络,下一篇文章,我会介绍如何在私有链上编写、调试和部署智能合约。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值