脚本与虚拟机
脚本与虚拟机
模式定义的消息
在账户之间发送的所有消息都是由区块链共识状态的架构来定义的,该架构允许消息在二进制和JSON
格式之间无缝转换。账户和账户之间发送消息使用的是二进制的方式,这样更具高效性和易操作性。二进制文件对于人类来说极难看懂,所以EOS
支持将数据转化为人类可读的JSON
格式的字符串。
模式定义的数据库
数据库状态也可使用架构定义,这可确保所有应用程序存储的数据都以一种格式呈现,同时具备JSON
的人类可读性,以及二进制格式的高效率存储和易操作性。和模式定义的消息类似,模式定义的数据库使用二进制存储数据,但是支持转换成JSON
格式,供人类理解。
身份验证与应用程序分离
EOS
通过并行执行机制来实现高性能。为了实现高性能,EOS
一直都在考虑怎样进行并行和串行的区分。为了最大化并行运算,将从程序日志中重新生成应用程序状态的计算任务降至最低,EOS
操作系统将验证逻辑分为三个部分:
- 验证消息在内部是一致的:是只读的,不需要访问区块链状态,以最大的并行度来执行;
- 验证所有的前置条件都是有效的:是只读的,同样并行执行;
- 修改应用程序状态:需要写权限,因此必须顺序执行。
验证消息内部的一致性是只读的,不需要访问区块链状态,这意味着它可以通过最大化并行运算来执行。验证前置条件(例如需求平衡)也是只读的,因此也可以从并行运算中获益。只有对应用程序状态进行修改才需要写访问,并且需要按顺序对每个应用程序进行处理。
消息认证是一个验证消息可被使用的只读过程,而修改应用程序状态是写操作,EOS
将它们分开了。一旦消息被包含进区块就不再需要进行消息验证的操作了。
虚拟机独立架构
EOS
操作系统的目的是可以支持多种虚拟机,同时可以随着时间推移持续按需求增加新的虚拟机。理论上只要符合性能、确定性、正确性和沙箱化这几个条件的任何虚拟机都可以跟EOS
进行对接。
目前公布支持的虚拟机有三个:
Wren
Wren是一种小型、快速、基于类别的编程语言。Wren的开发人员将其描述为“就像是把小型TAK文件装进Lua大小的软件包,再加上一点Erlang特性,再包进一个熟悉的、现代的语法里面”。之所以选择Wren语言和虚拟机,是因为它短小精悍、易于文档记录和理解的代码库。它还具有非常好的性能,并且可以很容易嵌入C++应用程序中。
WASM
Web Assembly【web组件】(WASM)是构建高性能Web应用程序的新兴Web标准,通过少量适配就可以被明确定义和沙箱化。WASM的好处在于被业界广泛支持,因此可以用熟悉的语言开发智能合约,例如C或C++。以太坊已经开始适配WASM,以提供适当的沙箱并使用以太坊WASM定义。这种方法很容易改编后用于EOS
系统软件集成。
EVM
以太虚拟机(EVM)已经被用于大多数现有的智能合约,并且可以在EOS
系统区块链上使用。可以想象,在EOS
操作系统的区块链上,EVM合约可以在内部沙箱中运行,只需要进行少量适配就可以与其他EOS
应用程序交互。