TrueBlocks 是以太坊基金会支持的一个开源公共物品,前几天发布了正式的 V1 版本, 产品非常非常棒, 迫不及待推荐给大家。
TrueBlocks 是一个开源的区块链数据索引器,可以为所有的 EVM 链提供数据服务。
区块链给我们很多美好的承诺:全球访问、隐私且无需许可访问有史以来最准确和有共识的数据。
很棒,对吧! 然后现实却比较糟糕。
TrueBlocks 尝试解决第二个问题, 通过开源的数据索引器,真正实现对去中心化的数据进行索引和搜索。
解决第一个问题,需要用户自己运行节点, dAppNode 在做这方面的努力,提供一个开箱即用的机器,让不懂技术的人可以直接接入区块链网络。
即便有一个节点, 想要获得有用的数据依旧很困难, RPC 提供的功能非常有限,例如,无法按地址索引数据。
TrueBlocks 的解决方案称为 “Unchained Index”, Unchained Index 在本地创建的数据索引,因此没有访问速率的限制,也没有 IP 泄露等隐私问题,并且查询本地节点的速度比 API 快很多。
同时 Unchained Index 会更深入地挖掘每个块的细节, 例如地址在哪些地方出现过, 比大多数数据提供上 API 的数据更丰富,可以方便的查询某个地址发生过的所有事情。
多数区块链数据服务商的架构是首先从链上提取所有数据,将其放入结构化数据库中,并对数据进行各种索引以便提高数据查询效率,从而不可避免的出现数据的中心化。
区块链是按时间排序的交易日志。每笔交易在发生时都会被记录在链上,链上数据具有不可变心,同时数据以基于时间顺序保存,基于该特性,TrueBlocks 设计了一个时间有序、不可变的数据索引块,每个索引块可以通过 IPFS 共享,可兼顾查询效率与去中心化。
分析区块建立索引的工作是由 scraper
完成的,scraper
会不断的收集交易记录,按地址对数据索引排序,当在收集到一定数量的交易时(2,000,000 条记录),则存储为一个大的索引块(chunks)中,并发布到 IPFS 去中心化存储网络中。
该设计的好处有很多:
除了设计上的优势,TrueBlocks 性能也很棒,它将索引块直接存储为固定宽度记录的字节,直接使用本地内存进行二进制缓存,无序列化,查询数据飞快。
TrueBlocks 所有代码开源,支持在 Linux 和 Mac 上运行,具体安装方法参考:https://trueblocks.io/docs/install/install-core/#installation
正确安装后,在 trueBlocks.toml
配置 RPC 端点,之后就可以使用chifra
命令了。
TrueBlocks 支持无需节点启动启动索引,同时可以根据自己的需要下载数据。
chifra init
仅下载索引块布隆过滤器。在之后查询地址时,根据需要下载更大的索引块,适合需要快速启动的情况,但查询会慢一些(在有缓存后,对同一地址的后续查询可立即返回)。chifra init --all
一次性下载布隆过滤器和索引块,启动时较慢,但以后会更快。需要注意的是,使用 chifra init
时,仅是从当前最新发布的清单把布隆过滤器(或联通索引块)下载到本地,需要保持更新则需要定期运行该命令。
TrueBlocks 也支持用 chifra scrape
通过节点来构建自己的索引(而不是通过抓取IPFS 已经构建好的), 生态支持你这样做,并鼓励你在IPFS 上分享( pinnng )给其他人,因为这会使整个生态系统变得更好。
当然也可以混搭使用chifra init
与 chifra scrape
, 可以是最实用的方式,先使用 chifra init
下载布隆过滤器,然后在后台启动 chifra scrape
保持数据的更新,同时打开 --pin_locally
和与社区共享索引结果。
不过的启动方式,初始时间有所不同:chifra init
大约半小时, chifra init --all
大约六到十小时, chifra scrape
从头开始构建索引需要 2-4 天的时间。当然初始时间也与网络与机器性能有更大关系。
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 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 也在推动让自己称为节点的一部分,这样每个用户度可以轻松、快速获取到易用的数据。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!