NEO的智能合约虚拟机

作者: ttblack | 来源:发表于2018-03-14 16:44 被阅读318次

    我们这篇文章通过分析NEO的虚拟机原理,来了解下智能合约的技术实现原理。其实智能合约的雏形就是比特币交易中的验证脚本。只不过比特币只提供了有限的指令,是非图灵完备的,所以功能有限。

    大家也知道以太坊的智能合约是运行在以太坊的虚拟机(EVM)中,还专门发明了运行在EVM上的语言(solidity),而NEO是可以直接用C#,JAVA来编写的。在NEO中虚拟机我们称作AVM。

    现在我们就看下面这张图:

    neo虚拟机框架图

    这张图整体描述了智能合约的工作原理,这张图包括三部分内容:

    1,智能合约编译器(Compiler)

    2,   虚拟机执行和计算引擎(AVM)

    3, 虚拟机的互操作层(interop Service)

    其中智能合约编译器就是我们编写智能合约的地方,现在NEO支持C#,JAVA。这部分的功能就是要将我们用C#写的程序翻译成虚拟机可以认识并执行的操作码(OPCODE)。

    C# avm编译器

    neo提供了编译器项目源码:https://github.com/neo-project/neo-compiler。是C#写的,原理就是将C#的中间语言MSIL通过Mono.Ceill转换成Neo虚拟机的字节码。请看下图

    虚拟机原理解释图

    我们简单解释下上面的流程:

    1,我们编写的C#合约被VisualStudo 编译成中间语言 MSIL

    2,通过Mono.ceil将msil翻译并解释为我们的操作指令码。(关于Mono,大家可以百度下),Mono可以读取和修改MSIL。十分强大 。最后生成我们的虚拟机可以执行的文件.avm.

    3,在虚拟机中,每个操作指令对应着对栈里的数据的操作方法。如图中的NOP对应着opNop。这样就可以实现基于堆栈的有限状态机的逻辑处理。

    编译器部分就解释到这里。我们现在看虚拟机的实现原理,大家看第一张图,虚拟机部分分为:执行引擎(Execution Engine);计算栈(Evaluation Stack);互操作层(Interop Service)。

    我们就简单将这三部分的功能做个说明:

    Execution Engine:负责读取.avm文件或操作指令码,并根据操作指令(opCode)负责对栈数据的操作。

    Evaluation Stack:存储和计算数据的结构,被执行引擎管理.

    Interop Service:  互操作服务层,可以访问区块链帐本数据和外部数据的接口层.

    所以这部分的逻辑就是:通过执行引擎加载指令序列码,并存储栈里,然后从栈顶取指令并根据指令一步一步执行对栈数据的操作。来完成相应的代码逻辑。代码里需要访问的数据是从互操作层提供的接口中访问的。

    我的截图可能有点大,下载慢请大家耐心等待!呵呵。。

    作者:区块链研习社比特币源码研读班,black

    相关文章

      网友评论

      • 笑狮子:你对用go来做这个部分有什么看法吗?java 雍肿。
        ttblack:有人用go做的链,其中虚拟机部分就是用go做的。

      本文标题:NEO的智能合约虚拟机

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