20 个版本

0.2.0 2024年6月10日
0.1.14 2023年10月18日
0.1.13 2023年7月5日
0.1.11 2023年2月24日
0.1.4 2020年11月17日

#900 in 魔法豆

Download history 1155/week @ 2024-04-16 1026/week @ 2024-04-23 1179/week @ 2024-04-30 515/week @ 2024-05-07 1470/week @ 2024-05-14 590/week @ 2024-05-21 155/week @ 2024-05-28 764/week @ 2024-06-04 1453/week @ 2024-06-11 791/week @ 2024-06-18 561/week @ 2024-06-25 374/week @ 2024-07-02 772/week @ 2024-07-09 1004/week @ 2024-07-16 939/week @ 2024-07-23 1055/week @ 2024-07-30

每月下载 3,928
5 个 crate 中使用 (通过 zebra-script)

Apache-2.0

4.5MB
39K SLoC

C 35K SLoC // 0.0% comments C++ 3K SLoC // 0.1% comments GNU Style Assembly 742 SLoC // 0.1% comments Rust 244 SLoC // 0.1% comments Automake 205 SLoC // 0.1% comments Shell 76 SLoC // 0.2% comments M4 42 SLoC // 0.2% comments

包含 (神秘的 autoconf 代码,19KB) depend/zcash/src/secp256k1/configure.ac

zcash_script

Build Status Latest Version Rust Documentation

Rust 对 ECC 的 zcash_script C++ 库的绑定。

开发中

此 crate 通过手动包含 zcash_script .h 和 .cpp 文件,使用 bindgen 生成 Rust 绑定,然后将所有内容编译成一个单一库来实现。

更新此 crate

  1. 创建一个新的分支 batch,以便所有发布提交都可以合并到 PR 中
  2. 使用以下说明更新 depend/zcash,使用最新标记的 zcashd 版本
  3. 通过运行 cargo test 测试是否一切正常。如果您遇到任何编译错误,请参阅以下故障排除部分。
  4. 检查所有开放的 PR,以确定它们在发布前是否可以合并
  5. 按照以下说明进行发布
  6. 检查发布标签是否已推送到 https://github.com/ZcashFoundation/zcash_script/tags

更新 depend/zcash

我们在 depend/zcash 中保留了一份 zcash 源代码副本,但它在 0.2.0 版本发布(基于 zcashd 5.9.0)时出现了以下变化:

  • 删除了根目录下的 Cargo.toml,否则 cargo 在发布 crate 时将忽略整个文件夹(参见 https://github.com/rust-lang/cargo/issues/8597)。
  • 在 interpreter.h/.cpp 中引入了新的类,以支持回调 API。
  • 添加了一些 #if 代码,以移除不需要用于脚本验证的代码。

简化的 API 现在主要需要用于脚本验证的文件。这些文件不太可能发生变化,因此此 crate 不再需要与 zcashd 源代码同步,除非有脚本验证中的某些错误修复。

如果需要更新 zcashd 源代码,您需要手动更新 depend/zcash 源代码树,并重新应用对其所做的更改。如果您这样做,请在此文件中详细记录过程。

发布新版本

使用 cargo release 来发布 zcash-script 的版本。

  1. 更新 CHANGELOG.md 来记录自上次发布以来的任何重大变化
  2. 运行 cargo release <level> 来提交版本号的提升(但实际上并不发布),<level> 可以是 patchminormajor
  3. 打开一个包含更改的 zcash_script PR,进行审查,并等待 CI 通过
  4. 使用 cargo release --execute <level> 发布新版本

注意:由于 cargo release 实现替换的方式,指定级别非常重要。我们在 Cargo.toml 中指定了多个自动替换,但只有当 cargo release 同时处理版本号的递增时,它们才会被应用,不要手动递增版本号然后运行 cargo releasecargo release -- release,否则代码库中的所有版本引用将不会正确更新。

故障排除

"未定义的引用到 name"

这通常意味着一个 .c 文件没有被包含在 build.rs 中。在 zcashd 源代码树中搜索 name 以找到包含它的文件,并将其添加到 build.rs 中的 file() 调用中。

"致命错误:找不到文件或目录 file"

这很可能意味着没有找到 .h 文件。搜索具有指定名称的文件,并将该文件的文件夹添加到 .include() 调用中的 build.rs 文件。如果该文件不存在那里,它很可能是构建时下载的第三方依赖项。使用搜索引擎搜索文件名,尝试找到它所属的项目,并对照 zcashd 中的 depends/packages 文件夹进行交叉引用。然后您可能需要将那些文件复制到 zcash_script 内的某个文件夹中,就像我们在 depend/expected 中做的那样。

无运行时依赖