超级账本Besu快速入门教程【企业以太坊】

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介:

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列出的地址,就可以查看企业以太坊网络中的区块数据了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-44vk4G6K-1579227029039)(hyperledger-besu-tutorial/ExplorerSummary.png)]

可以在区块浏览器中看到有6个besu节点:4个普通节点、1个出块节点和一个引导节点。

点击 Best Block 右侧的区块号就可以显示该区块的详细数据:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xG0UGyt7-1579227029040)(hyperledger-besu-tutorial/ExplorerBlockDetails.png)]

点击左上角的放大镜,就可以搜索区块、交易哈希、或以太坊地址:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nE62glIk-1579227029041)(hyperledger-besu-tutorial/ExplorerSearch.png)]

3、监视Besu节点的运行状况

可以使用Prometheus和Grafana这些运维监视工具来可视化节点的健康状态和运行情况。参考前面给出的访问端结点,可以在你的浏览器中直接访问这些工具。例如使用Grafana:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YvCcHe4E-1579227029042)(hyperledger-besu-tutorial/grafana.png)]

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企业以太坊快速教程 — 汇智网

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
存储 算法 区块链
区块链入门应该做哪些事情
区块链入门应该做哪些事情 作为初学者,区块链入门应该做以下几件事情: 1. 学习基础知识:了解区块链、加密货币、数字钱包等基础知识,学习基本的投资和交易策略。 2. 选择合适的数字钱包:选择安全可靠的数字钱包,保护好自己的数字资产。 3. 选择合适的交易所:选择安全可靠的交易所,了解交易所的费用、交易量、交易对等信息。 4. 观察市场行情:观察市场行情,了解数字货币的价格走势和市场情况,制定投资计划。 5. 分散投资风险:不要把所有的资金都投入到同一种数字货币中,应该分散投资,降低风险。 6. 谨慎投资:投资数字货币需要谨慎,不要盲目跟风,要根据自己的情况和风险承受能力进行投资。
118 0
|
存储 供应链 算法
区块链入门
详细介绍一下区块链,简单了解一下区块链技术,更好了解区块链基础知识、应用领域与核心技术。
312 0
|
Web App开发 开发框架 安全
以太坊–智能合约开发介绍及环境搭建
智能合约(Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1995年由Nick Szabo首次提出。 智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。...
986 0
以太坊–智能合约开发介绍及环境搭建
|
区块链 开发工具 C++
[区块链] 带你进入Bitcoin开发 - 环境搭建
  学习完区块链枯燥乏味的、高深的、必备的基础知识后,终于可以走上开发之路了!真是迫不及待啦!之后博客更新主要放在区块链的开发上,相信这才是大多数同学更加感兴趣的地方!学习过程从最经典的区块链鼻祖-比特币学习,之后了解下区块链2.
2971 0
|
存储 供应链 算法
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
|
存储 供应链 算法
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
|
JavaScript 算法 前端开发
以太坊教程:入门学习开发以太坊dapp
一、区块链 1. 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量。既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链上的行为(包括比特币的运营,亦或是运行在区块链上的其他业务),这种机制就是共识机制。
2716 0
|
前端开发 JavaScript 区块链
以太坊智能合约开发入门
以太坊合约就是以太坊区块链特定账户地址上的一串代码(functions)和数据(state)。合约账户不仅可以相互间通讯,还可以执行几乎所有的图灵完备计算。以太坊区块链上的合约代码是特定的二进制形式,被称作以太坊虚拟机(EVM)二进制代码。本文以最受欢迎的Solidity为例说明以太坊开发如何入门。
5594 0