1.指令结构
CairoCPU原生支持的word是一个域元素,而这个域是特征值大于P>2^63。每个指令会占用1到2个word,如果指令后面跟着立即值(="12345678")则该指令占用2个word,并且值存在第二个word里。每个指令的第一个word由以下元素组成:
2.状态转换
状态转换函数代表了一个通用的状态转换单元,而一个计算通常会分解成多个连续执行的指令,因此我们需要:
a.确保指令的内容,以及指令执行前后的状态的有效性
b.确保执行的指令是一个有效的指令
2.1转换逻辑
如果指令执行前后的状态是一致的,那么其状态的更新一定是按照以下逻辑执行:
Binance慈善机构将在2023年提供超过3万个Web3奖学金:1月22日消息,Binance慈善机构Binance Charity宣布,将在2023年通过币安慈善学者计划为热衷于在Web3领域开创事业的学生提供30650个奖学金。目前已有超过82000名申请者对,相当于约37%的录取率。
据了解,币安慈善学者计划(BCSP)将提供免费的Web3教育和培训课程,其教育合作伙伴包括西澳大利亚大学、塞浦路斯尼科西亚大学、德国法兰克福金融与管理学院和尼日利亚技术中心Utiva。(cointelegraph)[2023/1/22 11:26:02]
机构分析:美国加息前景支撑2022年美元走强:12月25日消息,道明证券认为,鉴于美联储准备最早在3月份加息,美元可能在2022年走强。摩根大通分析师也表示:“美联储最近的讲话表明3月(加息)即将到来,我们继续认为风险/回报偏好会尊重这一结果,从而支持美元在新的一年走强。”与此同时,他们预计欧元兑美元EUR/USD将在1.12-1.14区间内整固,但也存在大幅跌破该区间的风险,因有关资产负债表最终走向的传言可能会推高美国实际利率。 (金十)[2021/12/25 8:02:42]
2.2指令校验
如图1所示,?个指令由以下元素组成:
3.指令示例
3.1断言相等
断言相等指令可以用下述语法表示:
<left_handle_op>=<right_handle_op>
它确保了公式两边是相等的,否则程序的执行将会被返回。
肯尼亚创企Afya Rekod将于2020年7月底推出区块链健康数据平台:肯尼亚卫生科技创业公司Afya Rekod正在加速推出其基于AI和区块链的消费者驱动健康数据平台,以为对抗全球新冠疫情贡献力量。该系统计划于2020年7月底推出,旨在帮助用户存储自己的健康数据,获取健康信息,并连接到医疗服务提供商。(Africa-Newsroom)[2020/3/25]
Note2:除法和减法可以分别表示为具有不同操作数顺序的乘法和加法。
assert指令可以被认为是一条赋值指令,其中?边是已知的,另一边是未知的。例如=4可以被认为是断言的值为4,或者根据上下文将赋值为4。
图4给出了断言相等指令的一些示例,以及每个指令对应的标志值:
解释指令=5:
?为assert指令=>opcode=4
?next_ap=ap=>ap_update=00=0
《河北省应急产业发展规划(2020-2025)》提出推进区块链等与应急产业深度融合:河北省工业和信息化厅22日透露,为加快河北应急产业发展,该省近日印发《河北省应急产业发展规划(2020-2025)》提出,推进互联网、大数据、人工智能、区块链、物联网等与应急产业深度融合,加速应急产业数字化、网络化、智能化转型。(中新社)[2020/3/23]
?next_pc=pc+instruction_size=>pc_update=000=0
?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,所以填充默认值
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
2022半场已过,七月的加密圈市场正在消化上半年的极端波动,有人在研究本轮的风暴周期是否已经触底,有人在审视技术、杠杆、流动性规律等因素给市场带去的影响.
过去一周,波场TRON各项目进展顺利,并取得了丰硕成果。 Binance慈善机构将在2023年提供超过3万个Web3奖学金:1月22日消息,Binance慈善机构Binance Charity宣.
Bitfinex已支持Tezos网络上的Tether(USDt)存取款我们很高兴地宣布,Bitfinex用户可以在UTC时间21/07/22上午10:00使用Tezos传输层在Bitfinex平.
“波卡知识图谱”是我们针对波卡从零到一的入门级文章,我们尝试从波卡最基础的部分讲起,为大家提供全方位了解波卡的内容,当然这是一项巨大的工程,也充满了挑战.
当朋友让你为他介绍一款理财产品你会推荐什么?是基金?股票?还是最近火爆全球的NFT?我们知道NFT利用了区块链和加密技术,在虚拟世界中令其产品变得独一无二,从而赋予产品价值.
随着加密资产行业逐渐成为主流,越来越多的公司和个人正在寻找安全托管资产的方法。QredoNetwork为机构和交易者提供了一种在不牺牲控制权的情况下存储资产的新方式.