RES:详解Cairo指令-ODAILY

1.指令结构

CairoCPU原生支持的word是一个域元素,而这个域是特征值大于P>2^63。每个指令会占用1到2个word,如果指令后面跟着立即值(="12345678")则该指令占用2个word,并且值存在第二个word里。每个指令的第一个word由以下元素组成:

2.状态转换

状态转换函数代表了一个通用的状态转换单元,而一个计算通常会分解成多个连续执行的指令,因此我们需要:

a.确保指令的内容,以及指令执行前后的状态的有效性

b.确保执行的指令是一个有效的指令

2.1转换逻辑

如果指令执行前后的状态是一致的,那么其状态的更新一定是按照以下逻辑执行:

彭博:2023年ETH支撑位或在1000美元,但有望跑赢比特币和传统证券:金色财经报道,据彭博发布最新加密报告分析显示,2023 年以太坊支撑位可能会在 1, 000 美元区间。虽然 从 12 月开始,以太坊的关键支撑位将会来到 1, 000 美元区间。如果该支撑位被突破,可能会带来更多的止损卖盘,但即便如此, 2023 年以太坊依然有望继续跑赢比特币和股票,以太坊或许会再次经历一段痛苦时间。以太坊在 2021 年完成升级, 2022 年又成功转向权益证明(PoS)共识机制,这些里程碑事件都对其表现产生影响。[2022/12/8 21:30:22]

Roblox前副总裁Jon Vlassopulos担任音乐共享平台Napster CEO:9月26日消息,点对点音乐共享平台Napster宣布,Roblox前副总裁兼全球音乐主管Jon Vlassopulos担任 CEO,以管理其下一步Web3发展方向。

此外,Napster 目前正在进行新一轮融资,支持者包括SkyBridge Capital、Alumni Ventures、Borderless Capital和G20 Ventures等。(福布斯)[2022/9/26 7:21:19]

2.2指令校验

如图1所示,?个指令由以下元素组成:

3.指令示例

3.1断言相等

断言相等指令可以用下述语法表示:

<left_handle_op>=<right_handle_op>

美股WSB概念股走低 游戏驿站跌超4%:7月6日,美股WSB概念股走低,ContextLogic、Express跌超6%,游戏驿站、AMC院线跌超4%,3B家居跌超3%。[2022/7/6 1:55:51]

它确保了公式两边是相等的,否则程序的执行将会被返回。

Note2:除法和减法可以分别表示为具有不同操作数顺序的乘法和加法。

assert指令可以被认为是一条赋值指令,其中?边是已知的,另一边是未知的。例如=4可以被认为是断言的值为4,或者根据上下文将赋值为4。

图4给出了断言相等指令的一些示例,以及每个指令对应的标志值:

解释指令=5:

?为assert指令=>opcode=4

?next_ap=ap=>ap_update=00=0

?next_pc=pc+instruction_size=>pc_update=000=0

中国科协主席万钢:希望走出一条具有中国特色的“元宇宙”发展路径:金色财经消息,6月25日,中国全国政协副主席、中国科协主席万钢在中南大学与大学生进行交流。他表示,“元宇宙”应用形态与人工智能综合式场景驱动相辅相成,可以通过开源共享、相互借鉴、循序发展,不断创造经济和社会价值,走出一条具有中国特色的“元宇宙”发展路径。万钢表示,关于“元宇宙”的问题,近年来,以“元宇宙”为代表的新型融合应用形态,在扩展现实、数字孪生等新技术推动下,形成虚拟空间与现实世界的“映射”关系和“交互”机制,特别是在游戏、文化、艺术、旅游等领域的应用,为人们提供了沉浸式体验。与此相比,工业领域的混合场景应用更加广泛和深入,因此业界也称之为“工业元宇宙”。(中新社)[2022/6/27 1:33:56]

?op0和op1没有addormul=>res_logic(res)=00=0

