#bitcoin #key #script #deserialize #crypto #block #transaction

no-std sapio-bitcoin

适用于使用和互操作比特币及其他加密货币的通用库,并扩展了Sapio的功能。

7个版本

使用旧Rust 2015

0.28.2 2024年1月16日
0.28.1 2022年5月22日
0.28.0-rc.32022年2月22日
0.26.1 2022年2月21日
0.26.0 2021年3月22日

#733 in 神奇豆子

Download history 396/week @ 2024-04-07 86/week @ 2024-04-14 67/week @ 2024-04-21 73/week @ 2024-04-28 58/week @ 2024-05-05 63/week @ 2024-05-12 77/week @ 2024-05-19 87/week @ 2024-05-26 50/week @ 2024-06-02 60/week @ 2024-06-09 101/week @ 2024-06-16 66/week @ 2024-06-23 63/week @ 2024-06-30 43/week @ 2024-07-07 76/week @ 2024-07-14 63/week @ 2024-07-21

245 每月下载次数
用于 16 个crate (14 直接)

CC0 许可

1.5MB
19K SLoC

Rust Bitcoin

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

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

Crate Info MIT or Apache-2.0 Licensed CI Status API Docs Rustc Version 1.29+ Chat on IRC Lines of code

文档

支持(或应该支持)

  • 比特币协议网络消息的反序列化
  • 块和事务的反序列化
  • 脚本反序列化
  • 私钥和地址创建、反序列化和验证(包括完全BIP32支持)
  • PSBT创建、操作、合并和最终化
  • 支持附录A中的支付到合约,如Blockstream侧链白皮书中所述

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

已知限制

共识

这个库 不得 用于共识代码(即完全验证区块链数据)。技术上支持这样做,但这样做是非常不推荐的,因为该库与Bitcoin Core参考实现之间存在许多已知和未知的不同之处。在像比特币这样的基于共识的加密货币中,所有各方都必须使用相同的规则来验证数据,而这个库无法实现与Core相同的规则。

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

支持16位指针大小

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

文档

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

贡献

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

最低支持的Rust版本(MSRV)

该库应始终在具有任何组合功能(除no-std之外)的情况下,在Rust 1.29Rust 1.47上编译,其中no-std

由于某些依赖项在次要/补丁版本中破坏了构建,要使用1.29.0编译,您需要运行以下版本锁定命令

cargo update -p cc --precise "1.0.41" --verbose

为了使用use-serde功能或使用1.29.0构建单元测试,还需要以下版本锁定命令

cargo update --package "serde" --precise "1.0.98"
cargo update --package "serde_derive" --precise "1.0.98"

为了使功能base64与1.29.0一起工作,我们还需要锁定byteorder

cargo update -p byteorder --precise "1.3.4"

安装Rust

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

构建

可以使用cargo构建和测试库

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

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

cargo test

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

拉取请求

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

CI流水线

CI流水线需要在每个MR上运行前获得批准。

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

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

欢迎通过向现有枚举添加常量(例如,设置网络消息魔数字节序列)来支持非比特币加密货币的补丁。任何更复杂的功能将根据具体情况考虑,因为替代币领域包括经常出现和消失的项目,而且设计本身就很差。保持代码库可维护性是一个重要目标。

通常,那些改善跨链兼容性(例如,支持跨链原子交换)的功能比仅支持单个区块链的功能更有可能被接受。

发行说明

请参阅CHANGELOG.md

许可协议

本项目中的代码遵循Creative Commons CC0 1.0 Universal license

依赖项

~5–8MB
~94K SLoC