好久没有弄以太坊,因为工作需要,需要搭建一个以太坊的私有网络(private network)。
0. 实验环境 3台阿里云服务器,Ubuntu 16.04,分别简称为ali1
, ali2
, ali3
.
1. Ethereum节点的编译、安装。 这一点无需赘述,以前的文章详细介绍过,请参见这里!
2. 创始块 因为要搭建自己的私有网络,所以要从头构建私有网络的区块链,我们需要初始化创世块。
首先,我们需要为自己的网络选取一个网络编号chainid
或者叫networkid
。以太坊网络的网络id好为1. 我们需要选取另一个整数即可,比如130629
.
其次,需要一个.json
文件,描述创世块和区块的一些属性。例如:
//genesis.json
{
"config": {
"chainId": 130629,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "400",
"gasLimit": "2100000",
"alloc": {
}
}
其中,
config.chainId
是刚才选取的网络id。difficulty
是挖矿的难度,也决定你的私有网络区块的速度。这里设置的400
,大概是几秒钟1个块,可以根据不同的需求,通过实验,合理调整。最后,我们需要用
genesis.json
初始化每个节点。# geth --datadir=%YOUR_ETH_DATA_DIR% init %PATH_TO_FILE/genesis.json
3. 创建bootnode。 节点一个一个的启动起来,要让自己的节点相互连接,形成p2p的网络,我们需要创建一个bootnode, 然后启动
$ bootnode --genkey=boot.key
$ bootnode --nodekey=boot.key
4. 启动节点。
geth --fast --cache=512 --datadir=%PATH_ETH_DATA_DIR% --bootnodes enode://NODE_ID@NODE_IP:NODE_PORT --networkid 130629 --rpcapi web3,eth,personal,admin --rpc --rpcaddr 0.0.0.0 --rpcport RPC_PORT console
其中,
--rpcapi web3,eth,personal,admin --rpc --rpcaddr 0.0.0.0 --rpcport RPC_PORT
表示打开这个节点rpcapi,监听在端口RPC_PORT
上,并且开启web3
, eth
, personal
, admin
api。console
表示显示控制台输入输出窗口。--networkid 130629
指定了网络id。实验中,我需要手动添加节点,这个bootnodes好像没管用。
> admin.addPeer("enode://id@ip:port")
【Ethereum私有网络的搭建】节点的
enode
信息可以在console中通过命令获取到。> admin.nodeInfo()