97个版本

0.32.2 2024年6月8日
0.32.0 2024年4月24日
0.31.1 2024年1月9日
0.31.0 2023年10月28日
0.4.4 2015年11月30日

#39 in #transaction

Download history 37455/week @ 2024-05-01 38953/week @ 2024-05-08 40910/week @ 2024-05-15 37106/week @ 2024-05-22 45976/week @ 2024-05-29 42057/week @ 2024-06-05 41789/week @ 2024-06-12 40063/week @ 2024-06-19 37748/week @ 2024-06-26 38343/week @ 2024-07-03 42490/week @ 2024-07-10 42416/week @ 2024-07-17 38297/week @ 2024-07-24 40598/week @ 2024-07-31 48333/week @ 2024-08-07 36372/week @ 2024-08-14

每月 170,781 次下载
562 包中使用(直接 305 个)

CC0 许可证

2MB
34K SLoC

Rust Bitcoin

Rust Bitcoin logo by Hunter Trujillo, see license and source files under /logo

支持反序列化、解析和执行与比特币相关的数据结构和网络消息的库。

Crate Info CC0 1.0 Universal Licensed CI Status API Docs Rustc Version 1.56.1+ Chat on IRC

文档

支持(或应该支持)

  • 比特币协议网络消息的反序列化
  • 区块和事务的反序列化
  • 脚本反序列化
  • 私钥和地址的创建、反序列化和验证(包括完整的BIP32支持)
  • PSBT v0反序列化和除Input Finalizer角色外的所有功能。使用 rust-miniscript 来完成。

与Bitcoin Core进行JSONRPC交互时,建议使用 rust-bitcoincore-rpc

建议始终使用 cargo-crev 来验证每个依赖项的可信度,包括此依赖项。

已知限制

共识

此库 不得 用于共识代码(即完全验证区块链数据)。虽然技术上支持这样做,但由于此库与Bitcoin Core参考实现之间存在许多差异,包括已知的和未知的,这样做是非常不明智的。在像比特币这样的基于共识的加密货币中,所有参与者都使用相同的规则来验证数据至关重要,而此库无法实现与Core相同的规则。

鉴于C++和Rust的复杂性,这不太可能得到解决,也没有计划这样做。当然,欢迎提供修复特定共识不兼容性的补丁。

支持16位指针大小

16位指针大小不受支持,我们也不能保证将来会支持。如果您关心这个问题,请告诉我们,这样我们可以了解对此的兴趣有多大,并可能决定支持它们。

文档

目前可以在docs.rs/bitcoin上找到。添加使用示例和扩展现有文档的补丁将非常受欢迎。

贡献

贡献通常受到欢迎。如果您打算进行较大的更改,请在提交PR之前在问题中讨论它们,以避免重复工作和架构不匹配。如果您有任何问题或想要讨论的想法,请加入我们在#bitcoin-rust(在libera.chat上)的讨论。

有关更多信息,请参阅./CONTRIBUTING.md

最低支持Rust版本(MSRV)

此库应始终使用任何组合功能在Rust 1.56.1上编译。

要使用MSRV构建,您可能需要固定大量的依赖项,请参阅./contrib/test.sh以获取当前列表。

外部依赖项

我们集成了几个外部库,最著名的是serde。这些可以通过功能标志获得。为了确保兼容性和MSRV稳定性,我们提供了两个锁文件作为检查兼容版本的手段:包含依赖项最小版本的Cargo-minimal.lock和包含在CI中测试的依赖项最新版本的Cargo-recent.lock

我们不对这些锁文件的内容提供任何保证,除了“我们的CI在这些版本上没有失败”。具体来说,我们不保证提交的哈希值不含有恶意软件。您有责任对其进行审查。

安装Rust

可以使用您选择的包管理器或rustup.rs安装Rust。前者被认为更安全,因为它通常不涉及对CA系统的信任。但您应该意识到,您分发的Rust版本可能已过时。通常,这对于rust-bitcoin来说不是问题,因为我们支持比当前稳定版更旧的版本(请参阅MSRV部分)。

