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 神秘豆
每月下载量24,732
在30个crate中使用了(13个直接使用)
48KB
778 行
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_conf
或BitcoinD::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