[以太坊-007] 关于geth的大部分资料-2

it2024-12-27  11

1.dev modle

dev model开发模式的geth,提供很多便利,比如可以建立一个单节点以太坊测试网络,把gas设置为0,按需产生block等等。

数据需要存放在一个新目录下,启动命令添加--dev参数,如果使用remix ide做开发,需要指定cross cite domain参数,比如是在remix官网开发或者如果是本地开发,也是可以指定相应的域名或者ip帝制。可以在remix里连接到dev model节点,部署智能合约,观察区块生成执行等等。

geth --datadir test-chain-dir --rpc --dev --rpccorsdomain "https://remix.ethereum.org,http://remix.ethereum.org"

其他操作跟正常网络一样。

2.私有以太坊网络搭建

参考文献https://blog.csdn.net/u011680118/article/details/82378509

创建一个单独的目录,test-net-001,touch genesis.json,再创建子目录data。genesis.json内容如下:

{ "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x8000000", "alloc": {}, "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 } }

启动geth "geth --datadir data init genesis.json" (启动没成功,先暂停,后续视情况处理)。

3.按照https://geth.ethereum.org/getting-started/private-net 搭建私有网络

3.1 启动第一个节点: 

geth --datadir="/tmp/eth/60/01" --verbosity 6 --ipcdisable --port 30301 --rpcport 8101 console 2>> /tmp/eth/60/01.log

--datadir是存储节点数据的目录  

--verbosity 记录log的详细等级  

--ipcdisable 关闭ipc,在一台服务器上只能启动一个ipc,如果搭建多个节点,需要关闭ipc,以免出现冲突

--port 监听端口

--rpcprot http-rpc的监听端口

console 启动一个命令行交互终端

"2>> /tmp/eth/60/01.log",error信息重定位到log文件。

 在终端里执行:

> admin.nodeInfo.enode "enode://542a07787129404fbb5247c4c8e5c1301a6773f6bba47df59f48bf42c71db1ee476e81849b4bc25df4a4f4cbbef07aea40c0c678f89e1cf09ea8a3c1686e7fb2@192.168.1.3:30301"

3.2 启动第二个节点

geth --datadir="/tmp/eth/60/02" --verbosity 6 --ipcdisable --port 30302 --rpcport 8102 console 2>> /tmp/eth/60/02.log

在第二个节点执行命令,把第一个节点和第二个节点连成peer

admin.addPeer("enode://542a07787129404fbb5247c4c8e5c1301a6773f6bba47df59f48bf42c71db1ee476e81849b4bc25df4a4f4cbbef07aea40c0c678f89e1cf09ea8a3c1686e7fb2@192.168.1.3:30301")

返回值是True,表明这表命令执行了,(不代表执行是成功的)。

等待片刻,在两个console里都执行:

net.listening net.peerCount admin.peers

能看到各种信息,比如:

> admin.peers [{ caps: ["eth/63", "eth/64", "eth/65"], enode: "enode://b676fa69466d0d76b2ccfda9acc44120b1e214e5896eda48d0233abb180307f408c62babf9641e13dfd6865efa7aabdcd14b8fade87911d367ba6ea533d91417@107.148.144.136:30303", id: "c5d06ed09c1f11ad69269d331a2492113c2579342ca39a9178435b6ae31b3888", name: "Geth/v1.9.20-stable-979fc968/linux-amd64/go1.15", network: { inbound: false, localAddress: "192.168.199.100:45462", remoteAddress: "107.148.144.136:30303", static: false, trusted: false }, protocols: { eth: { difficulty: 1.8196851903604093e+22, head: "0xb35a74642e9fba921bd03c3a8652ab2f5e27311df2b4493cef9dbbf9717e1b05", version: 65 } } }]

运行发现不稳定,admin.peers可能会变成空集。

搭建网络脚本https://github.com/ethersphere/eth-utils,暂时没有运行。

3.3 bootnode

bootnode的作用:每一个节点启动的时候,都去寻找预先定义的若干个bootnode,寻找到以太坊主网的其他节点。如果是搭建以太坊私有网络,需要建立私有的bootnode,以便各节点能进行交互。

首先,要给bootnode生一个独一无二的id:"bootnode -genkey bootnode.key"

其次,启动bootnode:

bootnode -nodekey bootnode.key #结果输出 enode://38e262d4eed4b6556eca8a6c1a73b88c54ceb22a7fb92eb26b88fa84e2f349faa62a548c96c9be8ba8f110429eb9f9c77bce4ee463438717ea28733c88761d41@127.0.0.1:0?discport=30301 Note: you're using cmd/bootnode, a developer tool. We recommend using a regular node as bootstrap node for production deployments. INFO [10-22|22:20:56.322] New local node record seq=1 id=0f69a3fdf4d88ae7 ip=<nil> udp=0 tcp=0

再次,启动一个geth节点,指定bootnode

geth --bootnodes "enode://38e262d4eed4b6556eca8a6c1a73b88c54ceb22a7fb92eb26b88fa84e2f349faa62a548c96c9be8ba8f110429eb9f9c77bce4ee463438717ea28733c88761d41@127.0.0.1:30301" --datadir="/tmp/eth/60/02" --verbosity 6 --ipcdisable --port 30302 --rpcport 8102 console 2>> /tmp/eth/60/02.log

再启动一个节点,指定bootnode:

geth --bootnodes "enode://38e262d4eed4b6556eca8a6c1a73b88c54ceb22a7fb92eb26b88fa84e2f349faa62a548c96c9be8ba8f110429eb9f9c77bce4ee463438717ea28733c88761d41@127.0.0.1:30301" --datadir="/tmp/eth/60/03" --verbosity 6 --ipcdisable --port 30303 --rpcport 8103 console 2>> /tmp/eth/60/03.log

(实际测试还是有问题的,admin.peers是空的)

以后再解决

最新回复(0)