Feeding Program Source Code to ZK VMs

1. 引言

本文主要摘自Polygon Miden创始人Bobbin Threadbare在Compiler and Composability in ZKP 上的演讲内容。

2. 计算分类

计算主要分为2大类:

  • 1)Circuit computations:为Signals propagating through a network of gates。即以门构成,计算通过门之间signal的传输来实现。
  • 2)Machine computations:为Transition function applied to a computation state。为更自然的表达方式。本文重点关注machine computations。

3. 何为ZK VM(零知识虚拟机)?

常规虚拟机结构为:
在这里插入图片描述
零知识虚拟机结构为:
在这里插入图片描述

4. 如何将a program提供给虚拟机?

如何将a program提供给虚拟机?主要实现方式有:

  • 1)通过public memory:虚拟机的public memory的初始化指令中包含了该program。
  • 2)通过bootloading:将该program的哈希值提供给虚拟机,在虚拟机内,该哈希值可非确定性地inverted为一组指令。
  • 3)通过codeword commitment:将program指令 编码为 codeword,在proof中额外包含该codeword的承诺值。
  • 4)通过MAST root:由虚拟机计算Merkelized abstract syntax tree(MAST)的root值,具体计算方式为以结构化mapper的形式来对program指令进行哈希。

以上四种将a program 提供给虚拟机的方式 的优缺点对比为:
在这里插入图片描述

4.1 通过public memory将a program提供给虚拟机

在这里插入图片描述

4.2 通过bootloading将a program提供给虚拟机

在这里插入图片描述

4.3 通过codeword commitment将a program提供给虚拟机

在这里插入图片描述

4.4 通过MAST root将a program提供给虚拟机

在这里插入图片描述

4.4.1 何为MAST?

指令的Merkelized abstract syntax tree(MAST)的关键属性有:

  • 可将所有programs reduce为一个哈希值(即MAST的root值)。
  • 每个内部节点本身也是a smaller program的MAST。
  • a program MAST的所有叶子均为linear programs(无control flow控制流)。

MAST示例为:
在这里插入图片描述

扫描二维码关注公众号,回复: 14390474 查看本文章

参考资料

[1] Compiler and Composability in ZKP

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/125949814