{
"config": {
"chainId": 8,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {"0x0be5196a5503e4051b21e713f245b3ab24bcfeaf": {"balance":"2000000000000000000000000"}},
"coinbase" : "0x0be5196a5503e4051b21e713f245b3ab24bcfeaf",
"difficulty" : "0x20000",
"extraData" : "0x74686520726f73657320696e206865722068616e642c2074686520666c61766f7220696e206d696e65",
"gasLimit" : "0x2fefd8",
"nonce" : "0x00000000c000ff59",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x599DA33A"
}
准备好创世快配置文件后,需要对区块链进行初始化,将上面的创世快信息写到区块链中。首先先创建一个目录用于存放区块链数据,这里我在桌面创建一个名为privatechain的文件夹。
$mkdir privatechain
然后把刚才的创世块的配置文件保存到privatechain目录内,再在privatedata内创建一个名为data和log的目录,用于保存数据和日志。目录结构如下:
最后在data目录中创建node0、node1、node2目录。
首先确保自己在privatechain目录下,然后执行以下命令对区块链进行初始化:
geth --datadir ./data/node0 init ./genesis.json
命令的主题是geth init表示初始化区块链,命令可以带参数和选项:
上面的命令运行成功后,会读取genesis.json文件,根据其中的内容会把创世块写入到区块链中。(下图中node3应为node0)
初始化成功后会在node0中生成geth和keystore两个文件夹。其中geth存放的是区块信息,keystore中存放的是账户信息。
初始化完成以后你就用友一条自己的私有链了,之后就可以启动自己的私有链进行一些操作。执行以下命令来启动节点
geth --datadir ./data/node0 --networkid 314590 --ipcdisable --port 61910 --rpcport 8200 console 2>>./log/geth1.log
上述命令的主体是geth consoal,表示启动该节点并进入交互控制台。其中--networkid 314590 表示私有链的网络id。网络id在连接到其他接点时也会用到。以太坊公网的id是1,为了不产生冲突,这里要指定自己的网络id。
运行成功后,就启动了区块链节点并进入了Javascript Console。
这是一个交互式的Javascript执行环境,在这里面可以执行Javascript代码,其中>
是命令提示符。在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:eth、net、admin、miner、personal、txpool、web3这几个模块。
以太坊私有链创建多个节点,并实现各个节点之间的相互通信,必须指定相同的networkid。
打开一个新的窗口对第二个节点进行初始化:
geth --datadir ./data/node1 init ./genesis.json
启动我二个节点
geth --datadir ./data/node1 --networkid 314590 --ipcdisable --port 61911 --rpcport 8101 console 2>>./log/geth1.log
这里的--port 和--rpcport要与第一个节点的不通。--networkid必须相同。
要想连接到其他节点,必须知道节点的enode信息。
然后再另一个节点中执行admin.addPeer();
此时连个节点已经连接好了。