Besu参考文档:Using Ethash (Pow) - Hyperledger Besu
本文章依据环境:OpenJdk 16、Besu 21.1.7、Windows
1、安装Java环境
注意要求Java11以上,可以使用OpenJdk,Download the Microsoft Build of OpenJDK | Microsoft Docs
点下一步就行了
2、安装Besu
参考文档:Install Binary Distribution - Hyperledger Besu、下载地址Releases · hyperledger/besu · GitHub
- Linux/Mac的二进制编译过程请参考GitHub,因为我只有Windows环境的机器,此处不做介绍了,如有问题可以留言
- Windows版本在GitHub的release中提供了批处理脚本的版本,如图,上方的地址是Windows版的,可以直接配置环境变量就可使用besu命令;下方是二进制源码,需要编译
3、创建目录
- 创建目录data,每个节点都需要区块链数据的数据目录,节点启动时,Besu 会保存目录中的节点密钥。
- 创建目录config方便管理配置文件和创世文件等
4、编辑创世文件
- 编辑创世文件(privateNetworkGenesis.json),创世文件定义区块链的起源块(即区块链的开始)。创世文件包括用于配置区块链的条目,例如采矿难度、初始帐户和余额。
网络中的所有节点都必须使用相同的创世文件。链ID 默认为起源文件中的chainID。能够快速块挖掘。详细请参考:Create Besu Genesis File - Hyperledger Besu
{
"config": {
"constantinoplefixblock": 0,
"ethash": {
"fixeddifficulty": 1000
},
"chainID": 21066
},
"nonce": "0x42",
"gasLimit": "0x1000000",
"difficulty": "0x10000",
"alloc": {
"fe3b557e8fb62b89f4916b721be55ceb828dbd73": {
"privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",
"comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",
"balance": "0xad78ebc5ac6200000"
},
"f17f52151EbEF6C7334FAD080c5704D77216b732": {
"privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",
"comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",
"balance": "90000000000000000000000"
}
}
}
- 编辑配置文件(privateNetworkConfig.json)详细请参考:Specify Options in a Configuration File - Hyperledger Besu、Options - Hyperledger Besu
# Valid TOML config file 数据目录
data-path="C:/Users/Administrator/Documents/ethlink/data" # Path
# Chain 创世文件
genesis-file="C:/Users/Administrator/Documents/ethlink/config/SKC-privateNetworkGenesis.json" # Path to the custom genesis file
# Mining 开启挖矿
miner-enabled=true
# miner-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"
# 发放奖励指定账户
miner-coinbase="0x0000000000000000000000000000000000000000"
# 以下3块(p2p\rpc\ws)的host注意设置本机可访问的内外网IP
p2p-host="192.168.1.11"
p2p-port=30301
max-peers=42
# 第一次启动先注释掉,启动之后复制enodeURL配置好在打开注释,引导节点也是需要这样做,配置自己的enodeURL即可
bootnodes=["enode://3bf8bcebb……2d@192.168.1.11:30301"]
# RPC 接口配置
rpc-http-enabled=true
rpc-http-host="192.168.1.11"
rpc-http-port=2828
rpc-http-cors-origins=["all"]
# WS请求配置
rpc-ws-enabled=true
rpc-ws-host="192.168.1.11"
rpc-ws-port=2829
host-allowlist=["*"]
# 用于远程管理 管理方法需要添加ADMIN支持
rpc-http-api=["ADMIN","ETH","NET","WEB3"]
# 用于调试
logging="DEBUG"
miner-coinbase:挖掘并指定帐户(0x0……为链的第一个用户)以支付采矿奖励
5、启动服务
引导节点使用如上配置文件(privateNetworkConfig.json)启动,将第一个节点作为引导节点启动,并复制保留enodeURL备用
besu --config-file=config/privateNetworkConfig.json
节点启动时,enode URL 会显示。复制 enode URL,在以下步骤中指定节点-1作为引导节点。
enode://437876735f755774……c349cd708a63c9c26@192.168.1.221:30301
6、加入新节点
将引导节点中的区块创世文件(privateNetworkGenesis.json)复制到新的节点服务器上,仅使用同一个创世文件即可,网络配置使用命令参数就够了,不用单独配置文件了,执行以下命令
besu --data-path=data --genesis-file=config/privateNetworkGenesis.json --bootnodes=enode://3bf8bcebbd……6ef5c611528fa9da4@192.168.1.221:30301 --p2p-host='192.168.1.222' --p2p-port=30302
- data-path:数据目录
- genesis-file:创世文件
- bootnodes:引导节点的enodeURL
- p2p-host:每个节点可访问的外部IP,用于被引导节点发现
- p2p-port:每个节点有自己的端口,用于被引导节点发现,各节点不可重复
7、测试网络可用
可使用PostMan或curl等方式,POST请求引导节点地址使用RPC端口:
如:192.168.1.221:2828
请求体(method参考官方API:Besu API Methods - Hyperledger Besu):{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}
部署在公网注意事项
- 建议两个引导节点或以上,参考:Configure Bootnodes - Hyperledger Besu
- 保护enode信息安全
- 各节点由于需要相互通信所以需要适当对外暴露地址及端口,所以一定要配置好防火墙,保证节点网络安全
- 其余注意事项可详见官方文档的各处提示。
至此一个多节点的私链就部署完成了,链的地址就是引导节点的地址,可以进行合约发布、Dapp开发了;
如有疑问欢迎留言~~
接下来会搭建本地开发环境以及编写代币合约并部署到私链
见在ETH网络上发布代币智能合约(在以太坊发行自己的币种)