#process #environment #version #temp-dir #integration #bitcoin #regtest

bitcoind

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

53次发布 (35次破坏)

0.36.0 2024年5月16日
0.34.3 2024年8月19日
0.34.2 2024年3月25日
0.34.0 2023年11月15日
0.13.0 2021年7月22日

#264 in 神秘豆

Download history 5617/week @ 2024-05-01 5710/week @ 2024-05-08 5999/week @ 2024-05-15 5999/week @ 2024-05-22 7384/week @ 2024-05-29 7006/week @ 2024-06-05 7866/week @ 2024-06-12 6133/week @ 2024-06-19 5516/week @ 2024-06-26 5796/week @ 2024-07-03 6778/week @ 2024-07-10 5168/week @ 2024-07-17 4913/week @ 2024-07-24 6159/week @ 2024-07-31 6836/week @ 2024-08-07 5697/week @ 2024-08-14

每月下载量24,732
30个crate中使用了(13个直接使用)

MIT许可证

48KB
778

MIT license Crates Docs

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")]
{
  use bitcoincore_rpc::RpcApi;
  let bitcoind = bitcoind::BitcoinD::from_downloaded().unwrap();
  assert_eq!(0, bitcoind.client.get_blockchain_info().unwrap().blocks);
}

构建脚本将自动从比特币核心下载比特币核心版本25.1,验证哈希并将其放置在构建目录中。如果您希望从其他位置下载,例如本地CI,请使用BITCOIND_DOWNLOAD_ENDPOINT环境变量。

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

  • PATH中拥有bitcoind可执行文件
  • 通过BITCOIND_EXE环境变量提供bitcoind可执行文件
use bitcoincore_rpc::RpcApi;
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

传统方法的缺陷

我使用了基于外部bash脚本的集成测试,启动所需的进程,这种方法存在许多问题,例如

  • 外部脚本可能会干扰本地开发环境 1
  • 使用单个巨大的测试来测试所有内容 2
  • 如果测试是分离的,失败的测试可能无法留下干净的环境,导致其他测试失败(因为初始情况,而不是真正的失败)
  • bash脚本很复杂,尤其是支持不同的操作系统和版本

功能

  • 它等待bitcoind守护进程准备好接受RPC命令
  • bitcoind使用临时目录作为datadir。您可以指定您的临时目录的根目录,以便在RAM磁盘(例如 /dev/shm)中拥有节点的datadir
  • 向操作系统请求空闲端口。由于您无法保留指定的端口,因此仍然可能发生低概率的竞争条件,因此进程会尝试以不同的端口启动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下成功构建,用户必须本地提供tarball并将其位置通过BITCOIND_TARBALL_FILE环境变量指定。

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

或者,使用不带自动下载功能的dep。

使用于

通过bdk依赖项

通过electrsd依赖项

依赖项

~10–20MB
~250K SLoC