Blockstream Explorer 搭建记录

Blockstream Explorer 搭建记录

最近做实验需要实时查询交易的链上状态,不带 API KEY 去请求 https://blockstream.info/testnet/api/ 太频繁会被限流,而且持续一天后直接被拉黑,正好同时也有维护 Bitcoin testnet3 节点的需求,因此决定 DIY 一个 Blockstream Explorer,在此将节点与 Blockstream electrs / esplora 的搭建过程做一下记录

Bitcoin 节点搭建

Blockstream electrs 节点搭建

由于区块解析器存在问题,解析区块极有可能报 Error(Msg("mssing txo ...")) 错误,根据 Github Issue(Issue 1Issue 2),需要在启动参数中添加 --jsonrpc-import,来让 electrs 节点通过比特币节点的 RPC 获取区块信息,而不是之前通过直接解析 blk*.dat 文件来获取区块信息,但速度较慢(测试链大概用了 24h)

此外,直接让 electrs 节点通过 RPC 请求区块信息可能会报 WARN reconnecting to bitcoind: Error: Connection error: ... 类似警告,根据 Github Issue electrs - syncing error with bitcoin core 28 · Issue #158 · Blockstream/electrs,这是因为 electrs 节点会并发请求比特币节点导致超过了节点默认可以处理的并发数,因此需要根据 这条提交评论 修改节点配置:

D = electrs 的 –daemon-parallelism 并发参数 D,应该设置为分配给容器的 CPU 核心数,默认值为 2

E = electrs 实例数量

B = Bitcoin Core 实例数量

bitcoin.conf中的配置为:

rpcthreads=ceil(E/B) * (D + 3)
rpcworkqueue=ceil(E/B) * D * 8
rpcservertimeout=600

虽然处理器有 24 线程,考虑到部署后不会有太多并发请求,就设置了 --daemon-parallelism=4bitcoin.conf 中对应的配置为:

rpcthreads=7
rpcworkqueue=32
rpcservertimeout=600

由于我们是自己编译安装的 gcc-11,为了让 electrs 使用 gcc-11libstdc++.so.6,需要手动加入环境变量中,启动命令为:

sudo  LD_LIBRARY_PATH=/opt/gcc-11/lib64:$LD_LIBRARY_PATH ./electrs/target/release/electrs   --network testnet   --daemon-dir ~/blockchain/bitcoin/data/   --db-dir ./db --jsonrpc-import --daemon-parallelism=4

程序启动后,首先会从比特币节点下载区块头,这个过程大概会持续 16h:

INFO downloading all block headers up to ...
INFO fetching blocks .../... (...%)
INFO processing blocks .../... (...%)

完成后会压缩 RocksDB 数据库,过程大概也会持续 7h:

INFO starting full compaction on RocksDB { path: "./db/testnet/newindex/txstore" }
INFO finished full compaction on RocksDB { path: "./db/testnet/newindex/txstore" } in elapsed='13753.3s'
INFO starting full compaction on RocksDB { path: "./db/testnet/newindex/history" }
INFO finished full compaction on RocksDB { path: "./db/testnet/newindex/history" } in elapsed='8162.1s'
INFO starting full compaction on RocksDB { path: "./db/testnet/newindex/cache" }
INFO finished full compaction on RocksDB { path: "./db/testnet/newindex/cache" } in elapsed='166.7ms'

完成后默认会将 Rest Server 开在 http://127.0.0.1:3001、Electrum RPC server 开在 127.0.0.1:60001

Blockstream esplora 服务搭建