Ethereum私有网络的搭建

好久没有弄以太坊,因为工作需要,需要搭建一个以太坊的私有网络(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, adminapi。
console表示显示控制台输入输出窗口。
--networkid 130629指定了网络id。
实验中,我需要手动添加节点,这个bootnodes好像没管用。
> admin.addPeer("enode://id@ip:port")

【Ethereum私有网络的搭建】节点的enode信息可以在console中通过命令获取到。
> admin.nodeInfo()

    推荐阅读