织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链

技术解读 AppliedZKP 的 zkEVM 方案设计思路(2)

时间:2021-09-02 09:04来源:未知 作者:admin 点击:
def build_mapping(): keys = [1,3,5] values = [2,4,6] randomness = hash(keys, values) mappings = [] for key , value in zip(keys,values): mappings.append(key + randomness*value) return(mappings) 想证明

  def build_mapping():

  keys = [1,3,5]

  values = [2,4,6]

  randomness = hash(keys, values)

  mappings = []

  for key , value in zip(keys,values):

  mappings.append(key + randomness*value)

  return(mappings)

  想证明某个 key-value 对在一些 key-value 中,可以通过三个 Plookup 证明实现:

  def open_mapping(mappings, keys, values):

  randomness = hash(keys,values)

  index = 1

  # Prover can chose any mapping, key , value

  mapping = plookup(mappings)

  key = plookup(keys)

  value = plookup(values)

  # But it has to satisfy this check

  require(mappings[index] == key[index] + randomness*value[index])

  # with overwhelming probability will not find an invalid mapping.

  keys 和 values 是 State 相关的 key-value 对。mappings 是所有 key-value 对行程的 mapping 数组。通过三个 Plookup 证明:

  •   某个 mapping 的 key 在 keys 中

  •   某个 mapping 的 value 在 values 中

  •   某个 mapping 在 mappings 中

  并且 mapping 和 key-value 满足 build_mapping 建立的关系。如上的这些证明,能够证明某个 key-value 对是 keys 和 values 的 mapping 中的部分。

  在如上的基础上,可以定义出 bus_mapping 的数据结构:

  bus_mapping[global_counter] = {

  mem: [op, key, value],

  stack: [op, index, value],

  storage: [op, key, value],

  index: opcode,

  call_id: call_id,

  prog_counter: prog_counter

  }

  其中,global_counter 是 slot 的编号。slot 是一个证明逻辑的最小单元。一个交易的证明由多条指令组成,每个指令可能由多个 slot 组成。op 是操作类型,逻辑上由读和写组成。prog_counter 是 pc。所有的 bus_mapping 中的读取操作可以通过 plookup 确定是不是「属于」当前的 State。读取状态需要和老的存储状态一致,写入状态需要和更新后的存储状态一致。

  在 Bus mapping 的基础上,采用 State Proof 和 EVM Proof 证明数据的读写正确以及和 opcode 的语义一致。

State Proof

  State Proof 证明了和「存储」相关的读写和 Bus Mapping 的数据一致。也就是在「总线」上的读写数据的一致性。State Proof 根据存储类型分成三种证明。

Storage

  和 Storage 相关的 op code 罗列如下:

  相关的 op code 分为两种,一种是 Storage 读,一种是 Storage 写。比如 SLOAD 就是从 Storage 读取数据到 Stack 中。Storage 相关的 op code 对应的读写数据在 Bus mapping 中。注意,State Proof 中的 Storage 证明只单纯证明 Storage 相关的读写操作是否在 bus mapping 中。至于读写数据的语义信息是通过 EVM proof 进行证明的。 (责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容