对于区块链,所有的数据都是开放的,但不是每个人都能写代码去查看链上的交易,大多数人会通过一个公开的窗口来查看数据。这个公开的窗口就是区块链浏览器。
区块链上的数据会持续增加,对于数据的持久化和查询是浏览器的关键。本文会说明一种区块链浏览器的设计思路。
当一笔交易上链之后,就会存储到链上的账本中,但是账本中的数据无法直接展示。所以需要对这些账本数据进行解析,并存储,然后再从不同的维度去做对数据进行展示。系统本身并不会很复杂,整体的设计如下:

整个系统做的事情就是将区块链上的数据拉取下来,放到数据库中,然后通过一个 API 服务
在系统中有两个部分很重要,一个是区块的解析器,一个是拉取区块的部分。
数据存储的选型很重要,使用 MySQL 存储会带来一些问题,字段扩展困难,存储扩展不方便。除了存储之外,这些数据还需要能够支持多维度的搜索,这点 MySQL 显然也无法满足。
区块链通常使用 kv 数据库做存储,通常是 LevelDB、CauchDB、TiKV 等等,但是这类的数据库,对于搜索的支持比较差。而对于浏览器来说,搜索则是一个最重要的部分。
在这样的情况下, ElasticSearch 是一个很好的选择,ES 支持本身支持大量数据的存储,而且可以支持水平扩展。实时的搜索也能够满足前端数据展示的需要。
区块链就是一个链状的结构,所有的区块通过计算前一个区块的 hash 连接在一起:

每一个区块中则会打包一系列的交易:

在解析区块的时候,需要不断的将区块层层打开,直到将里面的每一笔交易都解析出来。然后按照不同的分类存储进 ES 中。看起来是一个挺复杂的过程,可以通过设计成单个接口来完成。
