#transaction #script #key #input #deserialize #block #bip-32

no-std groestlcoin

通用库,用于使用和与Groestlcoin交互

7个版本 (有破坏性的)

0.31.0 2024年2月12日
0.30.0 2023年4月5日
0.29.0 2022年8月15日
0.28.0 2022年5月23日
0.23.0 2020年7月3日

#357 in 魔法豆

每月下载量31次
3 个crate中(2个直接)使用

CC0 许可证

1.5MB
30K SLoC

Continuous integration Safety Dance

Rust Groestlcoin库

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

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

文档

支持(或应该支持)

  • Groestlcoin协议网络消息的反序列化和序列化
  • 区块和交易的反序列化和序列化
  • 脚本反序列化和序列化
  • 私钥和地址创建、反序列化和验证(包括完整的BIP32支持)
  • PSBT v0反序列化和除Input Finalizer角色之外的所有角色。使用 rust-miniscript 进行最终化。

对于与Groestlcoin Core的JSONRPC交互,建议使用 rust-groestlcoincore-rpc

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

已知限制

共识

这个库 不能 用于共识代码(即完整验证区块链数据)。它技术上支持这样做,但这样做是非常不明智的,因为在这个库和Groestlcoin Core参考实现之间存在许多已知和未知的不同之处。在像Groestlcoin这样的基于共识的加密货币中,所有各方都使用相同的规则来验证数据是至关重要的,而这个库无法实现与Core相同的规则。

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

支持16位指针大小

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

文档

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

贡献

贡献通常受到欢迎。如果您打算进行较大更改,请在发送拉取请求之前在问题中进行讨论,以避免重复工作和架构不匹配。如果您有任何问题或想要讨论的想法,请加入我们#groestlcoin频道,在libera.chat上。

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

最低支持Rust版本(MSRV)

此库应始终与Rust 1.48.0上的任何功能组合编译。

要使用MSRV构建,您可能需要锁定大量依赖项,有关当前列表,请参阅./contrib/test.sh

外部依赖项

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

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

Rust安装

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

构建

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

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

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

git clone [email protected]:rust-groestlcoin/rust-groestlcoin.git
cd rust-groestlcoin
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

拉取请求

每个PR至少需要两个审查才能合并。在审查阶段,维护者和其他贡献者可能会留下评论并要求更改。请尽量解决这些问题,否则您的PR可能会在较长时间的不活跃后被关闭而无法合并。如果您的PR还不适合审查,请通过在标题前加上 WIP: 来标记。

CI流水线

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

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

Githooks

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

git config --local core.hooksPath githooks/

或者,您可以在您的 .git/hooks 目录中添加我们提供的任何 githooks 的符号链接。

发行说明

发行说明是针对每个 crate 进行的,请参阅

许可

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

依赖

~7MB
~84K SLoC