美文网首页区块链研习社程序员区块链大学
以太坊技术黄皮书学习笔记19:系统运行模型2

以太坊技术黄皮书学习笔记19:系统运行模型2

作者: 西二旗李老师 | 来源:发表于2018-05-29 21:11 被阅读69次

    运行概述:

    在介绍运行函数之前我们需要先介绍函数的输入和输出,公式1是全局状态,这个之前介绍过,公式2是新的变量,表示的是虚拟机的状态,前面的一节已经介绍过虚拟机的状态;公式3定义的是一个循环函数,我们知道对于图灵完备的计算机,需要的是程序可以持续的循环执行,每执行一步都会产生一个临时的结果如公式4的定义,每次都要检查是否有异常状态发送,公式5表示此状态,公式6表示状态机正常停止并输出执行结果。

    公式7是对这个执行函数的定义,我们在前面已经介绍过,这里新增了一个变量定义15,这个公示表示机器状态所包含的内容:可用的gas值,计算指令计数器,表示现在指令执行的位置,已经内存的内容,已经在内存中使用的数量,指令栈的内容,公式8表示,第一次循环执行的初始状态的值。公式8的各个变量的定义已经在前面章节解释过。

    公式16给出了具体的循环迭代函数的定义,公式17表示如果状态机异常停止,则状态恢复,公式18表示如果指令是重置,那么除了减去消耗的gas和产生一个失败的异常结果,其他的状态和内容没有发生变化。公式19表示如果输出的结果不是空集合,则执行新的函数,否则公式20表示继续递归调用X函数。公式21定义了输出结果的定义,这个公式22会在下面讲解,公式23是对点操作的解释,公式24表示虚拟机状态的变迁只是简单的修改了可用gas数量,公式25表示计算本次迭代运算消耗的gas的计算公式

    公式26定义了当前需要执行的指令的,如果该指令在输入指令集Ib序列内,则根据指令指针读取该指令,否则当前的指令为STOP即停止执行。公式27定义了如何判断当前的状态是否是异常停止,燃料不够或者公式28需要出栈操作的数据为空集合,即没有数据可以操作了,公式29表示当前栈的长度小于要出栈的数据的长度,即数据已经不一致了;公式30表示当前指令是跳转并且当前数据栈第一个元素不属于公式31,这个会在后面给出定义;公式32表示当前指令是跳转指令并且数据栈第2个预算不是0,并且第一个元素不属于公式定义31;公式33表示当前指令时返回并且数据栈中第2个数据和第3个数据的和大于虚拟机返回数据的长度,公式34表示虚拟机栈的长度减去出栈指令的长度加上入栈指令的长度大于1024,即没有足够的栈空间来存储指令;公式35表示当前虚拟机状态不可写并且公式36成立。

    公式37表示当前指令集的范围;公式38表示下一个指令的有效性判断,公式40如果指令如果指令的下标大于指令集合的长度,则下一个指令是空集合;公式41如果当前的指令是跳转到制定的位置,则指令集合是当前指令加公式43的处理结果,否则公式32表示继续递归查找指令集合。公式44表示如果当前指令是压栈,那么下个指令是当前指令加偏移指令减去压栈指令的编号在加2.否则指令为指令偏移i加1;公式46定义的是正确返回结果的表述,如果当前指令是正常返回,怎结果用共识47表示,如果指令时停止或者自我销毁,则结果是空序列,否则是个空集合。

    公式50定义了一个新的公式,这个公式是对迭代函数X的某一情况的解释,公式50表示对当前变量的改变,公式51表示当前入栈指令与出栈指令长度的差,公式52表示新的栈长度等于原来的长度加上这个差值。公式53表示原来的栈内容在栈中偏移与原来内容在新栈中的偏移的差值就是公式51的结果。这里啰里啰嗦的表述就是为了说明除了参与操作的几个栈数据之外,其他的栈内容没有发生变化。

    公式54表示剩余可用gas是原来的gas减去本次操作消耗的gas公式55则表示下一个需要执行的指令的位置,公式56,57表示如果是跳转,则当前需要执行的指令根据跳转命令获取,否则根据公式58计算下一条命令。公式59表示大部分其他变量在这个函数的运算下没有发生改变。

    相关文章

      网友评论

        本文标题:以太坊技术黄皮书学习笔记19:系统运行模型2

        本文链接:https://www.haomeiwen.com/subject/nmqzjftx.html