Besu是Hyperledger中的企業以太坊産品,其最大優勢在于相容以太坊主網。本教程介紹如何使用Hyperledger Besu快速啟動一個企業以太坊網絡并利用JSON RPC進行資料查詢和交易送出,以及如何使用Truffle開發企業以太坊DApp并使用内置的工具進行資料調試和運維監控。
1、啟動企業以太坊網絡
以太坊教程推薦: Dapp入門 | 電商Dapp實戰 Token實戰 Php對接 Java對接 Python對接 C#對接 Dart對接
首先克隆Besu的quickstart倉庫的源代碼:
git clone https://github.com/PegaSysEng/besu-quickstart.git
然後進入besu-quickstart目錄,執行如下指令建構besu的docker鏡像:
./run.sh
上面的指令會建構docker鏡像并啟動4個容器來模拟一個包含6個besu節點的企業以太坊網絡。當腳本執行完成後,你可以看到如下輸出資訊:
*************************************
Besu Quickstart <version>
*************************************
List endpoints and services
----------------------------------
Name Command State Ports
---------------------------------------------------------------------------------------------------------
besu-quickstart_bootnode_1 /opt/besu/bootnode_sta ... Up 30303/tcp, 8545/tcp, 8546/tcp
besu-quickstart_explorer_1 nginx -g daemon off; Up 0.0.0.0:32768->80/tcp
besu-quickstart_grafana_1 /run.sh Up 3000/tcp
besu-quickstart_minernode_1 /opt/besu/node_start.s ... Up 30303/tcp, 8545/tcp, 8546/tcp
besu-quickstart_node_1 /opt/besu/node_start.s ... Up 30303/tcp, 8545/tcp, 8546/tcp
besu-quickstart_node_2 /opt/besu/node_start.s ... Up 30303/tcp, 8545/tcp, 8546/tcp
besu-quickstart_node_3 /opt/besu/node_start.s ... Up 30303/tcp, 8545/tcp, 8546/tcp
besu-quickstart_node_4 /opt/besu/node_start.s ... Up 30303/tcp, 8545/tcp, 8546/tcp
besu-quickstart_prometheus_1 /bin/prometheus --config.f ... Up 9090/tcp
besu-quickstart_rpcnode_1 /opt/besu/node_start.s ... Up 30303/tcp, 8545/tcp, 8546/tcp
以及通路端結點清單:
****************************************************************
JSON-RPC HTTP service endpoint : http://localhost:32768/jsonrpc
JSON-RPC WebSocket service endpoint : ws://localhost:32768/jsonws
GraphQL HTTP service endpoint : http://localhost:32768/graphql
Web block explorer address : http://localhost:32768
Prometheus address : http://localhost:32768/prometheus/graph
Grafana address : http://localhost:32768/grafana-dashboard
****************************************************************
- JSON-RPC HTTP服務用于DApp或Metamask錢包的通路
- JSON-RPC WebSocket服務用于DApp通過websocket通路節點
- GraphQL HTTP服務用于DApp或Metamask錢包的通路節點的GraphQL服務
- Web區塊浏覽服務用于浏覽區塊,在你的浏覽器中輸入該位址即可
- Prometheus服務用于為Prometheus儀表盤提供名額資料
- Grafana服務用于為Grafana儀表盤提供資料
要再次顯示通路端結點,可以使用如下指令:
./list.sh
2、使用企業以太坊區塊浏覽器
在本教程中我們使用Alethio輕量級以太坊浏覽器,你也可以使用
EthScan。
在你的浏覽器中打開前面提到的web block explorer endpoint列出的位址,就可以檢視企業以太坊網絡中的區塊資料了。

