rust-bitcoin/rust-bitcoin

GitHub: rust-bitcoin/rust-bitcoin

Rust 实现的比特币协议库,提供区块、交易、脚本和网络消息的序列化/反序列化能力。

Stars: 2603 | Forks: 965

Rust Bitcoin

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

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

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

[文档](https://docs.rs/bitcoin/) 支持(或应当支持) * Bitcoin 协议网络消息的反/序列化 * 区块和交易的反/序列化 * Script 反/序列化 * 私钥和地址的创建、反/序列化和验证(包括完整的 BIP-0032 支持) * PSBT v0 反/序列化以及除输入终结者 (Input Finalizer) 之外的所有角色。使用 [rust-miniscript](https://docs.rs/miniscript/latest/miniscript/psbt/index.html) 来完成终结。 对于与 Bitcoin Core 的 JSONRPC 交互,建议使用 [rust-bitcoincore-rpc](https://github.com/rust-bitcoin/rust-bitcoincore-rpc)。 建议始终使用 [cargo-crev](https://github.com/crev-dev/cargo-crev) 来验证 你每个依赖项的可信度,包括本库。 ## 已知限制 ### 共识 本库**绝不应**被用于共识代码(即完全验证区块链数据)。从技术上讲它支持这样做,但这样做非常不可取,因为本库与 Bitcoin Core 参考实现之间存在许多已知和未知的偏差。在基于共识的加密货币(如 Bitcoin)中,至关重要的是所有参与者都使用相同的规则来验证数据,而本库根本无法实现与 Core 相同的规则。 鉴于 C++ 和 Rust 的复杂性,这不太可能被修复,我们也无此计划。当然,欢迎提交补丁来修复特定的共识不兼容问题。 ### 16位指针大小的支持 不支持 16 位指针大小,我们也无法承诺会支持。如果你对此有需求,请告诉我们,以便我们了解需求量的大小,并可能决定支持它们。 ### Semver 合规性 我们努力在版本发布中保持严格的 semver 合规性。此代码库包含一些标记为 unstable 的公共函数(例如 `pub fn foo__unstable()`)。这些函数不遵守 semver 规则;请自行斟酌使用。 ## 文档 目前可在 [docs.rs/bitcoin](https://docs.rs/bitcoin/) 上找到。非常感谢添加使用示例 和扩展现有文档的补丁。 ## 贡献 通常欢迎贡献。如果你打算进行较大的更改,请在提交 PR 之前在 issue 中进行讨论,以避免重复工作和架构不匹配。如果你有任何问题或想法想要讨论,请加入 [libera.chat](https://libera.chat) 上的 [#bitcoin-rust](https://web.libera.chat/?channel=#bitcoin-rust) 频道。 更多信息请参阅 [`CONTRIBUTING.md`](./CONTRIBUTING.md)。 ## 最低支持的 Rust 版本 (MSRV) 本库应能在 **Rust 1.74.0** 上编译,无论启用何种功能组合。 使用 `Cargo-minimal.lock` 构建 MSRV,方法是将其复制为 `Cargo.lock` 然后构建。 ## No-std 支持 `std` cargo feature 默认是启用的。要在没有 Rust 标准库的情况下构建此项目,请使用 `--no-default-features` 标志,或在将其添加到项目时,在依赖声明中设置 `default-features = false`。 有关嵌入式设备的示例,请参阅 [`bitcoin/embedded`](https://github.com/rust-bitcoin/rust-bitcoin/tree/master/bitcoin/embedded) 或 [`hashes/embedded`](https://github.com/rust-bitcoin/rust-bitcoin/tree/master/hashes/embedded)。 ## 外部依赖 我们集成了少量外部库,最 notably `serde`。这些 通过 feature flags 提供。为了确保兼容性和 MSRV 稳定性,我们 提供两个 lock files 作为检查兼容版本的手段: `Cargo-minimal.lock` 包含依赖的最低版本,以及 `Cargo-recent.lock` 包含在我们 CI 中测试过的依赖的最新版本。 除了“我们的 CI 使用这些版本没有失败”之外,我们不对这些 lock files 的内容提供任何 保证。具体来说,我们不保证 提交的哈希值没有恶意软件。审查它们是你自己的责任。 ## 关于竞争币/竞争链的政策 由于竞争币领域包含 [频繁出现和消失,且设计糟糕](https://download.wpsoftware.net/bitcoin/alts.pdf) 的项目,我们不支持任何竞争币。 妥善支持 Bitcoin 已经够难了,我们不想通过增加对其他币种的支持来增加 维护负担并降低 API 稳定性。 我们的代码属于公共领域,所以请随意 fork 并尽情发挥 :) ## 发布说明 发布说明按 crate 分别列出,请参阅: - [`addresses` CHANGELOG](addresses/CHANGELOG.md) - [`base58` CHANGELOG](base58/CHANGELOG.md) - [`bip158` CHANGELOG](bip158/CHANGELOG.md) - [`bitcoin` CHANGELOG](bitcoin/CHANGELOG.md) - [`chacha20_poly1305` CHANGELOG](chacha20_poly1305/CHANGELOG.md) - [`consensus_encoding` CHANGELOG](consensus_encoding/CHANGELOG.md) - [`crypto` CHANGELOG](crypto/CHANGELOG.md) - [`hashes` CHANGELOG](hashes/CHANGELOG.md) - [`internals` CHANGELOG](internals/CHANGELOG.md) - [`io` CHANGELOG](io/CHANGELOG.md) - [`p2p` CHANGELOG](p2p/CHANGELOG.md) - [`primitives` CHANGELOG](primitives/CHANGELOG.md) - [`units` CHANGELOG](units/CHANGELOG.md) ## 许可 本项目代码采用 [Creative Commons CC0 1.0 Universal license](LICENSE) 授权。 我们使用 [SPDX 许可证列表](https://spdx.org/licenses/) 和 [SPDX ID](https://spdx.dev/ids/)。
标签:BIP-0032, Crates.io, DNS解析, Layer 1, PSBT, Rust, Web3, 交易构建, 内核驱动, 加密货币, 区块链, 去中心化, 反序列化, 可视化界面, 地址生成, 密码学, 序列化, 库, 应急响应, 开发库, 开源项目, 手动系统调用, 数字货币, 比特币, 私钥管理, 网络协议, 网络流量审计, 脚本, 解析器, 通知系统