#plonky2 #zk #ethereum #stark #cryptography

trace_decoder

Ethereum节点见证 -> 推理者输入

7个版本 (重大变更)

0.6.0 2024年7月15日
0.5.0 2024年7月15日
0.4.0 2024年6月12日
0.3.1 2024年4月22日
0.1.0 2024年2月21日

#9 in #plonky2

Download history 152/week @ 2024-04-23 1/week @ 2024-05-14 153/week @ 2024-06-11 7/week @ 2024-06-18 8/week @ 2024-07-02 131/week @ 2024-07-09 102/week @ 2024-07-16 10/week @ 2024-07-30

243 每月下载量

MIT/Apache

7.5MB
61K SLoC

Rust 39K SLoC // 0.1% comments Assembly 21K SLoC Pest 35 SLoC
该库正在作为 (#275)(https://github.com/0xPolygonZero/zk_evm/issues/275) 的一部分进行重大重构。请将所有 TODOs 跟踪在该问题下。

您的本地zk-ready ethereum 节点 发出二进制 "witnesses"[^1]。

但是 plonky2,您的推理者,需要 GenerationInputs

这个库可以帮助您实现这一点。

[^1]: witness 是对世界状态的证明,可以被推理者证明。

非目标

  • 性能 - 这不会成为任何推理系统的瓶颈。
  • 健壮性 - 恶意或不规范的输入可能会导致此库崩溃。

TODO(0xaatif): 重构以下所有文档

可能不明显为什么我们需要每个事务的跟踪信息来生成证明。虽然我们可以在 EVM 中运行一个区块的所有事务来生成跟踪信息,但这有几个主要的缺点

  • 客户端可能是一个全节点,并且已经必须在任何情况下都在 EVM 中运行事务。
  • 我们希望此协议对我们要为它生成证明的底层链尽可能无差别,运行自己的 EVM 可能会导致我们失去这种通用性。

虽然我们也在运行自己的 zk-EVM (plonky2) 来生成证明,但能够并行生成事务证明至关重要。由于使用 plonky2 生成证明非常慢,这将迫使我们串行化整个证明生成过程。因此,最终,如果我们能将此信息发送给我们,这将是最理想的。

本库根据[BlockTrace]和一些用[OtherBlockData]表示的附加数据生成区块交易的中间表示(IR)。

它首先预处理[BlockTrace],以提供可以直接用于生成IR的交易、提款和尝试数据。对于每一笔交易,该库从处理后的交易信息中提取必要的数据以返回IR。

IR用于生成根证明、聚合证明,最后是区块证明。由于聚合证明至少需要两个条目,因此当需要时,我们将IR的向量填充,通过额外的虚拟负载中间表示。

提款和填充

所有提款都在一起在一个虚拟负载中证明。虚拟负载对应于没有交易的证明的IR。但是,它们必须最后被证明。因此,填充操作如下:如果没有交易在区块中,我们添加两个虚拟交易。如果有提款,则将提款添加到第二个虚拟交易中。如果区块中只有一个交易,我们添加一个虚拟交易。如果有提款,虚拟交易在最后。否则,它被添加到开始处。如果有两个或更多交易

  • 如果没有提款,则不添加虚拟交易
  • 如果有提款,则在最后添加一个虚拟交易,其中包含所有提款。

依赖项

~12–19MB
~277K SLoC