在 zkVM 中,离线内存检查用于验证内存读/写的正确性,而无需每次读取时立即验证。它通过构建读集合 (RS) 和写集合 (WS),在所有操作完成后一次性检查一致性。 为此,本文提出 Multiset Hashing 和 LogUp 两种方法。
内存检查在zkVM中,用于使证明者能够向验证者证明读/写内存的操作是正确的。在内存系统中,值 $v$ 可以被写入地址 $a$,随后程序可以通过地址 $a$ 检索值 $v$。该技术允许验证者高效地确认证明者遵守了内存的规则(即,任何读取操作返回的值确实是写入该内存地址的最新值)。
术语“离线内存检查”指的是在 zkVM 证明中,在所有读取操作返回的值被提交后,一次性检查所有读取操作的正确性的技术。离线检查技术不会在每次读取发生时立即确定其是否正确,而是在所有读取操作完成后,进行一次性检查,确认所有读取是否正确。这与“在线内存检查”技术,如 Merkle 哈希,形成对比。后者通过要求每次读取都包含认证路径来立即确认内存读取的正确性。Merkle 哈希在每次读取的基础上进行证明对证明者来说成本更高,而离线内存检查更适合 zkVM 的场景。
我们构建两个集合,读集合 $RS$ 和写集合 $WS$,它们的元素都是元组 $(a, v, c)$,其中 $a$、$v$、$c$ 分别表示地址、值和指令计数。按如下方式进行构造。
初始化:
内存读取和写入操作:
后处理:
如果做如下限制,则证明者遵守了内存的规则,即从内存中读取了正确的值。
1) 读集合和写集合...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!