运行以太坊私有网络
network ID
以太坊以 netWorkID的形式来标识一个网络,推荐使用--networkid
的形式去指定,主网络的networkid
是1(默认的),如果你想要建立私有网络,你可以指定一个新的网络id。
创建创世区块
创世区块将在系统启动的时候commit到数据库中,一个私有网络可以定义一些私有创世区块。
一般来说,创世区块可以分配一些预分配的资源,如下是一个创世区块样例:
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "200000000",
"gasLimit": "2100000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
}
}
如果需要利用你自己的创世区块配置文件生成一个创世链,你可以用如下命令:
geth --datadir path/to/custom/data/folder init genesis.json
然后你可以再用如下命令运行你的私有网络:
geth --datadir path/to/custom/data/folder --networkid 15
网络联通性
为了节点都能够相互联通,并达成一致的状态,我们需要设置一些bootstrap节点,这些节点能够帮助其他节点实现相互联通,这里配置bootstrap节点的命令如下:
bootnote --genkey=boot.key
bootnote --nodekey=boot.key
一旦bootstrap节点在线,它将返回一个合法的远程连接URL,该URL能够用于实现节点之间的相互连接。请确保显示的IP地址同你期望的外网访问的IP地址一致。
注意:你也可以使用全功能的geth节点作为bootstrap节点。
启动你的网络成员节点
一旦你的bootstrap节点已经配置好,并能够通过网络访问,最简单的方式就是通过telnet <ip> <port>
进行测试。所有的geth节点都能够通过--bootnotes
选项指定bootnode
,在启动多个节点的时候,请确保是每个节点的数据文件夹是独立的,避免冲突,可以通过--datadir
的选项进行指定:
geth --datadir path/to/custom/data/folder --networkid 15 --bootnodes <bootnode-enode-url-from-above>
如此一来,你的私有网络就可以work了,该网络完全同主网络和测试网络隔离开,所以你需要配置一些挖矿节点接受并处理交易生成新的区块。
运行一个私有的矿工节点
在以太坊主网络上实现挖矿是一个非常艰巨的任务,需要利用GPA,针织需要OpenCL,CUDA的支持,但是在私有网络中就轻松一些了,一个单CPU的矿工实例基本上能够满足你的需求,它基本上能够完成稳定出块,并能够实现在较短的时间间隔内出块。
如下的命令能够帮助你启动一个新的geth挖矿节点:
$ geth <usual-flags> --mine --minerthreads=1 --etherbase=0x0000000000000000000000000000000000000000
请注意,所有的挖矿收入都会记录到--etherbase
这个账户上,进一步地,你可以通过指定--targetlimit
来限制gas limit
,也可以通过--gasprice
来指定gas的价格。