可以在區塊浏覽器中看到有6個besu節點:4個普通節點、1個出塊節點和一個引導節點。
點選 Best Block 右側的區塊号就可以顯示該區塊的詳細資料:
點選左上角的放大鏡,就可以搜尋區塊、交易哈希、或以太坊位址:
3、監視Besu節點的運作狀況
可以使用Prometheus和Grafana這些運維監視工具來可視化節點的健康狀态和運作情況。參考前面給出的通路端結點,可以在你的浏覽器中直接通路這些工具。例如使用Grafana:
4、使用JSON-RPC通路Besu節點
Besu支援标準的以太坊JSON-RPC API接口。例如使用curl調用
web3_clientVersion指令來檢視節點的版本:
curl -X POST --data '{
"jsonrpc":"2.0",
"method":"web3_clientVersion",
"params":[],
"id":1
}' <http-rpc-endpoint>
其中
<http-rpc-endpoint>
表示前面列出的通路端結點的位址,你需要根據自己的實際情況替換,例如
http://localhost:32768/jsonrpc
。上面指令的傳回結果類似如下:
{
"jsonrpc" : "2.0",
"id" : 1,
"result" : "besu/<version number>"
}
或者使用
net_peerCount指令檢視節點已連接配接的Peer數量:
curl -X POST --data '{
"jsonrpc":"2.0",
"method":"net_peerCount",
"params":[],
"id":1
}' <http-rpc-endpoint>
結果如下:
{
"jsonrpc" : "2.0",
"id" : 1,
"result" : "0x6"
}
eth_blockNumber 檢視最新的區塊号:
curl -X POST --data '{
"jsonrpc":"2.0",
"method":"eth_blockNumber",
"params":[],
"id":1
}' <http-rpc-endpoint>
{
"jsonrpc" : "2.0",
"id" : 1,
"result" : "0x8b8"
}
5、使用MetaMask建立企業以太坊交易
在發送企業以太坊交易之前,我們需要先建立一個賬号,或者使用這個私有網絡的創世配置中已經聲明的幾個賬号:
賬号1 :同時也是币基位址
Address: 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73
Private key : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63
Initial balance : 0xad78ebc5ac6200000 (200000000000000000000 in decimal)
賬号2:
Address: 0x627306090abaB3A6e1400e9345bC60c78a8BEf57
Private key : 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3
Initial balance : 0x90000000000000000000000 (2785365088392105618523029504 in decimal)
賬号3:
Address: 0xf17f52151EbEF6C7334FAD080c5704D77216b732
Private key : 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f
Initial balance : 0x90000000000000000000000 (2785365088392105618523029504 in decimal
在登入進MetaMask之後,連結到我們建立的Besu網絡的某個節點,然後你就可以建立交易了。
6、基于Besu網絡的Truffle寵物商店示範
要運作Truffle的Pet Shop示範,首先我們需要安裝truffle及pet-shop模闆,然後還需要針對Besu的企業以太坊網絡進行一些簡單的調整。
首先安裝truffle:
npm install -g truffle
然後建立pet-shop-tutorial目錄并進入該目錄:
mkdir pet-shop-tutorial
cd pet-shop-tutorial
然後解壓Truffle的pet-shop box:
truffle unbox pet-shop
安裝truffle-wallet:
npm install --save @truffle/hdwallet-provider
接下來修改pet-shop-tutorial目錄中的truffle-config.js檔案,以便添加我們的錢包提供器。請參考以下内容進行修改:
const PrivateKeyProvider = require("truffle-hdwallet-provider");
const privateKey = "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63";
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// for more about customizing your Truffle configuration!
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match any network id
},
quickstartWallet: {
provider: () => new PrivateKeyProvider(privateKey, "<YOUR HTTP RPC NODE ENDPOINT>"),
network_id: "*"
},
}
};
将
<YOUR HTTP RPC NODE ENDPOINT>
替換為你的
HTTP RPC
通路端結點,例如
http://localhost:32770/jsonrpcprivateKey
替換為前面的賬戶1,即币基位址,其中有以太币。
由于我們使用企業以太坊網絡而不是Ganache仿真器,是以在執行合約部署時,需要指定網絡:
truffle migrate --network quickstartWallet
輸出結果類似如下:
sing network 'quickstartWallet'.
Running migration: 1_initial_migration.js
Deploying Migrations...
... 0xfc1dbc1eaa14fa283c2c4415364579da0d195b3f2f2fefd7e0edb600a6235bdb
Migrations: 0x9a3dbca554e9f6b9257aaa24010da8377c57c17e
Saving successful migration to network...
... 0x77cc6e9966b886fb74268f118b3ff44cf973d32b616ed4f050b3eabf0a31a30e
Saving artifacts...
Running migration: 2_deploy_contracts.js
Deploying Adoption...
... 0x5035fe3ea7dab1d81482acc1259450b8bf8fefecfbe1749212aca86dc765660a
Adoption: 0x2e1f232a9439c3d459fceca0beef13acc8259dd8
Saving successful migration to network...
... 0xa7b5a36e0ebc9c25445ce29ff1339a19082d0dda516e5b72c06ee6b99a901ec0
Saving artifacts...
你可以在區塊浏覽器中檢視上述輸出中的合約位址。
同樣,在執行測試時也要指定使用我們的企業以太坊網絡:
truffle test --network quickstartWallet
輸出結果如下:
Using network 'quickstartWallet'.
Compiling ./contracts/Adoption.sol...
Compiling ./test/TestAdoption.sol...
Compiling truffle/Assert.sol...
Compiling truffle/DeployedAddresses.sol...
TestAdoption
✓ testUserCanAdoptPet (2071ms)
✓ testGetAdopterAddressByPetId (6070ms)
✓ testGetAdopterAddressByPetIdInArray (6077ms)
3 passing (37s)
7、企業以太坊網絡的停止/重新開機/清理
使用如下腳本停止Besu構成的企業以太坊網絡,但不删除dockers容器:
./stop.sh
使用如下指令重新啟動企業以太坊網絡:
./resume.sh
如果要停止網絡并删除相應的docker容器,使用如下指令:
./remove.sh
原文連結:
Hyperledger Besu企業以太坊快速教程 — 彙智網