TIN:TinyRam指令集和电路约束-ODAILY

简介

Tinyram是一个简单的RISC随机存取机器,具有字节寻址的random-accessmemory和inputtapes。TinyRAM有两个变体:一个遵循哈佛架构,一个遵循冯诺依曼架构(本文我们主要讨论冯诺依曼架构)。

简明计算完整性和隐私研究项目构建了证明TinyRAM程序正确执行的机制,而TinyRAM的设计是为了在这种情况下提高效率。它在“拥有足够表达能力”和“足够简约”这两个对立面之间取得平衡:

?当从高级编程语?编译时,有足够的表达能力来支持简短高效的汇编代码。

?小指令集,指令通过运算电路简单验证,利用SCIPR的算法和密码机制实现高效验证。

本文对于tinyram不再进行重复介绍,会对上一篇文章进行补充,然后重点是指令介绍和电路约束介绍。tinyram基础介绍可以参考我们团队上一篇文章:TinyRam介绍

Tinyram指令集

Tinyram总共有29个指令,每条指令都由一个操作码和最多三个操作数组成。一个操作数可以是一个寄存器的名称。除非特别说明,否则指令不会单独修改flag。每条指令默认将pc增加i(i%2^W),对于vnTinyram来说i=2W/8。

一般来说,第一个操作数是指令计算的目标寄存器,其他的操作数指定指令需要的参数,最后,所有指令都需要机器的一个周期来执行。

位操作

整数操作

这些是各种无符号和有符号的整数操作。在每种情况下,如果发生算术溢出或错误,flag被设置为1,否则被设置为0。

shift操作

?shl指令shlrirjA将左移位ubit得到的W位string存储在ri寄存器中。移位后的空白位置被填充为0。此外flag被设置为的最高有效位。

?shr指令shrrirjA将右移位ubit得到的W位string存储在ri寄存器中。移位后的空白位置被填充为0。此外flag被设置为的最低有效位。

Web3构建和管理模拟游戏Tiny Colony上线Immutable X:1月14日消息,Web3构建和管理模拟游戏Tiny Colony宣布在Immutable X上推出。通过采用Immutable X技术,Tiny Colony将能够提供许多新特性和功能,包括更快、更灵敏的性能;改进安全性;内置加密钱包,为新Web3游戏玩家提供更方便的访问功能;玩家可以选择使用法定货币购买游戏内资产等。现有的Tiny Colony NFT玩家可以访问游戏的MVP版本来测试核心机制,并向开发团队提供反馈。

据了解,Tiny Colony是一款像素化建筑和管理模拟游戏,最初在Solana区块链上开发。其联合创始人兼首席执行官Arshia Navabi曾就职于Netflix、迪士尼、Prime和派拉蒙的热门影片制作团队。

此前,Tiny Colony曾是Solana生态游戏市场Fractal上最畅销的系列,售出超过18000件资产并筹集了300万美元。(PR Newswire)[2023/1/14 11:12:12]

比较操作

比较操作中的指令每一个都不会修改任何寄存器;比较的结果存储在flag中。

move操作

?mov指令movriA将存储到ri寄存器中。

?cmov指令cmovriA如果flag=1,将存储到ri寄存器中。否则ri寄存器的值不会改变。

Jump操作

这些jump和条件jump指令都不会修改寄存器和flag但是会修改pc。

?jmp指令jmpA将存储到pc中。

?cjmp指令cjmpA在flag=1的条件下将存储到pc中,否则pc自增1。

?cnjmp指令cnjmpA在flag=0的条件下将存储到pc中,否则pc自增1。

Memory操作

这些是简单的memoryload和store操作,其中memory的地址由立即数或寄存器的内容确定。这些是tinyram中唯一的寻址方式。。

Justin Sun申请为Binance的行业恢复基金提供资金:金色财经报道,区块链运营商Tron DAO和Justin Sun已经申请为Binance的行业恢复基金提供资金。Binance昨天公布了该基金的细节,此前CEO赵长鹏曾表示计划推出该基金。币安最初向该平台投入了10亿美元。同时,Jump Crypto、Polygon Ventures、Aptos Labs、Animoca Brands、GSR、Kronos和Brooker Group同意了约5000万美元的初始总承诺。

Tron DAO的一位发言人表示,我们不知道这个公告。我们已经申请加入这一融资计划,很快就会收到他们的回复。(theblock)[2022/11/25 20:45:29]

输入操作

该指令是唯一一个访问两个tapes中的任意一个的指令。第0个tape用于primary输入,第1个tape用户auxiliary输入。

输出操作

该指令表示程序已经完成了计算,因此不能再允许其他操作。

指令集约束

Tinyram采用R1CS约束形式进行电路约束,具体形式如下:

一个R1CS约束,可以有a,b,c三个linear_combination表示,一个R1CS系统中的所有变量的赋值,可以分为两个部分:primaryinput和auxilaryinput。Primary就是我们经常说的“statement”。auxiliary就是“witness”。

一个R1CS约束系统包含多个R1CS约束。每个约束的向量长度是固定的。

Visa以18亿欧元收购瑞典开放银行公司Tink:信用卡巨头Visa将以18亿欧元(约合21.5亿美元)的价格收购瑞典开放银行平台Tink。该消息是在Visa计划以53亿美元收购总部位于旧金山的金融科技公司Plaid的计划终止后不到六个月发布的,该交易遭到美国司法部的强烈反对。这笔18亿欧元的交易,包括现金和保留激励措施,需要获得监管机构的批准。(The Block)[2021/6/24 0:03:15]

