#json-rpc #bitcoin #bitcoind #env-var #integration-tests

bitcoind-json-rpc-regtest

用于运行regtest bitcoind进程的工具,在集成测试环境中非常有用

4个版本 (2个重大变更)

0.3.0 2024年6月20日
0.2.1 2024年6月17日
0.2.0 2024年6月13日
0.1.0 2024年6月12日

#2156 in 神奇豆子

Download history 491/week @ 2024-06-12 181/week @ 2024-06-19 5/week @ 2024-06-26 5/week @ 2024-07-03 52/week @ 2024-07-10 27/week @ 2024-07-17 18/week @ 2024-07-31

每月下载量 99

MIT许可证

99KB
1.5K SLoC

Bitcoind

用于运行regtest bitcoind进程的工具,在集成测试环境中非常有用。

当通过激活版本功能之一(例如,比特币核心25.1的25_1)选择自动下载功能时,启动regtest节点就像那样简单

// the download feature is enabled whenever a specific version is enabled, for example `25_1` or `24_0_1`
#[cfg(feature = "download")]
{
  let bitcoind = bitcoind::BitcoinD::from_downloaded().unwrap();
  assert_eq!(0, bitcoind.client.get_blockchain_info().unwrap().blocks);
}

构建脚本将自动从比特币核心下载比特币核心版本25.1,验证二进制哈希并将其放置在构建目录中。

当您不使用自动下载功能时,您有以下选项

  • bitcoind执行文件中具有PATH
  • 通过BITCOIND_EXE环境变量提供bitcoind执行文件
if let Ok(exe_path) = bitcoind::exe_path() {
  let bitcoind = bitcoind::BitcoinD::new(exe_path).unwrap();
  assert_eq!(0, bitcoind.client.get_blockchain_info().unwrap().blocks);
}

可以通过使用Conf结构体来配置启动选项,使用BitcoinD::with_confBitcoinD::from_downloaded_with_conf

特性

  • 等待bitcoind守护进程准备好接受RPC命令
  • bitcoind使用临时目录作为数据目录。您可以指定您临时目录的根目录,以便您在RAM磁盘(例如/dev/shm)中具有节点的数据目录
  • 从操作系统请求空闲端口。由于无法保留指定的端口,仍然可能存在低概率的竞态条件,因此进程尝试使用不同端口进行3次启动。
  • 无论测试如何结束,只要结构体超出作用域,进程就会被终止。
  • 允许轻松启动像

多亏了这些特性,每个#[test]都可以轻松地与其自己的环境独立运行。

文档

构建文档

RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --features download,doc --open

MSRV

对于版本0.35.*,MSRV是1.56.1

注意:为了尊重1.56.1 MSRV,您需要使用一些依赖项的较旧版本,在CI中,以下依赖项版本被锁定

cargo update
cargo update -p tempfile --precise 3.3.0
cargo update -p log --precise 0.4.18

避免在Cargo.toml中锁定,因为这可能会导致下游编译问题。

Nix

出于可重复性的原因,Nix构建脚本不能访问互联网,但自动下载功能正是如此。要在Nix下成功构建,用户必须本地提供tar包并通过BITCOIND_TARBALL_FILE环境变量指定其位置。

另一个选项是指定BITCOIND_SKIP_DOWNLOAD环境变量并通过PATH提供可执行文件。

或者,使用没有自动下载功能的依赖项。

依赖项

~10-20MB
~244K SLoC