天天看點

超級賬本Besu快速入門教程【企業以太坊】

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列出的位址,就可以檢視企業以太坊網絡中的區塊資料了。

超級賬本Besu快速入門教程【企業以太坊】

可以在區塊浏覽器中看到有6個besu節點:4個普通節點、1個出塊節點和一個引導節點。

點選 Best Block 右側的區塊号就可以顯示該區塊的詳細資料:

超級賬本Besu快速入門教程【企業以太坊】

點選左上角的放大鏡,就可以搜尋區塊、交易哈希、或以太坊位址:

超級賬本Besu快速入門教程【企業以太坊】

3、監視Besu節點的運作狀況

可以使用Prometheus和Grafana這些運維監視工具來可視化節點的健康狀态和運作情況。參考前面給出的通路端結點,可以在你的浏覽器中直接通路這些工具。例如使用Grafana:

超級賬本Besu快速入門教程【企業以太坊】

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/jsonrpc

privateKey

替換為前面的賬戶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企業以太坊快速教程 — 彙智網