TrueBlocks:开源数据索引器

  • Tiny熊
  • 更新于 2023-08-30 11:51
  • 阅读 3676

TrueBlocks 是以太坊基金会支持的一个开源公共物品,前几天发布了正式的 V1 版本, 产品非常非常棒, 迫不及待推荐给大家。

TrueBlocks 是一个开源的区块链数据索引器,可以为所有的 EVM 链提供数据服务。

背景

区块链给我们很多美好的承诺:全球访问、隐私且无需许可访问有史以来最准确和有共识的数据。

很棒,对吧! 然后现实却比较糟糕。

  1. 任何人都可以自由的访问及使用区块链,然后现实是我们大多数人需要透过 RPC 来访问区块链,对 RPC 的访问……真是无需许可的吗(运行自己的节点除外)?
  2. 当我们在使用第三方基础设施的 API 时, 如 Infura , EtherScan, 他们确实会友好的给我们数据,你是否意识到:也许我们的 IP 已经关联到我们的以太坊地址(隐私)。要知道,中心化基础设施通常要限制访问速率来保护他们的系统, 而这通常是使用 IP 地址来限制,也就是说,他们知道你在哪,你是谁。

TrueBlocks 尝试解决第二个问题, 通过开源的数据索引器,真正实现对去中心化的数据进行索引和搜索。

解决第一个问题,需要用户自己运行节点, dAppNode 在做这方面的努力,提供一个开箱即用的机器,让不懂技术的人可以直接接入区块链网络。

TrueBlocks 尝试解决的问题

即便有一个节点, 想要获得有用的数据依旧很困难, RPC 提供的功能非常有限,例如,无法按地址索引数据。

TrueBlocks 的解决方案称为 “Unchained Index”, Unchained Index 在本地创建的数据索引,因此没有访问速率的限制,也没有 IP 泄露等隐私问题,并且查询本地节点的速度比 API 快很多。

同时 Unchained Index 会更深入地挖掘每个块的细节, 例如地址在哪些地方出现过, 比大多数数据提供上 API 的数据更丰富,可以方便的查询某个地址发生过的所有事情。

TrueBlocks 的设计

多数区块链数据服务商的架构是首先从链上提取所有数据,将其放入结构化数据库中,并对数据进行各种索引以便提高数据查询效率,从而不可避免的出现数据的中心化。

区块链是按时间排序的交易日志。每笔交易在发生时都会被记录在链上,链上数据具有不可变心,同时数据以基于时间顺序保存,基于该特性,TrueBlocks 设计了一个时间有序、不可变的数据索引块,每个索引块可以通过 IPFS 共享,可兼顾查询效率与去中心化。

image-20230829191927899

分析区块建立索引的工作是由 scraper 完成的,scraper 会不断的收集交易记录,按地址对数据索引排序,当在收集到一定数量的交易时(2,000,000 条记录),则存储为一个大的索引块(chunks)中,并发布到 IPFS 去中心化存储网络中。

该设计的好处有很多:

  1. 由于索引的存在,可以极大提高搜索地址的速度。
  2. 相较于一个整体的数据库,可以实现去中心化分发,其他的用户亦可快速利用现有的索引数据。
  3. 由于每个索引块(chunks)是独立的,可以并行构建索引块。
  4. 每个索引块,都有一个关联的布隆过滤器(Bloom filter),在用户查询某地址的记录时,可以快速确定该索引块中有所需的数据,从而按需下载所需的索引块(chunks),在我们构建自己的应用时,可实现仅下载自身应用相关的索引块(而无需下载所有数据),对于大多数应用,仅需下载不超过10%的数据。

除了设计上的优势,TrueBlocks 性能也很棒,它将索引块直接存储为固定宽度记录的字节,直接使用本地内存进行二进制缓存,无序列化,查询数据飞快。

TrueBlocks 安装与启动

TrueBlocks 所有代码开源,支持在 Linux 和 Mac 上运行,具体安装方法参考:https://trueblocks.io/docs/install/install-core/#installation

正确安装后,在 trueBlocks.toml 配置 RPC 端点,之后就可以使用chifra 命令了。

TrueBlocks 支持无需节点启动启动索引,同时可以根据自己的需要下载数据。

  1. 运行 chifra init 仅下载索引块布隆过滤器。在之后查询地址时,根据需要下载更大的索引块,适合需要快速启动的情况,但查询会慢一些(在有缓存后,对同一地址的后续查询可立即返回)。
  2. 运行 chifra init --all 一次性下载布隆过滤器和索引块,启动时较慢,但以后会更快。

