Sin7y团队解读:Miden的stark证明系统_STA:TRA

引言

miden是一个基于strark技术的zkvm实现方案。它的底层是基于winterfell这个zkp库来生成stark证明和对证明进行验证。下图1中虚线部分是Miden实现的主要功能。可以看出,主要有三个组件构成。

1.一套词法语法编译器,下图1中的lexicalanalyzer和syntaxparser。它们可以将miden定义的汇编指令编程成codeblock和block中包含的opcode和opvalue。

2.一套指令的执行器,下图1中的executor。它负责按照定义的规则执行codeblock和block中包含的opcode及opvalue。执行结果为用于生成证明的executiontrace。

3.一套符合stark证明要求的AIR(代数中间表示),下图1中的AIR。用来对miden的虚拟机执行过程进行约束。

AIR结构设计图

AIR的约束分为stack和decoder两部分:

图2为stack的约束,初始化时分配了最上边深度为8的stack。在执行时根据程序需要,可能会超出初始化分配的深度,那么max_depth会根据需要递增。但是不能超过最大深度16。否则报错。

图3为decoder的约束。其中的op_counter,op_sponge,cf_op_bits,ld_op_bits,hd_op_bits是固定列长度的。其中的op_sponge用于执行指令的顺序和正确性的约束。cf_op_bits约束3bit的flow_ops。ld_op_bits,hd_op_bits分别约束了user_ops的低5bits和高2bits。ld_op_bits和hd_op_bits组合构成一条执行的user_op,还用来作为stack每step状态约束的selector。

以太坊侧链SKALE与Web3社交平台OIX达成合作:5月6日消息,以太坊侧链SKALE与Web3社交平台OIX达成合作。通过此次合作,OIX可以为用户提供无成本、高性能的交易,从而提升用户体验和可扩展性。据悉,OIX支持来自图像、视频、音频和3D的内容,包括增强现实和虚拟现实,并提供七种语言版本。通过其适合移动设备的社交信息源,用户可以连接、社交、互动和交易所有类型的数字资产,而无需支付任何市场费用。[2023/5/6 14:46:58]

MidenVM执行过程实例

本节将展示一个简单的miden逻辑来说明vm的执行过程和stark的executiontrace的生成。

下边代码段1是要执行的代码段:

它执行的逻辑是将3和5压栈。之后从tape读取flag。判断flag是1还是0。如果是1则运行if.true分支将压栈的两个数3和5取出,相加得到8并重新压入栈。如果是0则运行else分支将压栈的两个数3和5取出相乘得到15,再将15重新压入栈。

代码段通过miden的词法和语法分析器解析后的最终指令代码如下代码段2:

BSN-DDC基础网络上线官方DDC跨链应用合约:据官方消息,2023年4月7日,BSN-DDC基础网络在最新的系统升级中,上线了官方DDC跨链应用合约。目前该合约支持官方DDC在武汉链、泰安链、文昌链三条开放联盟链间的互跨操作,合约调用已封装入DDC-SDK中。BSN-DDC基础网络平台方将通过该合约,获得更具开放性与灵活性的业务环境。[2023/4/17 14:08:22]

下边图4是vm运行代码段2的过程,中间是executor执行opcode的流程图,左边虚线指向的是代码执行产生的decodertrace,右边点划线指向的是代码执行产生的stacktrace。

其中executor是按照codeblock来一块一块执行。在本例子里,首先执行了一个spanblock。之后在第32步时执行if-else-end结构进入了swtichblock块,并将之前的spanblock的最后一步执行生成的spongehash压入ctx_stack,并在swtichblock块执行完之后,在第49步弹出到sponge里。

Note:本文档描述针对miden工程的main分支最新版本。目前miden的next分支对于指令进行了大量重新设计,AIR也只实现了很少一部分的约束。

stack约束条件

本节将展示主要的User操作指令的约束条件。其中的old_stack_x指的是指令执行前的stack的x位置存储的value。new_stack_x指的是指令执行后的stack的x位置存储的value。-->是将栈左边位置的value拷贝到右边位置。==是等式约束。stack的约束相对比较简单,就不多做解释了。

条件指令

Choose

Constrain:

“新美联储通讯社”:预计美联储11月加息75BP 可能暗示12月缩小加息幅度:10月21日消息,华尔街日报记者Nick?Timiraos在最新发表的文章中表示,美联储官员预计将在11月会议上再次加息75个基点,届时可能会讨论是否以及如何发出12月进行较小幅度加息的信号。一些官员已经开始暗示,他们既希望尽快放慢加息步伐,也希望明年初停止加息,以观察今年的措施对经济放缓的影响。他们希望降低出现不必要的急剧放缓的风险。其他人则表示,现在讨论这些问题还为时过早,因为事实证明,高通胀将更加持久和广泛。

