好久没有弄以太坊,因为工作需要,需要搭建一个以太坊的私有网络(private network)。
3台阿里云服务器,Ubuntu 16.04,分别简称为ali1
, ali2
, ali3
.
这一点无需赘述,以前的文章详细介绍过,请参见这里!
因为要搭建自己的私有网络,所以要从头构建私有网络的区块链,我们需要初始化创世块。
首先,我们需要为自己的网络选取一个网络编号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
节点一个一个的启动起来,要让自己的节点相互连接,形成p2p的网络,我们需要创建一个bootnode, 然后启动
$ bootnode --genkey=boot.key
$ bootnode --nodekey=boot.key
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")
节点的enode
信息可以在console中通过命令获取到。
> admin.nodeInfo()