Tinyram在libsnark的代码实现中大量使用了一些定制gadgtes来表述vm的约束以及opcode执行和memory的约束。具体代码在gadgetslib1/gadgets/cpu_checkers/tinyram文件夹下。

位操作约束

?and约束公式:

and的R1CS约束将参数1和参数2以及计算结果逐bit位进行乘法计算验证,约束步骤如下:

1.计算过程约束,代码如下:

2.结果编码约束

3.计算结果非全0约束

4.flag约束

?or约束公式:

具体约束步骤如下:

1.计算过程约束,代码如下:

动态 | Weiss Ratings被指责抄袭关于Nano的文章:加密爱好者G0JlRA发推称,Weiss Ratings抄袭此前一篇关于Nano的FUD文章,并冒充为自己的文章。 根据其发布的截图,原文作者为Viperblckz,于7月12日在Trybe.One发布文章“NANO — a Tall Promise of Radical Decentralization and Scalability Betrayed”;而Weiss Ratings官网于7月26日发布标题一致、内容几乎无差异的文章,署名为Juan Villaverde。[2019/7/27]

2.结果编码约束

3.计算结果非全0约束

4.flag约束

?xor约束公式:

具体约束步骤如下:

1.计算过程约束,代码如下:

步骤2,3,4同上

?not约束公式:

具体约束步骤如下:

步骤2,3,4同上

整数操作约束

?add:约束公式:

具体约束步骤如下:

1.计算过程约束,代码如下:

声音 | Weiss Ratings:一旦分布式应用成为主流,Paypal等平台将会完全过时:12月31日讯,Weiss Ratings发推表示,一份新报告称,使用加密货币汇款的人数激增。这部分是由于使用Paypal之类的方法会产生高昂的成本。一旦分布式应用成为主流,像Paypal这样的平台将会完全过时。[2019/1/1]

2.解码结果约束和boolean约束

3.编码结果约束

?sub:约束公式:sub约束比add稍微复杂一些,采用了一个中间变量表示a-b的结果,同时为了保证结果计算表示为正整数和符号的形式,给结果加上了2^w。具体约束步骤如下:

1.计算过程约束

2.解码结果约束和boolean约束

3.符号位约束

?mull、umulh、smulh约束公式:

mull相关的约束都涉及以下几个步骤

1.计算乘法约束

2.计算结果编码约束

3.计算结果flag约束

?udiv、umod约束公式:

B为除数,q商,r为余数。余数与需要满足不能超过除数的条件。具体约束代码如下:

shift操作约束

?shl、shr约束公式

比较操作

比较操作中的指令每一个都不会修改任何寄存器;比较的结果存储在flag中。比较指令包含cmpe、cmpa、cmpae、cmpg、cmpge。比较指令可以分为两类,分别为有符号数的比较和无符号数比较,两者约束过程核心都利用了libsnark中实现的comparison_gadget。

其他剩余过程跟有符号数比较约束相同

move操作约束

?mov约束公式:

mov的约束比较简单,只需要确保将存储到ri寄存器中,由于mov操作没有修改flag,所以约束需要确保flag的值没有产生变化。约束代码如下:

?cmov约束公式:

cmov的约束条件比mov复杂一些,主要mov的行为跟flag值的变化有关系,同时cmov不会修改flag,所以约束需要确保flag的值没有变化,cmov的代码如下:

Jump操作约束

这些jump和条件jump指令都不会修改寄存器和flag但是会修改pc。

?jmp

Jmp操作约束pc值与指令执行结果一致,具体约束代码如下:

?cjmp

cjmp根据flag条件进行跳转,flag=1进行跳转,否则pc自增1

约束公式如下:

约束代码如下:

?cnjmp

cnjmp根据flag条件进行跳转,flag=0进行跳转,否则pc自增1

约束公式如下:

约束代码如下:

Memory操作约束

这些是简单的memoryload和store操作,其中memory的地址由立即数或寄存器的内容确定。这些是tinyram中唯一的寻址方式。。

?store.b和store.w

对于store.w取整个arg1val的值,对于store.b操作码只会取arg1val的必要部分,约束代码如下:

?load.b和load.w

这两个指令我们要求从内存中加载的内容被存储在instruction_results中,约束代码如下:

输入操作约束

?read

read操作跟tape有关,具体的约束规则是:

1.上一个tape中的内容被读完,没有内容可读,不会读取下一个tape。

2.上一个tape中的内容被读完,没有内容可读,flag被设置为1

3.如果当前执行的指令是read,那么read读取到的内容和tape输入内容一致

4.从tape1以外的地方读取内容,flag被设置为1

5.result为不为0,意味着flag为0

约束代码:

输出操作约束

该指令表示程序已经完成了计算,因此不能再允许其他操作

?answer

当程序的输出值被接受,has_accepted会被设置为1,程序返回值能够被正常接受意味着当前的指令为answner以及arg2value为0。

约束代码如下:

其他

当然除了上述提到的一些指令相关的约束外,tinyram还有一些pc一致性、参数编解码、内存检查等各种约束。这些约束通过R1CS系统组合起来构成一个完成的tinyram约束系统。所以这也是R1CS形式的tinyram生成约束数量较多的根本原因。

这里引用一个tinyram介绍ppt的图片,展示一个ERC20transfer用tinyram生成证明需要的时间消耗。

从上图的例子可以得出结论:使用vnTinyram+zk-SNARKs验证所有EVM操作是不可能的,只适合验证少量的指令的计算验证,可以使用vnTinyram验证EVM的部分计算类型的opcode。

关于我们

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

微信公众号:Sin7Y

GitHub|Twitter|Telegram|Medium|Mirror|HackMD|HackerNoon

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

地球链

[0:93ms0-0:784ms