0%

一条命令成功搭建以太坊私链

本文亮点

作者认为,本教程是目前网络上最新且最简单的,“一条命令”指的并不是真的只需一条命令,但是核心命令只有一条

  • 最新:网上的教程基本是一年前甚至几年前写的,某些参数和控制台命令已经不能使用
  • 最简单:相较于作者之前写的教程和网上的教程,省去了与 geth console 交互的步骤

本文的命令以 Windows 系统为准

配置私链

这一步可以参考作者以前的教程:搭建以太坊私链,到搭建私链前的部分

搭建私链

创造配置文件

在不同于以太坊源码的文件路径下创一个文件夹和.json文件,命名为genesis.json

1
2
3
mkdir ./project
mkdir ./project/node1
# 在./project/node1/ 下创建genesis.json

在这个 json 文件下,配置这个私链的参数,注意这里的 “alloc” 字段下的地址,是需要填入 geth account new 新建的用户
这里使用的共识机制是 Clique

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"config": {
"chainId": 12345,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"clique": {
"period": 5,
"epoch": 30000
}
},
"difficulty": "1",
"gasLimit": "8000000",
"extradata": "0x0000000000000000000000000000000000000000000000000000000000000000890fb1799fe7fa4b8e01ccf343e088d946fcd5560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"890fb1799fe7fa4b8e01ccf343e088d946fcd556": { "balance": "300000" },
"14c6ead33b265da463eef7367798ade6aa8e9d12": { "balance": "400000" }
}
}

初始化链

1
geth --datadir node1 init node1/genesis.json

成功后会出现以下提示 (可能会有 Error 信息,可以忽略)

假如出现以下报错,可以删除 ./project/MyChain/ 目录下新生成的两个文件夹,只保留 .json 文件

创建用户

这里要用 geth account new 创建一个用户,用户的信息会存在 /project/node1/keystore 下
此处需要输入密码创建用户,要记得这里的密码,待会有用

启用链

此处启用私链,并且开启RPC接口
此处就是本文的重点,也就是题目中所说的“一条命令”

1
geth --datadir node1 --http --http.addr 0.0.0.0 --http.port 8545 --http.corsdomain "*" --networkid 12345 --mine --miner.etherbase "0x890fb1799fe7fa4b8e01ccf343e088d946fcd556" --allow-insecure-unlock --unlock "0x890fb1799fe7fa4b8e01ccf343e088d946fcd556" --password password.txt
  • http:开启 RPC 接口
  • http.port:指定端口,默认8545
  • http.addr :HTTP-RPC 监听的ip地址,默认localhost
  • http.corsdomain:跨域请求,”*”为允许所有来源的跨域请求
  • networkid:指定链的id,以太坊主链id为1
  • mine:启用挖矿,只有启用了才能打包交易成区块
  • miner.etherbase:需要显式指定coinbase,这里选刚刚创建的账户
  • allow-insecure-unlock:这是最重要的一个参数,没有这个参数 unlock 和 http 不能共存
  • unlock:非交互式解锁账户,选择刚刚创建的账户
  • password:在 /project 下新建 password.txt,把刚刚的密码放到这个文件中,通过这个参数就可以被读取到,而不用交互式输入

如果需要创建多节点,有一些参数是需要显式指定的,不同节点这些参数也要不同,否则会报错

  • port:指定链这个程序占用的端口,默认30303
  • authrpc.port:authenticated APIs的端口,默认8551
  • ipcpath:默认 \.\pipe\geth.ipc

启用成功后,可以发现链已经在挖矿了,此时提交交易可以被顺利执行;而且 http 服务也成功被开启

赏个鸡腿🍗