1 个不稳定版本
0.1.0 | 2024 年 8 月 3 日 |
---|
#405 在 魔法豆
每月下载量 128
25KB
418 行
比特器
比特器(Bitcoin Block Iterator)是一个非常快速且简单的 Rust 库,它从 Bitcoin Core 节点读取原始区块文件(blkXXXXX.dat),并按顺序创建所有请求的区块的迭代器(0、1、2、...)。
迭代器返回的元素是一个元组,包括
- 高度:
usize
- 区块:
Block
(来自bitcoin-rust
) - 区块哈希:
BlockHash
(也来自bitcoin-rust
)
示例
use bitcoincore_rpc::{Auth, Client};
fn main() {
let i = std::time::Instant::now();
// Path to the Bitcoin data directory
let data_dir = "../../bitcoin";
// Path to the export directory where a mini blk indexer will be exported
let export_dir = "./target";
// Inclusive starting height of the blocks received, `None` for 0
let start = Some(850_000);
// Inclusive ending height of the blocks received, `None` for the last one
let end = None;
// RPC client to filter out forks
let url = "https://127.0.0.1:8332";
let auth = Auth::UserPass("user".to_string(), "pw".to_string());
let rpc = Client::new(url, auth).unwrap();
// Create channel receiver then iterate over the blocks
biter::new(data_dir, export_dir, start, end, rpc)
.iter()
.for_each(|(height, _block, hash)| {
println!("{height}: {hash}");
});
dbg!(i.elapsed());
}
要求
尽管它读取 blkXXXXX.dat 文件,但它 需要 bitcoind
并带有 RPC 服务器来过滤区块分叉。
峰值内存应约为 500MB。
比较
biter | bitcoin-explorer | blocks_iterator | |
---|---|---|---|
使用 bitcoind 运行 | 是 ✅ | 否 ❌ | 是 ✅ |
不使用 bitcoind 运行 | 否 ❌ | 是 ✅ | 是 ✅ |
0..=855_000 |
16mn40s | 17mn 46s | > 2h |
800_000..=855_000 |
2mn 53s(首次运行为 16mn40s) | 3mn 2s | > 2h |
在 Macbook Pro M3 Pro 上进行基准测试
依赖项
~11MB
~163K SLoC