?存在立即数=>op1_src(op1)=001=1

?立即数地址指令地址相邻=>off_op1=1

?等式左边=>dst_reg(dst)=1

?等式左边=>off_dst=1

?op0_reg/off_op0=>initalvalue(1/-1)//因为这个指令用不到这些flags,所以填充默认值

Binance:此前暂停比特币提现是由小型硬件故障引起:6月14日消息,币安解释此前暂停比特币提现约3个小时的原因。币安已修复周一早些时候钱包整合节点上的几个小型硬件故障,这些待处理的合并交易的Gas费很低,这导致后来的提现交易(指待处理的合并UTXO)被积压,无法成功处理。

为了解决这些问题,币安表示必须改变逻辑,只从合并交易或成功的提现交易中获取成功的UTXO,此修复还将防止同样的问题再次发生。币安已恢复比特币网络提现。[2022/6/14 4:24:15]

3.2条件和非条件跳转

jmp指令允许更改程序计数器pc的值。

Cairo支持相对跳转和绝对跳转-分别用关键字rel和abs表示;jmp指令或许是有条件的,比如当某个内存单元的值不为0时,触发jmp指令。

指令的语法如下所示:

#Unconditionaljumps.

jmpabs<adress>

jmprel<offset>

#Conditionaljumps.

jmprel<offset>if<op>!

图5给出了jmp指令的一些示例,以及每个指令对应的标志值:

解释指令jmprel+:

?为jmp指令=>opcode=0

?next_ap=ap=>ap_update=b00=0

?next_pc=pc+res=>pc_update=b010=2

?res=op0+op1=>res_logic(res)=b01=1

?op1:=>op1_src(op1)=b010=2

?op1:=>off_op1=-7

?op0:=>op0_src(op0)=0

?op0:=>off_op0=1

?dst_reg/off_dst=>initalvalue(1/-1)///因为这个指令用不到这些flags,所以填充默认值

3.3call和ret

call和ret指令允许实现函数堆栈。call指令更新程序计数器(pc)和帧指针(fp)寄存器。程序计数器的更新类似于jmp指令。之前fp的值被写入,以允许ret指令将fp的值重置为调用之前的值;类似地,返回的pc(调用指令后面指令的地址)被写到,以允许ret指令跳回并继续执行调用指令后面的代码的执行。由于写入了两个存储单元,ap向前进了2,fp被设置为新的ap。

指令的语法如下:

callret<adress>

callrel<offset>

ret

图6给出了call和ret指令的一些示例,以及每个指令对应的标志值:

解释指令callabs:

?为call指令=>opcode=0

?next_ap=ap=>ap_update=b00=0

?next_pc=res=>pc_update=b001=1

?res=op1=>res_logic(res)=b00=0

?op1:=>op1_src(op1)=b010=2

?op1:=>off_op1=4

?op0_reg/off_op0=>initalvalue(0/1)///因为这个指令用不到这些flags,所以填充默认值

?dst_reg/off_dst=>initalvalue(0/0)///因为这个指令用不到这些flags,所以填充默认值

3.4高级ap

指令ap+=<op>通过给定的操作数增加ap的值。

图7给出了高级ap指令的一些示,以及每个指令对应的标志:

解释指令ap+=123:

?为advancingap指令=>opcode=0

?next_ap=ap+res=>ap_update=b01=1

?next_pc=pc+instruction_size=>pc_update=b000=0

?res=op1=>res_logic(res)=b00=0

?op1=123=>op1_src(op1)=b001=1

?op1=123=>off_op1=1

?op0_reg/off_op0=>initalvalue(1/-1)///因为这个指令用不到这些flags,所以填充默认值

?dst_reg/off_dst=>initalvalue(1/-1)///因为这个指令用不到这些flags,所以填充默认值

关于我们

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

微信公众号:Sin7Y

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

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

地球链

[0:15ms0-0:967ms