之前陆陆续续梳理了 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 编码)
对于配置块的解析,主要解析出区块头等基本信息,配置块中的应用组织、共识组织等信息,网络使用的共识类型及基本共识参数信息等。
对于交易块的解析,主要解析出区块头等基本信息,区块中所有交易信息:包括交易提案的提交者、提案请求参数、回复数据,交易背书信息等。
账本解析
账本解析功能用于直接解析 fabric 生成的分布式账本,解析出其中的所有区块信息,结合之前的区块解析,能够查看账本文件中的所有区块详情。由于账本文件一般很多,对于 web 应用来说传输数据很大,所以账本文件的解析结果后台做了临时缓存,前端可以分页查看。在账本解析页面直接上传账本文件(eg:blockfile_000000)即可。
项目介绍
这个工具的源码 放在 github 上,感兴趣的小伙伴可以关注下。如果要自己搭建一个也非常方便。
本地编译部署
如果想本地直接编译部署,由于前段使用 vue 后端使用 gin,所以需要有 node 和 go 的环境。
前段编译:
前段编译的静态文件可以单独部分,也可以给后端 gin 托管。
1 | make front |
后端编译:
1 | make backend |
启动:
使用 blocklator 的 server 子命令启动 web 服务,可以通过参数指定监听端口,前段的静态文件目录等。
1 | # ./blocklator server -h |
或者使用 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】