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
243 每月下载量
7.5MB
61K SLoC
您的本地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