#commitment #polynomial #bindings #ethereum #eip-4844 #api #interface

sys no-std c-kzg

EIP-4844 和 EIP-7594 的多项式承诺 API 的最小实现,用 C 语言编写

9 个版本 (4 个稳定)

2.0.0 2024 年 8 月 26 日
1.0.3 2024 年 8 月 26 日
1.0.2 2024 年 5 月 8 日
1.0.0 2024 年 3 月 13 日
0.1.1 2023 年 9 月 28 日

#10 in #commitment

Download history 18320/week @ 2024-05-06 17205/week @ 2024-05-13 15488/week @ 2024-05-20 15288/week @ 2024-05-27 16291/week @ 2024-06-03 18693/week @ 2024-06-10 22005/week @ 2024-06-17 23778/week @ 2024-06-24 20584/week @ 2024-07-01 23072/week @ 2024-07-08 26094/week @ 2024-07-15 26507/week @ 2024-07-22 25423/week @ 2024-07-29 29666/week @ 2024-08-05 32301/week @ 2024-08-12 30708/week @ 2024-08-19

119,659 个月下载量
103 包(11 个直接)中使用

Apache-2.0

2MB
31K SLoC

Perl 18K SLoC // 0.1% comments C 9K SLoC // 0.2% comments Rust 2K SLoC // 0.0% comments Java 1K SLoC // 0.1% comments C++ 709 SLoC // 0.2% comments

C-KZG-4844

EIP-4844 和 EIP-7594 的多项式承诺 API 的最小实现,用 C 语言编写。

绑定

虽然核心实现是 C 语言,但提供了各种高级语言的绑定,为 C 函数提供方便的包装。这些绑定旨在供以太坊客户端使用,以避免重新实现关键的加密函数。

语言 链接
C# README
Go README
Java README
Nim README
Node.js README
Python README
Rust README

接口函数

C-KZG-4844 库提供了多项式承诺规范中定义的公共 KZG 函数的实现。目标是尽可能与规范保持一致。

EIP-4844

  • blob_to_kzg_commitment
  • compute_kzg_proof
  • compute_blob_kzg_proof
  • verify_kzg_proof
  • verify_blob_kzg_proof
  • verify_blob_kzg_proof_batch

EIP-7594

  • compute_cells_and_kzg_proofs
  • recover_cells_and_kzg_proofs
  • verify_cell_kzg_proof_batch

此库还提供了加载和释放可信设置的函数,这些函数在规范中未定义。这些函数旨在在初始化过程中执行一次。正如其名所示,可信设置文件被认为是可信的。

  • load_trusted_setup
  • load_trusted_setup_file
  • free_trusted_setup

备注

测试

所有绑定都针对定义在 consensus-spec-tests 仓库中的 KZG 参考测试进行了测试。此外,内部 C 函数的单元测试套件位于 此处

并行化

C-KZG-4844中的接口函数为了简单起见是单线程的,因为在多个平台上实现多线程可能会很复杂。虽然性能很重要,但这些函数已经相当快速和高效。例如,verify_blob_kzg_proof预计在大多数系统上将在3毫秒内完成。

批量验证

在处理多个blob时,verify_blob_kzg_proof_batch比逐个调用verify_blob_kzg_proof更有效率。在CI测试中,批量验证64个blob比逐个验证快53%。对于单个blob,verify_blob_kzg_proof_batch调用verify_blob_kzg_proof,开销可以忽略不计。

基准测试

C-KZG-4844在Go绑定中提供了基准测试。在高级语言中编写基准测试更容易,而在绑定中进行基准测试可以提供更真实的性能概述,包括FFI开销。此外,预计C-KZG-4844不会在绑定之外使用。

安全审计

C-KZG-4844的源代码于2023年6月由Sigma Prime进行了审计。您可以在doc/audit/目录中找到审计报告。值得注意的是,审计针对的是提交fd24cf8以及为EIP-7594引入的代码尚未进行审计

为什么是C?

选择C的主要原因是我们想要使用的BLS12-381签名库blst大部分是用C编写的。Rust是一个可行的替代方案,但它有一些缺点。C工具链无处不在,让所有绑定都依赖于另一个工具链(如Rust)会有些尴尬。与Rust相比,C提供了更轻量级的内存和二进制占用。此外,C是FFI的事实上的语言,所以我们无论如何也无法完全避免使用C。

依赖项