运行以太坊私有网络

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的价格。


terasum
453 声望51 粉丝

Blockchain从业者,Go, JavaScript, Haskell爱好者,函数式编程,高性能并发。