fabric 区块/账本解析工具 blocklator

作者 tinywell 日期 2020-06-03
fabric 区块/账本解析工具 blocklator

之前陆陆续续梳理了 fabric 的区块结构,包括配置区块和交易区块,最近又因为一些原因复习了一遍,然后顺便做了一个解析区块的工具 - blocklator。

这个工具前端采用 vue,后端使用 gin 框架提供 RESTful API,最后将 vue 编译的静态文件给 gin 托管,打包成一个 web 应用。

工具支持两个主要功能:1. 区块解析;2. 账本解析。区块解析可以直接解析一个区块文件,也可以解析经过 base64 编码的区块数据;账本解析则可以直接解析一个原生的 fabric 账本文件,提取出其中所有的区块,并可以逐个解析。

功能介绍

区块解析

区块解析功能用于解析 fabric 的配置区块或者交易区块,由于 fabric 工具库中提供了 configlator 专门用于解析配置块(json 文件输出),所以 blocklator 的区块解析功能重点更多的放在了交易区块的解析上。

区块解析功能支持两种形式的输入:

  • 区块文件:通过 peer channel fetch 命令从 peer 获取的区块文件(eg:mychannel_1.block),或者通过其他方式从 fabric 中获取的区块文件。直接将文件通过区块解析功能上传,就会在后台解析出区块信息并返回前端;
  • 区块 base64 编码数据:区块解析功能也接受以 base64 编码形式的区块数据文本。有时候应用端可能将获取到的区块数据在日志中用 base64 编码打印出来,这时候就可以从日志中提取这部分数据,然后利用 blocklator 的区块解析功能进行解析。当然你也可以结合 peer channel fetch 命令,使用 linux 的 base64 命令对获取的区块文件直接编码,然后将结果贴到 blocklator 中进行解析。(eg:peer channel fetch 3 /dev/stdout -c mychannel |base64,获取 mychannel 编号为 3 的区块,并用 base64 编码)

对于配置块的解析,主要解析出区块头等基本信息,配置块中的应用组织、共识组织等信息,网络使用的共识类型及基本共识参数信息等。
img

对于交易块的解析,主要解析出区块头等基本信息,区块中所有交易信息:包括交易提案的提交者、提案请求参数、回复数据,交易背书信息等。
img

账本解析

账本解析功能用于直接解析 fabric 生成的分布式账本,解析出其中的所有区块信息,结合之前的区块解析,能够查看账本文件中的所有区块详情。由于账本文件一般很多,对于 web 应用来说传输数据很大,所以账本文件的解析结果后台做了临时缓存,前端可以分页查看。在账本解析页面直接上传账本文件(eg:blockfile_000000)即可。

img

项目介绍

这个工具的源码 放在 github 上,感兴趣的小伙伴可以关注下。如果要自己搭建一个也非常方便。

本地编译部署

如果想本地直接编译部署,由于前段使用 vue 后端使用 gin,所以需要有 node 和 go 的环境。

前段编译:
前段编译的静态文件可以单独部分,也可以给后端 gin 托管。

1
make front

后端编译:

1
make backend

启动:
使用 blocklator 的 server 子命令启动 web 服务,可以通过参数指定监听端口,前段的静态文件目录等。

1
2
3
4
5
6
7
8
9
10
11
12
13
# ./blocklator server -h
server is a backend web service use of gin

Usage:
blocklator server [flags]

Flags:
-h, --help help for server
-p, --port int listen port (default 8080)
-m, --production is in production mode
-s, --static string front page path (default "./front/dist")

./blocklator server

或者使用 make start 一键启动

1
make start

docker 镜像编译及部署

项目也支持使用 docker 方式进行编译和部署。docker 镜像采用多阶段构建,最终的镜像大小只有 30M 左右。

编译:

1
make docker

启动:

1
docker-compose up -d

如果你需要修改参数的话,可以修改源码目录下的 docker-compose,yaml 文件进行调整。

demo

我在自己的云主机上搭建了一个 demo,使用 github action 自动构建发布及部署,实时同步最新的 master 提交版本。欢迎试用,欢迎提 issue。

由于主机资源非常有限,使用时大账本请谨慎提交,可能会崩【捂脸.jpg】