#block #iterator #bitcoin #authentication

bin+lib biter

非常快速的比特币区块迭代器

1 个不稳定版本

0.1.0 2024 年 8 月 3 日

#405魔法豆

Download history 81/week @ 2024-07-28 44/week @ 2024-08-04 3/week @ 2024-08-11

每月下载量 128

MIT 许可证

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