跳转至

Elrond·WASM 虚拟机

原文:https://docs.elrond.com/technology/the-elrond-wasm-vm

智能合约的执行在现代区块链网络中发挥着核心作用。Elrond为此构建了一个快速安全的虚拟机。

因为Elrond VM 执行 WebAssembly ,这也意味着它可以执行用任何可以编译成 WASM 字节码的编程语言编写的智能合约,比如 C、C++、C#、Rust、Go、TypeScript 等等。

然而,开发者被鼓励在他们的智能合约中使用 Rust。Elrond提供了一个 Rust 框架,允许在智能合约中使用异常干净高效的代码,这在区块链领域是罕见的。声明式测试框架也被捆绑在一起。为了获得最佳的编码体验,开发者可以随意使用Elrond IDE

特性

Elrond虚拟机的构建是为了尽可能地快速和安全,但没有给智能合约的功能增加不必要的限制:虚拟机提供的 API,称为Elrond环境接口,全面且易于使用。

无国籍

Elrond WASM 虚拟机是一个无状态的虚拟机。当执行智能合约时,不允许直接写入区块链或存储。这是一个重要的设计决策,因为它消除了恢复操作的需要。因此,API 不会直接写入状态,而是将智能合约执行引入的更改累积到一个瞬态数据结构中,然后应用于存储和/或区块链,但仅在执行结束时,并且仅在成功的情况下。当然,读取全局状态在任何时候都是允许的。

实际上,在执行结束之前,全局状态不会受到影响。

快速执行引擎

Elrond VM 使用 Wasmer 作为执行引擎来执行代码,Wasmer 作为实时流编译器运行。由于 Wasmer 的设计,智能合约以接近本地的速度执行。

嵌入到虚拟机中的 Wasmer 版本已经过修改,增加了精确计量功能,每个 WASM 操作码的成本可配置。但除了计量,Elrond还修改了 Wasmer,允许在运行时进行抢先执行控制,如果需要,智能合约可以立即被虚拟机停止。而且提高了编译效率,禁止了浮点运算,保证了严格的确定性。

合约间异步调用

智能合约可以使用 VM 的异步 API 相互调用。因为Elrond网络是自适应分片的,所以可能会发生这样的情况,一个智能合约最终会调用由不同分片存储的另一个智能合约。这可以由Elrond VM 轻松处理,智能合约开发者永远不必关心碎片。

如果一个合约调用另一个合约,并且它们都在同一个碎片中,那么执行实际上是同步的,并且两个合约都在不离开 VM 的情况下执行。

如果合约碰巧在不同的碎片中,不用担心——执行将自动切换到异步模式,调用被发送到它的目标碎片,在那里执行,然后流程最终返回到调用者。

对于智能合约开发者来说,同步和异步模式都是不可见的:两者的 API 是相同的,并且在需要的时候在运行时进行切换。



回到顶部