美股在7月和8月反弹,因预期美联储可能放缓加息。这与联储的目标相冲突,因为更宽松的金融环境会刺激支出和经济增长。这一反弹促使美联储主席鲍威尔在8月底重新起草了一份重要讲话,以消除投资者对他抗击通胀承诺的误解。如果官员们考虑在12月加息50个基点,他们会希望在11月会议后的几周内,让投资者为这一决定做好准备,以免引发新一轮的股市持续上涨。一个可能的解决方案是,美联储官员在12月批准加息50个基点,同时利用新的经济预测反映美联储可能在2023年将利率提高到比上个月预测的更高的水平。[2022/10/21 16:34:52]

如果condition为1,x在堆栈顶部,condition为0,y在堆栈顶部

算术指令

add

Constrain:

mul

Constrain:

美国破产法院命令Celsius破产案独立审查员制作中期报告,预计将于11月中旬提交:10月8日消息,美国破产法官Martin Glenn周五在法庭听证会上裁定,加密借贷平台Celsius Network破产案的独立审查员Shoba Pillay将需要提供一份中期报告,详细说明Celsius的财务管理和客户账户处理。根据裁决,这份中期报告预计将于11月中旬提交,它将成为确定谁拥有托管和扣留账户中持有的加密货币资产,以及在什么情况下托管和扣留账户持有人可以访问其资产的过程的一部分。Kleinberg Kaplan律师事务所合伙人Dov Kleiner表示,Pillay的中期报告将标志着法院将首次听取独立、中立的第三方就案件中的一些关键问题的意见,预计她将对货币的持有方式、如何储存和转移,以及目前归属等问题发表意见。该报告还可能影响有关潜在优先索赔和交易赔偿的决定。Glenn法官表达了对Celsius管理成员在Celsius破产前撤资的担忧。预计这位审查员还将调查内幕交易。(CoinDesk)[2022/10/8 12:49:21]

inv

Constrain:

neg

Constrain:

去中心化区块链全栈平台BridgeCoin近期即将上线:据官方消息,由社区驱动的、面向Web3.0 的去中心化加密项目BridgeCoin即将上线。

BridgeCoin集支付生态、消费生态、金融服生态于一身,打造并向用户提供人性化、立体化、全方位的加密资产交易服务。

BridgeCoin已经搭建了以区块链为底层的应用系统。[2022/8/7 12:08:07]

bool指令

not

Constrain:

and

Constrain:

or

Constrain:

hash指令

RESCR

满足hash函数协议的限制函数hash

占用6registers

Constrain:

比较指令

eq

Constrain:

cmp

根据比较的两个数的bit长度循环比较。比如

A:

B:

需要比较4次

Constrain:

堆栈操作指令

dup.n

Constrain:

swap

Constrain:

ROLL4

Constrain:

decoder的约束条件

本节将展示主要的Flow操作指令的约束条件。

用户代码执行

op_bits

对于cf_op_bits,ld_op_bits,hd_op_bits的约束。

约束1:每bit只能为0或者1。

约束2:当op_counter不为0时,ld_ops和hd_ops不能同时为0。

约束3:当cf_op_bits为hacc时。op_counter状态会加1。

约束4:BEGIN,LOOP,BREAK,andWRAP指令需要16对齐

约束5:TENDandFEND指令需要16对齐

约束6:PUSH指令需要8对齐

hacc

hacc作为flowOps,每次执行该指令都会引起sponge的状态改变,需要进行约束

条件判断

t_end

作为if的true分支结束的约束,分为两部分:

约束1:sponge状态的约束,弹出栈顶的值等于new_sponge_0。if的true分支的最后一步执行后的sponge等于new_sponge_1。new_sponge_3等于0。

约束2:ctx_stack的约束。弹出栈顶的值等于new_sponge_0。栈内其他元素都往栈顶移动一个位置。

约束3:loop_stack的约束。loop_stack的状态不变。

f_end

作为if的false分支结束的约束,分为两部分:

约束1:sponge状态的约束,弹出栈顶的值等于new_sponge_0。if的true分支的最后一步执行后的sponge等于new_sponge_2。new_sponge_3等于0。

约束2:ctx_stack的约束。弹出栈顶的值等于new_sponge_0。栈内其他元素都往栈顶移动一个位置。

约束3:loop_stack的约束。loop_stack的状态不变。

关于我们

Sin7y成立于2021年,由顶尖的区块链开发者和密码学工程师组成。我们既是项目孵化器也是区块链技术研究团队,探索EVM、Layer2、跨链、隐私计算、自主支付解决方案等最重要和最前沿的技术。

微信公众号:Sin7y

GitHub:Sin7y

Twitter:@Sin7y_Labs

Medium:Sin7y

Mirror:Sin7y

HackMD:Sin7y

HackerNoon:Sin7y

Email:contact@sin7y.org

来源:金色财经

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

水星链

[0:15ms0-1:21ms