这里分享的是关于在是在私有链中,用一台电脑去建立多个节点,并进行节点连接html
1. 准备创世块文件
node
本身建立一个创世块文件或是称为根节点是为了区分公有链和私有链。同一个网络下只有一个创世块,并且只有处于相同的创世块才能够正常进行通讯。创世块文件是一个json文件。格式以下:web
{ "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasLimit": "0x80000000", "difficulty": "0x1", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { } }
其中:json
nonce: 64位随机数,用于合格区块的判断api
timestamp:创世块的时间戳微信
parentHash: 上一个节点的hash值,因为是创世块,为第一个节点,因此他不存在parent节点网络
extraData:附加信息,能够加入个性信息等cors
gasLimit: gas消耗总量限制,限制区块能包含的交易信息总和dom
difficulty: 区块难度,若是这个值设置的越大,挖矿就越难ide
mixhash:与nonce配合使用,用于挖矿
coinbase:矿工的帐号信息
alloc:用于预置帐号和帐号的以太币数量
首先,建立一个genesis.json 文件。而后把上面的内容复制,根据本身的需求修改相应的参数。
cd到这个json所在的目录,运行:
geth --datadir "node1/" init genesis.json
运行以后,会在该目录下生成一个node1的文件夹,同时在node1文件夹下生成geth 和 keystore两个文件夹。keystore里存放的就是你后续建立帐号的信息
2. 启动节点
初始化节点后,须要启动这个节点。
geth --identity "node1" --rpc --rpcport 8000 --rpccorsdomain "*" --datadir "./" --port 30303 --rpcapi "db,eth,net,web3" --networkid 999 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) cd 到 genesis.json 目录下
2) 运行 一样的初始化命令
geth --datadir "node2/" init genesis.json
3) 用下面的命令启动第二个节点
geth --identity "node2" --rpc --rpcport 8001 --rpccorsdomain "*" --datadir "./" --port 30306 --rpcapi "db,eth,net,web3" --networkid 999 console 2>>geth.log
rpc端口和节点端口都要和第一个节点不一样,节点端口默认的port是 30303,rpc端口默认为8545,若是node2节点的rpc端口或是节点端口采样默认值,就会出现端口被第一个占用的状况。
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信息不断的更新,那就说明链接成功了。
注意:这里的创世块文件必定要用同一个,不然addPeer虽然返回成功,可是admin.peers查看是没有的。
欢迎你们关注微信号:蜗牛讲技术。扫下面的二维码