【区块链】HyperLedger Besu Alethio区块浏览器

上一节我们已经完成了整个Besu区块链网络的搭建,本章将介绍通过Alethio区块链浏览器对上链数据进行查看和校验。同时,由于Besu区块链是可以通过EthSigner来实现带权限(token)访问的,那么在权限访问下还需要添加explorer-besu-plugin来实现,这个也会在本节中一并叙述。

Alethio浏览器

上面提到的Alethio区块链浏览器其实是一个专门用于以太坊区块链实现可视化的交互平台,全称Alethio Ethereum Lite Explorer(以下简称“AELE”)。

有浏览过Besu在线文档的小伙伴应该都清楚AELE是Besu官方推荐的以太浏览器,它开源且界面支持中文这对于中国地区开发者算是相当友好了(连在线翻译的工作都可以省了),并且不用过多的配置可以说说是“开箱即用”级别的了推荐各位使用。

image.png
接下来将分别讲述“不带token”和“带token”的两种实现方式。

不带token

或许有小伙伴会问,为什么还会有不带token的解决方案呢?基于平台或者系统层面Besu私有链(或联盟链)应“受限访问”才能保证接入安全,关于这点我主要有以下3点考虑:

  1. 若只是说“访问白名单”功能的话,建议是在服务器层面进行设定而不是直接在区块链节点中做设定。这是考虑到商业使用前提下宿主机本来就存在访问策略。只需要统一管理即可不需要又另外设定徒增运维难度;
  2. 由于数据上链都需要先经过EthSigner校验token的有效性,在分布式高并发下网络开销可能会造成性能问题。即使不考虑网络因素,EthSigner节点使用“多租户”模式下也会受制于本地硬件性能(这里跟我使用本地密钥存储方式有关,会产生大量磁盘IO引起性能问题,不过可以通过使用固态硬盘来解决这个问题,只不过成本略高)。
  3. 获取token进行交易一般是在“隐私交易”场景下作为安全防御机制使用,若不涉及隐私交易的情况下可忽略这部分功能(坦白说,隐私交易这种业务场景非常少,因为需要企业具备资质才能做,并且区块链“受信”问题几乎是无解的。即使你的区块链技术能够公开且通过第三方安全审查,但仍有可能达不到“受信”的要求,至于个中原因相信大家应该懂的)。

回归主题…因此这里其实可以直接使用Besu官方的解决方案 alethio/ethereum-lite-explorer:latest 来部署区块链浏览器。

还是老样子,先下载最新的镜像:

[root@node206 ~]# docker pull alethio/ethereum-lite-explorer:latest
latest: Pulling from alethio/ethereum-lite-explorer
cbdbe7a5bc2a: Pull complete 
6ade829cd166: Pull complete 
195a36ec5996: Pull complete 
db920b47b7ea: Pull complete 
e5d20234098f: Pull complete 
999a52eef64d: Pull complete 
6ac662ed9701: Pull complete 
bcc99b34b1bb: Pull complete 
695b2acc9528: Pull complete 
Digest: sha256:1de833711ff9f3ed26987e701c1d12789bcfb1261ead87e1f088b8a0554f9944
Status: Downloaded newer image for alethio/ethereum-lite-explorer:latest
docker.io/alethio/ethereum-lite-explorer:latest

接着就能够根据以下命令创建

docker run \
--name blockchain_explorer \
-p 80:80 \
-e APP_NODE_URL="http://192.168.200.203:8644" \
--restart always \
-d alethio/ethereum-lite-explorer:latest

启动之后访问 http://192.168.200.206/ 就能够看到效果了,如下图所示
1.png

带token

那带token的时候要怎么做呢?为什么我按照网上说的做但是无法登录的呢?为什么alethio/ethereum-lite-explorer整合插件不成功的呢?… 那是因为网上说的都只说了一半,哪怕是Besu官网。

首先这个时候我们就不能按照Besu官方说的那样直接使用alethio/ethereum-lite-explorer:latest版本了。为什么?因为Besu的带权限区块链,需要账号登录拿到JWT Token后方可操作,一般的AELE是不带Header访问的因此无法使用。怎么办呢?那就看一下AELE的Github文档是怎样解决这个问题吧。

image.png

如上图所示,我们若要访问带权限的区块链系统需要增加一个验证身份的插件,在AELE处理eth-lite之前就需要先做身份验证。下方还给了个Besu插件的例子连接。如下图所示:

image.png

按上图所述,的确是存在针对besu私有链登录的插件

