区块链之虚拟货币区块链研习社区块链研究

NEO的智能合约虚拟机

2018-03-14  本文已影响318人  ttblack

我们这篇文章通过分析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

上一篇下一篇

猜你喜欢

热点阅读