1 个不稳定版本
0.30.0-qtum | 2023 年 12 月 24 日 |
---|
#260 在 #transaction
在 3 crates 中使用
1.5MB
25K SLoC
Rust Qtum
该仓库是从 rust-bitcoin 分支出来的,旨在使用 Rust 与 Qtum 一起工作。
正在进行中。
支持(或应该支持)
- Qtum 协议网络消息的序列化和反序列化
- 块和交易的序列化和反序列化
- 脚本序列化和反序列化
- 私钥和地址的创建、序列化、反序列化和验证(包括完整的 BIP32 支持)
- PSBT v0 序列化和除 Input Finalizer 角色之外的所有功能。使用 rust-miniscript 来最终化。
对于与 Qtum Core 的 JSONRPC 交互,建议使用 rust-qtumcore-rpc。
下面是原始的 Bitcoin README。
支持(或应该支持)
- 比特币协议网络消息的序列化和反序列化
- 块和交易的序列化和反序列化
- 脚本序列化和反序列化
- 私钥和地址的创建、序列化、反序列化和验证(包括完整的 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.41.1 或 Rust 1.47(带有 no-std
)上与任何功能组合(除 no-std
外)编译。
要使用MSRV构建,您需要固定一些依赖项(包括 no-std
)
cargo update -p serde --precise 1.0.156
cargo update -p syn --precise 1.0.107
安装Rust
可以使用您选择的包管理器或 rustup.rs 安装Rust。前者被认为是更安全的,因为它通常不涉及对CA系统的信任。但您应该意识到,您的发行版提供的Rust版本可能已过时。通常,这对于 rust-bitcoin
来说不是问题,因为我们支持比当前稳定版更旧的版本(请参阅MSRV部分)。
构建
默认启用 cargo 功能 std
。至少必须启用以下功能之一: std
或 no-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
文档。
构建文档
我们使用夜间工具链构建文档,您可能希望使用以下shell别名来检查您的文档更改是否正确构建。
alias build-docs='RUSTDOCFLAGS="--cfg docsrs" cargo +nightly rustdoc --features="$FEATURES" -- -D rustdoc::broken-intra-doc-links'
测试
对感兴趣的人来说,有单元和集成测试,以及基准测试。对于项目开发者,特别是寻找可以工作的内容的新贡献者,我们提供以下内容:
始终有更多测试要编写和更多错误要发现,对测试工作的贡献非常欢迎。请考虑将测试代码视为一等公民,我们确实接受改进和清理测试代码的PR。
单元/集成测试
像任何其他Rust项目一样运行,使用 cargo test --all-features
。
基准测试
我们使用一个自定义的Rust编译器配置来条件性地保护基准代码。要运行基准测试,请使用以下命令:RUSTFLAGS='--cfg=bench' cargo +nightly bench
。
变异测试
我们已经开始使用mutagen进行变异测试。要运行这些测试,首先使用以下命令安装最新版本的dev版本: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
。
拉取请求
每个PR至少需要两个审阅才能合并。在审阅阶段,维护者和贡献者可能会留下评论并要求更改。请尽量处理它们,否则您的PR可能会在较长时间的不活跃后被关闭而未合并。如果您的PR还没有准备好进行审阅,请通过在标题前添加WIP:
来标记。
CI管道
CI管道需要在每个MR上运行之前获得批准。
为了加快审阅过程,可以使用act在本地运行CI管道。由于目前不支持缓存,使用act
时将跳过fuzz
和Cross
作业。我们不积极支持act
,但会合并修复act
问题的PR。
Githooks
为了帮助开发者捕捉在运行CI之前出现的错误,我们提供了一些githooks。如果您还没有在本地配置githooks,您可以通过在存储库的根目录中运行以下命令来使用此存储库中的githooks:
git config --local core.hooksPath githooks/
或者,在您的.git/hooks
目录中添加到我们提供的任何githooks的符号链接。
关于替代币/替代链的政策
欢迎添加对非比特币加密货币的支持的补丁,例如通过向现有枚举添加常量(例如,设置网络消息魔字节序列)。任何更复杂的事情都将根据具体情况考虑,因为替代币领域包括一些经常出现和消失的项目,并且设计得很糟糕,保持代码库可维护是一个重要目标。
通常,提高跨链兼容性的事物(例如,支持跨链原子交换)比只支持单个区块链的事物更有可能被接受。
发行说明
请参阅CHANGELOG.md。
许可
本项目中代码的许可协议为Creative Commons CC0 1.0 Universal license。我们使用SPDX许可列表和SPDX IDs。
依赖
~10–14MB
~215K SLoC