主页 > imtoken钱包2023最新版 > 以太坊在一台电脑上部署多个节点
以太坊在一台电脑上部署多个节点
我这里分享的是用电脑在私有链中创建多个节点,并将它们链接起来
1.准备创世块文件
创建一个创世块文件或根节点来区分公链和私链。 同一个网络下只有一个创世块,只有同一个创世块才能正常通信。 创世块文件是一个 json 文件。 格式如下:
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0",
"gasLimit": "0x80000000",
"difficulty": "0x1",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": { }
}
在:
nonce:64位随机数,用于判断合格区块
时间戳:创世块的时间戳
parentHash:前一个节点的hash值,由于是创世块,是第一个节点以太坊全节点搭建,所以没有父节点
extraData:附加信息,可以添加个性信息等
gasLimit:gas消耗总量限制,限制一个区块可以包含的交易信息总和
difficulty:区块难度,这个值设置越大,挖矿难度越大
mixhash:与nonce结合使用进行挖矿
coinbase:矿工账户信息
alloc:用于预置账户和账户的以太币数量
首先,创建一个 genesis.json 文件。 然后复制上面的内容,根据自己的需要修改相应的参数。
cd到json所在目录,运行:
geth --datadir "node1/" init genesis.json
运行后会在该目录下生成一个node1文件夹,在node1文件夹下会生成geth和keystore两个文件夹。 密钥库存储您后续创建帐户的信息
2.启动节点
节点初始化完成后,需要启动它。
geth --identity "node1" --rpc --rpcport 8000 --rpccorsdomain "*" --datadir "./" --port 30303 --rpcapi "db,eth,net,web3" --networkid 999 控制台 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是节点的地址
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 控制台 2> >geth.log
rpc 端口和节点端口必须与第一个节点不同。 节点端口默认为30303,rpc默认端口为8545。如果node2节点的rpc端口或者节点端口的采样默认值,会出现该端口为第一个占用的情况。
4.连接两个节点
通过admin.addPeer("node's 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视图。