image.png

并且这里已经给出配置例子,在配置中的loginUrl参数项填写Orion集成后的Besu访问登录地址

image.png

接着还要更新eth-lite的适配器项,将nodeUrl(节点地址)配置写成浏览器需要访问的节点地址

image.png
最后给出了在Docker中运行的启动用脚本,这里主要说的是让我们另外开一个config.json文件在docker run语句中进行挂载(-v),用这个新建config.json文件覆盖掉容器中的config.json文件。同时,我们也留意到这里让我们pull的docker镜像是adetante/explorer-besu-plugin:1.0.4,那事不宜迟就先pull镜像。

但是,docker报了一个错误,如下所示:

Error response from daemon: manifest for adetante/explorer-besu-plugin:1.0.4 not found: manifest unknown: manifest unknown

这说明在docker hub中并不存在1.0.4这样的版本。

image.png

在docker hub中只有latest和1.0.3版本,在这里我们选择的是1.0.3版本。如果使用的是latest版本无论config.json怎样修改都会报错,哪怕按照我以下将要说明的方式去改也会报错,但是1.0.3就不会(实践出真知,踩过的坑不想别人再踩了)。

image.png
这个时候可能就会有小伙伴会问,我都不知道config.json文件怎么写,那应该怎么修改才对呢?

有聪明的小伙伴或许会联想到,要不就回去刚刚ethereum-lite-explorer的Github看看说明文档中是怎么写的吧,毕竟现在的explorer-besu-plugin也只是在ethereum-lite-explorer上增加了besu插件而已,规则应该还是按照ethereum-lite-explorer的来的。

于是他们就回去翻Github的文章…发现了这样的一段话

image.png

哦,原来config.json是从config.default.json演变过来的。那直接将config.default.json拷贝过去改名就可以了。

image.png

这种做法不能说不对,但是可以有更好的办法…最好的做法当然是直接从镜像中拷贝出来。先从docker hub中将1.0.3的镜像下载下来后先简单的运行一次。

docker run --name eth_explorer \
-p 80:80 \
-d adetante/explorer-besu-plugin:1.0.3

然后使用docker cp命令将镜像内的config.json文件拷贝到本地。

docker cp eth_explorer:/usr/share/nginx/html/config.json /home/yzh/Documents/docker_data/alethio/

在这个基础上进行loginUrl和nodeUrl的修改,如下图所示:

image.png

由于这个AELE是部署在我本机不是CentOS中因此ip为92.168.1.164。所有内容修改完成后就可以启动AELE镜像

docker run --name eth_explorer \
-p 80:80 \
-v /Users/yuanzhenhui/Documents/docker_data/alethio/config.json:/usr/share/nginx/html/config.json \
-d adetante/explorer-besu-plugin:1.0.3

由于是映射80端口,所以直接通过localhost进行访问,如下图:

2.png

访问时会让输入用户名和密码,这里输入创建的用户名和密码即可。进入后就能够正常访问了,如下图:

image.png

为了验证区块链的可用性,我们使用Postman调用一下Besu区块上链API操作,稍微写个Java工具将字符串转换成16进制的hex编码(这里有点懒了,其实可以直接用httpclient写个调用就可以了,ε=(´ο`*)))唉),如下图:

image.png

如上图所示,得到的编码为e8bf99e698afe4b880e4b8aae6b58be8af95e79a84e4bca0e8be93e695b0e68dae之后通过JSON RPC接口发起了区块链的上链操作,如下图:

image.png

最终得到tx码返回。0x9ffdcf72cf9c17b640644f2793e40d7c76e25be8412e58eac8c051ce7566547c,我们将这段tx码拷贝到AELE中通过查询定位到区块内容。如下图:

image.png

如上图所示,AELE得知区块链刚刚发生了一次事务提交,在0x9ffdcf72cf9c17b640644f2793e40d7c76e25be8412e58eac8c051ce7566547c区块中存在数据(INPUT DATA)0xe8bf99e698afe4b880e4b8aae6b58be8af95e79a84e4bca0e8be93e695b0e68dae

至此数据上链简单验证完毕。

有小伙伴也许会问,为什么上图中显示交易GAS PRICE是0Gwei?大家还记得在《【区块链】HyperLedger Besu集群服务》一文中奖min-gas-price设置为0么,就是在那时候设置上链无需费用,这也是算PoA(权威证明)的一种特色吧,如下图:

image.png

猜你喜欢

转载自blog.csdn.net/kida_yuan/article/details/129238973
今日推荐