需要注意的是,使用 chifra init 时,仅是从当前最新发布的清单把布隆过滤器(或联通索引块)下载到本地,需要保持更新则需要定期运行该命令。

TrueBlocks 也支持用 chifra scrape 通过节点来构建自己的索引(而不是通过抓取IPFS 已经构建好的), 生态支持你这样做,并鼓励你在IPFS 上分享( pinnng )给其他人,因为这会使整个生态系统变得更好。

当然也可以混搭使用chifra initchifra scrape , 可以是最实用的方式,先使用 chifra init 下载布隆过滤器,然后在后台启动 chifra scrape 保持数据的更新,同时打开 --pin_locally 和与社区共享索引结果。

不过的启动方式,初始时间有所不同:chifra init 大约半小时, chifra init --all 大约六到十小时, chifra scrape 从头开始构建索引需要 2-4 天的时间。当然初始时间也与网络与机器性能有更大关系。

chifra 命令

chifra 由好几个模块组成:

账户(地址)模块

以地址为单位主题查询链上数据, 与地址相关的命令有:

chifra list: 列出链上哪些地方出现了地址
chifra export: 导出一个或多个地址的交易的完整详细信息
chifra monitors :  对地址监视器操作:可添加、删除、清理和列出
chifra names :查询知名帐户的地址或名称
chifra abis : 获取智能合约的ABI 

例如:

chifra list 0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3

返回:

{
  "data": [
    {
      "address": "0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3",
      "blockNumber": 4037786,
      "transactionIndex": 47
    },
    {
      "address": "0xff9387a9aae1f5daab1cd8eb0e92113ea9d19ca3",
      "blockNumber": 4037800,
      "transactionIndex": 77
    },
    {
      "...": "..."
    }
  ]
}

账户相关在子命令的详细用法可查看账户命令文档, 也可以在 API 页面进行请求模拟, 如下图。

chifra - account list

链数据模块

可查链上的区块、交易、收据、日志、调用, 相关的命令有:

chifra blocks:  从链或本地缓存中检索一个或多个块
chifra transactions:  从链或本地缓存中检索一个或多个交易
chifra receipts:     通过给定的交易获取收据
chifra logs:   通过给定的交易获取日志
chifra traces:  通过给定的交易获取调用记录
chifra when:       根据时间找区块

这些工具直接从节点提取原始区块链数据, 链数据相关在子命令的详细用法可查看文档, 也可以在 API 页面进行请求模拟。

链状态模块

链状态关注链上账户状态如余额和字节码等,有两个命令:

 chifra state:    检索给定区块上一个或多个地址的帐户余额
 chifra tokens:   检索给定区块上一个或多个地址的Token余额

chifra state 可查询地址的ETH帐户余额,调用智能合约(如果有),nonce和有关地址的其他信息。

chifra tokens 处理ERC20和ERC721 token 余额和相关数据。

例如调用合约:

$chifra state --call 'liquidity()' 0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8

返回:

{
    data: [
        {
            "outputs": {
            "val_1": 876845932
            }
        }
    ]
}

链状态相关在子命令的详细用法可查看文档, 也可以在 API 页面进行请求模拟。

管理模块

管理模块用来查询和管理TrueBlocks系统的自身的状态, 相关命令有:

chifra config:        显示和编辑TrueBlocks系统的配置
chifra daemon:        初始化和控制长时间运行进程:如API和scraper 
chifra scrape:        扫描链并更新TrueBlocks的出现索引
chifra chunks:        管理、调查和显示  Unchained Index
chifra init:          通过从IPFS下载初始化TrueBlocks系统

其他模块

chifra explore:       快捷方式打开区块链浏览器
chifra slurp:       从Etherscan 获取数据

我们可以通过输入 chifra <cmd> --help 获得有关任何命令的更多帮助。

小结

搭建自己的数据服务一直是一件棘手又耗时的事情,有了 TrueBlocks 后,我们可以轻松很多,基于 TrueBlocks 很容易构建自己的数据分析产品或区块链浏览器。

同时 TrueBlocks 也在推动让自己称为节点的一部分,这样每个用户度可以轻松、快速获取到易用的数据。

点赞 3
收藏 3
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

1 条评论

请先 登录 后评论
Tiny熊
Tiny熊
0xD682...E8AB
登链社区发起人 通过区块链技术让世界变得更好而尽一份力。