NEOVM 是什么,以及它如何工作

2019-10-15 11:03 栏目:经验之谈 来源: 查看()
NEOVM是NEO的VM 显然,Neo区块链系统中使用的虚拟机很清晰。 虚拟机是虚拟计算机,我们现在通常提到的虚拟机有两种典型形式。 1.1一个是对计算机的完整模拟

如hyper-V,VMWare

NEOVM 是什么,以及它如何工作

还有一个街机模拟器

NEOVM 是什么,以及它如何工作

1.2另一个就像执行环境一样 例如,诸如dotnet框架之类的JVM(诸如V8 \ lua) 对于开发人员,实现环境分为两大类。 1.2.1公共执行环境 公共执行环境,例如java c#python 1.2.2一种是嵌入式执行环境 例如,lua是典型的嵌入式脚本。 当然,在某些情况下,c#和js通过mono和v8用作嵌入式脚本。 2什么是NeoVM? NeoVM与Lua类似,其形式为上述1.2.2,并且是嵌入式执行环境。 NeoVM是基于图灵机模式的虚拟机,它通过更改磁带上磁头移动的状态来实现逻辑操作。 NeoVM是一个独立的系统,不依赖Neo项目。 NeoVM仅提供纯逻辑计算功能,使用可伸缩的互操作性,然后插入虚拟机可以调用的功能。 NeoVM设计为更靠近机器。执行的代码段是一个内存块,可将数据动态解析为指令。 3 NeoVM实施 为了解释这一点,我们必须查看图灵机

NEOVM 是什么,以及它如何工作

忽略我丑陋的笔迹 这是假定您了解磁带音乐播放器的工作方式,或者磁头和磁带变得笨拙。 1.在胶带上写说明。 2.负责人负责阅读当前的说明。 3.指令集是已知的。图中显示了四个指令。 Nop啥不做push [n]将一个数字推送到calcstack add从calcstack中取两个值,将它们加在一起,然后放回calcstack ret以结束当前执行。 4.用于管理状态的寄存器空间,对于NeoVM寄存器,有两个堆栈,即CalcStack和AltStack。 有磁带,磁头,指令集和状态空间。这是图灵机。 4 Talk很便宜 让我们看一下代码。 样本中的代码/turing01 在那幅丑陋的画面中,不到100行代码模拟了Turing机器的执行。

NEOVM 是什么,以及它如何工作

首先是用代码准备磁带 NOP 推1 推2 加 RET 然后滚动磁带,让代码向下滚动 While(!vm.stop) { . } 这涉及图灵机的关闭,ret命令是通知关闭的,否则我们将继续滚动。当然,您也可以依靠磁带的长度来停止。实际上,NEOVM设计为在磁带用完时自动停止。我相信没有人会怀疑此程序获得的重值是3。 让我们分析发生了什么。

NEOVM 是什么,以及它如何工作

这只是一个模拟程序。一次出现一个问题。我们使用类head来表示head,使用List来代表磁带。 卷带由head.pos积累 状态空间是stop变量和calcstack堆栈

NEOVM 是什么,以及它如何工作

执行指令的步骤写在功能StepOne中 StepOne的过程是1.读取磁头上磁带上的代码2.执行代码3.滚动磁头head.pos ++; 执行代码时的操作状态空间 NOP不会做任何事情,但是NOP仍然是最重要的说明之一,因此请将其视为空白。 RET直接导致停机,磁头不再滚动,磁头位置也是状态空间的一部分,该命令可能导致磁头位置发生变化。这一点很重要,因为流控制的本质是头位置的更改,所有逻辑都是逻辑,最后将头的位置更改为vm。 PUSH将值推入calcstack ADD从calcstack中获取两个值,将它们加在一起然后放回去 如果您运行此程序,设置断点,逐步执行StepOne,观察calcstack,则会发现: 在1.nop之后,在2.push 1之后,什么都没有发生,在calcstack为[1]之后,3.push 2,在calcstack为[2,1]之后,4.add,在calcstack为[3]之后,5.ret之后,stop变为true,循环结束。 这就是NEOVM的工作方式。 对于NEOVM,avm是磁带,区别在于avm是byte [],其结构不像我们在此使用的List。 本文的目的是解释什么是NEOVM及其工作方式。首先解释这个简单的过程。 还有更多问题,下一个继续 参考源位置https://github.com/lightszero/neovmbook/tree/master/samples/turing01

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发