rust-bitcoin/rust-bitcoin
GitHub: rust-bitcoin/rust-bitcoin
Rust 实现的比特币协议库,提供区块、交易、脚本和网络消息的序列化/反序列化能力。
Stars: 2603 | Forks: 965
[文档](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, 交易构建, 内核驱动, 加密货币, 区块链, 去中心化, 反序列化, 可视化界面, 地址生成, 密码学, 序列化, 库, 应急响应, 开发库, 开源项目, 手动系统调用, 数字货币, 比特币, 私钥管理, 网络协议, 网络流量审计, 脚本, 解析器, 通知系统