前言
这篇文章可能是最简单的内容,基于前一篇我们讲到的节点互联,我们在这一章将其运用起来。为什么选择win10系统,因为geth实际上并不很调系统,都可以运行,然后很多教程都是linux下的我就写一篇关于windows下的节点构建和并联吧。
环境准备
windows 10
(非必须)geth 1.7.3
创世文件 init.json
geth下载地址:
节点构建
本次构建使用到的创世文件:
{
"nonce": "0x0000000000000075",
"config": {
"chainId": 4567,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0xffffffff",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": { }
}
复制代码
和之前文章一样我们需要使用初始化文件夹命令来初始化datadir
不过这次我们初始化两个目录
geth init init.json --datadir ./demo1
geth init init.json --datadir ./demo
之所以初始化两次是因为前面文章提到,为了让私链的多个节点互联,前提就是保证每一个节点的创世文件相同,否则无法互联。
节点启动
我们先启动主要节点,并开启json RPC
服务
geth --identity "prcService" --rpc --rpccorsdomain "*" --datadir ./demo --port "30301" --nodiscover --rpcport 8101 --rpcapi "personal,db,eth,net,web3" --networkid 1998 console 2>> ./geth.log
这里标记的--networkid一定要保证和另一个启动的节点一致。
在启动第二个矿工节点前,我们先复习一下上一章讲到的通过命令行创建账户的命令:
geth account new --datadir ./demo1
输入两次账户密码,就会在刚刚创建的demo1中新建一个账户,之所以创建一个账户是为了挖矿需要,启动挖矿必须指定一个账户否则无法启动挖矿。
然后我们再启动挖矿节点:
geth --datadir ./demo1 --nodiscover --ipcdisable --mine --networkid 1998 --minerthreads=4 console 2>> ./geth1.log
解释下几个不同的参数:
--ipcdisable
表示启动节点时关闭文件rpc服务,因为windows下的prc是默认放在同一个文件下,导致多节点启动时无法启动并报错:Fatal: Error starting protocol stack: Access is denied.
解决办法就是添加这个参数关闭这个节点的rpc服务。
--mine
表示启动节点就开始挖矿工作,所以之前我们需要创建一个账户,没有账户然后又添加了这个参数会报错然后无法启动。
--minerthreads=4
表示启动挖矿的线程数。
再次提醒一定要保证networkid一致。
节点互联
在保证networkid一致,创世文件一致的情况下,我们可以使用多种方法来互联节点,这里我们就演示最简单的通过控制台互联节点。
在demo中输入
admin.nodeInfo
得到节点的链接地址:
{
enode: "enode://000b59e137591a1a4c4b361df824d3f1ce4b872c0b4499d790913dfc8dfb57d97a311a26881cb45a0267d8c0b2a58565cb9bb02aa6a9ca31b7eab64aa3bf4e50@[::]:3031?discport=0",
id: "000b59e137591a1a4c4b361df824d3f1ce4b872c0b4499d790913dfc8dfb57d97a311a26881cb45a0267d8c0b2a58565cb9bb02aa6a9ca31b7eab64aa3bf4e50",
ip: "::",
listenAddr: "[::]:3031",
name: "Geth/v1.7.2-stable-1db4ecdc/windows-amd64/go1.9",
ports: {
discovery: 0,
listener: 3031
},
protocols: {
eth: {
difficulty: 88872041,
genesis: "0xc9400712dce394e4bb9019f317751286cdf4f594ebad0a5acf83162a373461d3",
head: "0x62b39a9a3d9d2b3a79ea2d6648b63b0b63baa9f51f8b34987a52da9e8222bcef",
network: 11
}
}
}
复制代码
然后将enode内容复制,在demo1
中输入admin.addPeer(内容)
添加节点,添加之后可以通过admin.peers
命令查看到添加的节点
可以试试在两个节点输入admin.peers
都可以查看到连接信息
来自本人: 以太坊极客