搭建以太坊多节点私有链

私有链搭建

一、准备创世块配置文件

{
  "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目录。

1 、创建第一个节点

首先确保自己在privatechain目录下,然后执行以下命令对区块链进行初始化:

geth --datadir ./data/node0 init ./genesis.json

命令的主题是geth init表示初始化区块链,命令可以带参数和选项:

  1. --datadir:后面跟本节点数据存放的目录。
  2. genesis.json:是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这几个模块。

2、创建第二个节点

以太坊私有链创建多个节点,并实现各个节点之间的相互通信,必须指定相同的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必须相同。

3、连接两个节点

要想连接到其他节点,必须知道节点的enode信息。


然后再另一个节点中执行admin.addPeer();


此时连个节点已经连接好了。







你可能感兴趣的:(搭建以太坊多节点私有链)