构建

默认启用了cargo功能std。至少必须启用以下功能之一:stdno-std或两者都启用。

启用no-std功能不会禁用std功能。要禁用std功能,您必须禁用默认功能。no-std功能仅启用此crate在没有std的情况下可用的附加功能。两者可以同时启用,而不会发生冲突。

可以使用cargo构建和测试库。

git clone [email protected]:rust-bitcoin/rust-bitcoin.git
cd rust-bitcoin
cargo build

您可以使用以下命令运行测试:

cargo test

有关更详细的说明,请参阅cargo文档

我们支持just以运行开发工作流程命令。从您的shell运行just以查看可用的子命令列表。

构建文档

我们使用nightly工具链构建文档,您可能希望使用以下shell别名来检查您的文档更改是否正确构建。

alias build-docs='RUSTDOCFLAGS="--cfg docsrs" cargo +nightly rustdoc --features="$FEATURES" -- -D rustdoc::broken-intra-doc-links'

测试

对于感兴趣的方面,我们有单元和集成测试,以及基准测试。对于项目开发者,尤其是寻找可以工作的东西的新贡献者,我们进行

  • 使用Hongfuzz进行模糊测试。
  • 使用Mutagen进行突变测试
  • 使用Kani进行代码验证

总还有更多的测试要写,更多的错误要找,我们非常欢迎对我们的测试工作做出贡献。请考虑将测试代码视为一等公民,我们确实会接受改进和清理测试代码的PR。

单元/集成测试

运行方式与其他Rust项目相同:cargo test --all-features

基准测试

我们使用自定义的Rust编译器配置来保护基准测试代码。要运行基准测试,请使用:RUSTFLAGS='--cfg=bench' cargo +nightly bench

突变测试

我们已经开始使用mutagen进行突变测试。要运行这些测试,首先使用以下命令安装最新开发版本:cargo +nightly install --git https://github.com/llogiq/mutagen,然后运行:RUSTFLAGS='--cfg=mutate' cargo +nightly mutagen

代码验证

我们已经开始使用kani,使用以下命令安装:cargo install --locked kani-verifier(无需运行cargo kani setup)。使用cargo kani运行测试。

拉取请求(Pull Requests)

每个PR都需要至少两个审查才能合并。在审查阶段,维护者和贡献者可能会留下评论并要求更改。请尽量解决它们,否则您的PR可能会在一段时间的不活跃后关闭而不合并。如果您的PR尚未准备好审查,请通过在标题前加上WIP: 来标记。

持续集成(CI)管道

CI管道在运行在每个MR之前需要获得批准。

为了加快审查过程,可以使用act在本地运行CI管道。由于目前不支持缓存,使用act时将跳过fuzzCross作业。我们不积极支持act,但会合并修复act问题的PR。

Git钩子(Githooks)

为了帮助开发者在运行CI之前捕获错误,我们提供了一些Git钩子。如果您尚未在本地配置Git钩子,您可以通过在存储库的根目录中运行以下命令来使用此存储库中的Git钩子:

git config --local core.hooksPath githooks/

或者,在您的.git/hooks目录中添加到我们提供的任何Git钩子的符号链接。

关于替代币/替代链的政策

由于加密货币领域包括的项目经常出现和消失,且设计本身就存在问题,因此我们不支持任何加密货币。正确支持比特币已经足够困难,我们不希望因为增加对其他币种的支持而增加维护负担和降低API稳定性。

我们的代码是公共领域的,所以您可以随意fork它并随意使用 :)

发布说明

发布说明是按crate进行的,请参阅

许可

本项目中的代码采用Creative Commons CC0 1.0 Universal license许可。我们使用SPDX许可列表SPDX IDs

依赖项

~5–8MB
~86K SLoC