#groestlcoin #bindings #source #script #version #cargo #libgroestlcoinconsensus

无需std groestlcoinconsensus

Groestlcoin的libgroestlcoinconsensus与Rust绑定

3个版本 (1个稳定版)

2.20.1-0.5.0 2022年8月12日
2.19.1 2020年7月5日
2.19.1-3 2022年2月24日

#4 in #groestlcoin

每月 24 次下载
用于 groestlcoin

Apache-2.0

3MB
55K SLoC

C++ 40K SLoC // 0.1% comments C 7.5K SLoC // 0.1% comments Visual Studio Project 3.5K SLoC Automake 1K SLoC // 0.0% comments GNU Style Assembly 748 SLoC // 0.1% comments Assembly 602 SLoC // 0.0% comments Visual Studio Solution 510 SLoC Java 438 SLoC // 0.3% comments Shell 412 SLoC // 0.3% comments Rust 240 SLoC // 0.1% comments M4 224 SLoC // 0.3% comments Bitbake 73 SLoC Python 71 SLoC // 0.1% comments

包含 (晦涩的autoconf代码,61KB) depend/groestlcoin/configure.ac,(晦涩的autoconf代码,17KB) configure.ac

Groestlcoin的libgroestlcoinconsensus与Rust绑定

此项目使用cargo从Groestlcoin的C++源代码构建libgroestlcoinconsensus库,并提供对其API的Rust绑定。

libgroestlcoinconsensus允许使用Groestlcoin独特的脚本引擎进行交易验证。Groestlcoin启用应用程序应使用libgroestlcoinconsensus库,以避免接受Groestlcoin网络节点不会接受的交易。

此项目通过使用cargo创建libgroestlcoinconsensus库,简化了Rust开发者的生活。无需直接处理过时的C++工具链。这也有助于简化共识库的交叉编译,例如,为移动应用程序。

libgroestlcoinconsensus引用了另一个库的代码secp256k1。该库的快照也包含在Groestlcoin源代码中,因此它可以嵌入到libgroestlcoinconsensus中。然而,典型的Groestlcoin启用应用程序可能需要访问更多的secp256k1功能。项目rust-secp256k1提供了一个cargo构建和Rust绑定,因此我们依赖于该项目而不是将Groestlcoin嵌入式源代码编译到libgroestlcoinconsensus中。这引入了风险,因为两个secp256k1源代码之间的差异可能会破坏与Groestlcoin的共识。

版本号

我们使用[轻微滥用]语义版本控制。第一个主版本.次版本.修订版本数字跟踪所购买的Groestlcoin Core代码(见下文),第二个主版本.次版本.修订版本跟踪此crate。例如,如果我们通过修订版本版本升级Groestlcoin Core代码,我们也会增加我们的修订版本版本。

这种做法的一个副作用是,crates.io将我们的发布版本以黄色显示,就像它们是预发布版本一样,这是由于我们使用了-,在语义版本控制中,这表示预发布版本。

Groestlcoin Core子树

我们使用git subtree来提供Groestlcoin Core代码。这可以从以下提交中看出,这些提交是使用以下命令创建的:git subtree add --prefix='depend/groestlcoin' https://github.com/groestlcoin/groestlcoin.git v2.19.1 --squash

0c8f8595b Squashed 'depend/groestlcoin/' content from commit 9b4017c7c
b96a589b0 Merge commit '0c8f8595b64fa28c5aedfa37d28ecda7e36e1dc5' as 'depend/groestlcoin'

要使用Groestlcoin Core的较新版本,例如v2.20.1

git subtree pull --prefix='depend/groestlcoin' https://github.com/groestlcoin/groestlcoin.git v2.20.1 --squash

MSRV

此crate的MSRV为1.41.1

Githooks

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

git config --local core.hooksPath githooks/

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

API

API非常基础,直接暴露Groestlcoin的API。这是故意的,以保持此项目的最小占用空间,不添加任何额外的运行时依赖项。您将需要一个其他Rust库来序列化Groestlcoin交易和脚本。

验证Groestlcoin交易的单一支出(输入)

verify(spent_output_script: &[u8],amount: u64,spending_transaction: &[u8],input_index: usize) -> Result<(), Error>

参数

  • spend_output_script:要支出的Groestlcoin交易输出脚本
  • amount:支出的输出金额,单位为gros
  • spending_transaction:支出Groestlcoin交易,以Groestlcoin的在线格式序列化
  • input_index:在spending_transaction中的输入索引

注意,仅对Segwit交易检查支出的金额。上述示例不是segwit,因此验证将接受任何金额。

依赖项