从零一步一步搭建以太坊私有链
我会说明一步一步怎么做,同时说明可能的注意事项。
1.下载geth
这一步网上很多,就不细说了,windows的,linux的,mac都有。
2. 创建genesis.json
关于genesis文件的介绍,在此处:http://blog.csdn.net/sportshark/article/details/51855007有详细说明,自行查阅。
我的genesis.json如下{ "config": { "chainId": 89120348581, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "20", "gasLimit": "2100000", "alloc": { "0x1a9ec3b0b807464e6d3398a59d6b0a369bf422fa": { "balance": "30000000000000000000000" }, "0x33df901abc22dcb7f33c2a77ad43cc98fbfa0790": { "balance": "40000000000000000000000" } } }
我这里预先给自己的测试账号分配了一些以太币,这样就不用挖矿了。
3.初始化区块链
这里需要注意的是,如果你要有多台电脑,那么每台电脑都要执行一遍下面的操作,也不能图省事,复制geth目录。geth --datadir ~/eth/privnet/ init genesis.json
,我设定的私有链主目录是~/eth/privnet,你可以根据自己的情况修改
4.节点运行
节点之间能够联通,首先要保证网络是通的,测试网络是否畅通,可以通过telnet ip 30303
来测试,有时候由于防火墙或者nat等原因,有些节点之间是没法直接通信的.
在各个节点上运行下面命令geth --datadir ~/eth/privnet --networkid 89120348581
这时候各个几点已经独立运行起来了,但是他们是没有连通的,因为他们的networkid,和创世块和以太坊网络上的都不一样,所以导致在p2p网络认证过程中会失败.
5.连接节点
在各自节点上运行geth attach来添加节点
各自节点信息可以通过admin.nodeInfo来获取,获取以后再其他节点通过admin.addPeer('enode://69e4026e61198088b9bdc353a7e0c924481b1835b35acbf298066634bf47406655516f251933992d3ae2d2752048c0df5656981d4113faa92bb0302243a62eea@xx.xx.xx.xx:30303')
来添加,
还有一种方式可以通过在运行参数中直接指定
如下:geth.exe --datadir=d:/privnet --networkid 89120348581 --bootnodes enode://69e4026e61198088b9bdc353a7e0c924481b1835b35acbf298066634bf47406655516f251933992d3ae2d2752048c0df5656981d4113faa92bb0302243a62eea@xx.xx.xx.xx:30303
如果有多个node,用逗号分隔即可.
6.注意事项
- 1) init genesis.json必须每个节点都运行一遍,否则添加节点的时候因为创世块不匹配,会失败,我就是在这里耽误了很久.
- 2) 节点之间单向网络通就可以,也就是在nat环境下A可以直接访问B,那就用A添加B
- 3) 后续转账等操作,必须启动挖矿,怎么挖矿,很简单,就是在启动的时候加上--mine参数就可以了.
7 加入我的私有链
- 1) 将上面的genesis.json内容保存为c:\privnet\genesis.json
- 2) 运行命令
geth --datadir c:\privnet init genesis.json
- 3) 启动节点
geth.exe --datadir=c:/privnet --networkid 89120348581 --bootnodes enode://69e4026e61198088b9bdc353a7e0c924481b1835b35acbf298066634bf47406655516f251933992d3ae2d2752048c0df5656981d4113faa92bb0302243a62eea@123.206.176.142:30303
- 4) 特别注意,genesis.json要一字不差,否则无法加入我的私有网络.
在私有链上挖矿很容易,方便自己测试开发.