简介
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内容平台Mirror推出Writing NFT 2.0:金色财经报道,去中心化Web3内容发布平台Mirror宣布推出Writing NFT 2.0。[2023/6/30 22:09:27]
比较操作
比较操作中的指令每一个都不会修改任何寄存器;比较的结果存储在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中唯一的寻址方式。。
输入操作
该指令是唯一一个访问两个tapes中的任意一个的指令。第0个tape用于primary输入,第1个tape用户auxiliary输入。
输出操作
该指令表示程序已经完成了计算,因此不能再允许其他操作。
op-erigon在OP Goerli由Testin Prod团队发布:4月21日消息,OP Labs表示,TestinProd利用模块化和开源OP Stack开发了一个替代执行客户端op-erigon,现在可以在OP Goerli上进行测试,允许用户在GitHub存储库或在Prod的OP Goerli公共RPC中进行测试,最终会发布到OP主网上。
OP Labs表示,op-erigon开发团队TestinProd个完全不属于OP Labs的团队,展示了模块化和开源OPStack的强大功能。4月20日,a16z Crypto推出基于OP Stack的Rollup客户端Magi,该客户端用Rust语言编写,取代了OP Stack中的共识客户端(Rollup客户端),并与执行客户端(如op-geth)一起工作以进行同步,目前已可以同步到Optimism和Base测试网,旨在提高整个OP Stack生态系统的客户端多样性和弹性[2023/4/21 14:17:25]
指令集约束
Tinyram采用R1CS约束形式进行电路约束,具体形式如下:
一个R1CS约束,可以有a,b,c三个linear_combination表示,一个R1CS系统中的所有变量的赋值,可以分为两个部分:primaryinput和auxilaryinput。Primary就是我们经常说的“statement”。auxiliary就是“witness”。
一个R1CS约束系统包含多个R1CS约束。每个约束的向量长度是固定的。
Tinyram在libsnark的代码实现中大量使用了一些定制gadgtes来表述vm的约束以及opcode执行和memory的约束。具体代码在gadgetslib1/gadgets/cpu_checkers/tinyram文件夹下。
位操作约束
?and约束公式:
真人秀女星Christine Quinn的加密货币经纪公司推出信用评分系统:金色财经报道,《日落家园》明星Christine Quinn曾与公司CEO Christian Dumontet一同推出了加密货币经纪公司RealOpen,该公司旨在帮助希望用加密货币购买房产的买家。现在,RealOpen正在推出一个加密货币信用评分系统“RealScore”,以预测波动性并帮助买家在适当的时候完成交易。
Dumontet在采访中表示:“我们将加密货币应用于房地产是走向市场的战略。我们期望并正在努力支持各种实物资产和服务,成为数字资产和实物资产之间的桥梁。”(dot.LA)[2022/8/10 12:15:34]
and的R1CS约束将参数1和参数2以及计算结果逐bit位进行乘法计算验证,约束步骤如下:
1.计算过程约束,代码如下:
2.结果编码约束
3.计算结果非全0约束
4.flag约束
?or约束公式:
具体约束步骤如下:
1.计算过程约束,代码如下:
2.结果编码约束
3.计算结果非全0约束
4.flag约束
?xor约束公式:
动态 | InvestingHaven发布2020年20个市场预测,涵盖加密货币市场:金色财经报道,InvestingHaven研究团队发布了2020年20项市场预测,覆盖所有全球市场,尤其是股票市场、大宗商品和加密货币。研究团队在关于加密货币的七大预测中提到,尽管2020年的一部分可能仍在建立基础(整合),但加密牛市将在2020年继续。长期加密货币将蓬勃发展,但只有那些在“采用”方面成功的货币才会繁荣发展。此前,该团队表示,XRP价格将在2020年形成一个巨大的圆弧底部形态,这将为2020年开始的看涨结果奠定基础。此外,该团队表示,即使有可能出现区间波动的市场,他们仍坚信2020年比特币价格将定向上涨。[2019/12/25]
具体约束步骤如下:
1.计算过程约束,代码如下:
步骤2,3,4同上
?not约束公式:
具体约束步骤如下:
步骤2,3,4同上
整数操作约束
?add:约束公式:
具体约束步骤如下:
1.计算过程约束,代码如下:
2.解码结果约束和boolean约束
3.编码结果约束
?sub:约束公式:sub约束比add稍微复杂一些,采用了一个中间变量表示a-b的结果,同时为了保证结果计算表示为正整数和符号的形式,给结果加上了2^w。具体约束步骤如下:
声音 | 巴西医生Bettina Grajcer:未来健康行业将使用区块链技术共享医疗数据:据Cointelegraph 12月7日消息,巴西商人兼医生Bettina Grajcer在最近发文表示,健康行业正经历着独特的转型时刻,未来的趋势将是使用区块链等技术。她表示,将来应使用区块链共享医疗数据。[2019/12/8]
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
以太坊合并前夜,欧易OKX&TokenInsight联合发起了《聊透以太坊合并分叉,普通投资者如何参与?》主题AMA.
1900/1/1 0:00:00在2021年加密货币热潮爆发之前,MetaPlatforms早已在2018年启动了区块链项目。隔年,该项目便被命名为“Libra”.
1900/1/1 0:00:00原文作者:DevinAbbott当我们谈论Web3时,大多数人会立刻想到NFT、加密资产或DeFi。因为从TwitterCrypto的活动来看,这是事实.
1900/1/1 0:00:00Plan?暑期学校成功实现了为区块链培养新一代人才的目标,绝大多数与会者为千禧一代,及00后。区块链平台技术公司Tether和瑞士卢加诺市今天宣布,其Plan?暑期学校近来火热,来自29个国家的.
1900/1/1 0:00:00BitfinexAlpha|市场上到处都是新工作,Crypto也要爆发了?在过去一周的激烈讨论之后,美联储和市场终于开始表现出某种一致.
1900/1/1 0:00:00据最新消息,5月28日,波场去中心化算法稳定币USDD发行量突破6亿枚,再创新里程碑。 稳定币在区块链历史上已经经历了以Omni链USDT为主的1.0时代,波场USDT为主的2.0时代,现在区块.
1900/1/1 0:00:00