首页 > 代码库 > BlockChain-在一台电脑上部署多个节点

BlockChain-在一台电脑上部署多个节点

这里分享的是关于在是在私有链中,用一台电脑去创建多个节点,并进行节点链接

1. 准备创世块文件

自己创建一个创世块文件或是称为根节点是为了区分公有链和私有链。同一个网络下只有一个创世块,而且只有处于相同的创世块才可以正常进行通信。创世块文件是一个json文件。格式如下:

{  "nonce": "0x0000000000000042",  "timestamp": "0x0",  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",  "extraData": "0x0",  "gasLimit": "0x80000000",  "difficulty": "0x1",  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",  "coinbase": "0x3333333333333333333333333333333333333333",  "alloc": {     }}

其中:

   nonce:  64位随机数,用于合格区块的判断

   timestamp:创世块的时间戳

   parentHash: 上一个节点的hash值,由于是创世块,为第一个节点,所以他不存在parent节点

   extraData:附加信息,可以加入个性信息等

   gasLimit: gas消耗总量限制,限制区块能包含的交易信息总和

   difficulty: 区块难度,如果这个值设置的越大,挖矿就越难

   mixhash:与nonce配合使用,用于挖矿

   coinbase:矿工的账号信息

   alloc:用于预置账号和账号的以太币数量

首先,创建一个节点目录,在目录下创建一个json文件,比如:genesis.json。然后把上面的内容复制,根据自己的需求修改相应的参数。

cd到这个json所在的目录,运行:

<style></style>
geth --datadir "./" init genesis.json

 运行之后,会在当前文件夹下生成geth 和 keystore两个文件夹。keystore里存放的就是你后续创建账号的信息

2. 启动节点

 初始化节点后,需要启动这个节点。

geth --datadir "./" --nodiscover console 2>>geth.log

 这里就启动了改节点,默认的启动端口是 30303.启动之后,输入admin.nodeInfo 查看节点信息:

 

{  enode: "enode://2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a@[::]:30303?discport=0",  id: "2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a",  ip: "::",  listenAddr: "[::]:30303",  name: "Geth/v1.5.9-stable-a07539fb/darwin/go1.8",  ports: {    discovery: 0,    listener: 30303  },  protocols: {    eth: {      difficulty: 1,      genesis: "0x6099b65e564bd511f49e8f39ba27b6a68b6b78fd1481592257f06bbf93abe624",      head: "0x6099b65e564bd511f49e8f39ba27b6a68b6b78fd1481592257f06bbf93abe624",      network: 1    }  }}

 

 enode里就是节点的address 

3. 创建第二个节点  

 单独的一个节点,是可以创建不同的账号的,之后可以用不同的账号进行交易。如果要实现多个节点,那就需要再重新创建节点。

 1) 首先创建一个空的文件夹作为第二个节点,把第一个节点的json文件拷贝到第二个节点的文件夹目录下

 2) 运行 同样的初始化命令

geth --datadir "./" init genesis.json

 3) 用下面的命令启动第二个节点

geth --datadir "./" --nodiscover --port 30304 console 3>>geth.log

 如果这里不指定 port ,那么默认的port是 30303,就会出现端口被第一个占用的情况,所以这里需要指定一个不同的端口号启动。

4. 把两个节点连接起来

   通过admin.addPeer(“节点的enode”)添加。如上面第一个节点和第二个节点连接

admin.addPeer("enode://2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a@[::]:30303?discport=0")

 控制台会返回一个true

这个时候,随便在哪个节点的控制台上,输入 admin.peers() 就可以查看链信息了

5.验证是否连接成功

 随便在哪个节点上进行挖矿操作,看另外一个节点是否会同步信息。比如我这里再第一个节点上进行挖矿操作。注意:要进行挖矿一定要先有账号。我们上面提到的所有的操作都只是节点操作,没有涉及到账号的操作。

 首先用命令创建一个账号:

personal.newAccount("xxx")

xxx是表示该账号的密码,后面再进行交易的时候需要用到。

创建账号后,就可以进行挖矿处理了。

miner.start()

在挖矿的过程中如何查看是否有进行同步操作呢?

 在第一个挖矿的期间,cd到第二个节点目录下,执行 

tail -f geth.log

 在控制台上你如果看到block信息不断的更新,那就说明连接成功了。  

  

  

  

 

 

BlockChain-在一台电脑上部署多个节点