Libra

Libra

  • 文档
  • 社区
  • 博客
  • libra-china.org
  • GitHub

›READMEs

学习 Libra

  • 欢迎
  • Libra协议: 核心概念
  • 交易生命周期
  • Technical Papers

    • The Libra Blockchain
    • Move: A Language With Programmable Resources
    • State Machine Replication in the Libra Blockchain

体验 Libra Core

  • 第一笔交易!
  • Move语言初体验

社区

  • 开源:Libra区块链的基础
  • 贡献代码
  • Coding Guidelines
  • Reporting Vulnerabilities

Libra 代码库

  • Libra Core 概要
  • READMEs

    • Admission Control
    • Bytecode Verifier
    • Consensus
    • Crypto
    • Execution
    • Mempool
    • Move IR Compiler
    • Move Language
    • Network
    • Storage
    • Virtual Machine

参考

  • Libra CLI
  • Glossary
Edit

Virtual Machine

The MoveVM executes transactions expressed in the Move bytecode. There are two main crates: the core VM and the VM runtime. The VM core contains the low-level data type for the VM - mostly the file format and abstraction over it. A gas metering logical abstraction is also defined there.

Overview

The MoveVM is a stack machine with a static type system. The MoveVM honors the specification of the Move language through a mix of file format, verification (for reference bytcode verifier README) and runtime constraints. The structure of the file format allows the definition of modules, types (resources and unrestricted types), and functions. Code is expressed via bytecode instructions, which may have references to external functions and types. The file format also imposes certain invariants of the language such as opaque types and private fields. From the file format definition it should be clear that modules define a scope/namespace for functions and types. Types are opaque given all fields are private, and types carry no functions or methods.

Implementation Details

The MoveVM core crate provides the definition of the file format and all utilities related to the file format:

  • A simple Rust abstraction over the file format (libra/language/vm/src/file_format.rs) and the bytecodes. These Rust structures are widely used in the code base.
  • Serialization and deserialization of the file format. These define the on-chain binary representation of the code.
  • Some pretty printing functionalities.
  • A proptest infrastructure for the file format.
  • The gas cost/synthesis infrastructure.

The CompiledModule and CompiledScript definitions in libra/language/vm/src/file_format.rs are the top-level structs for a Move Module or Transaction Script, respectively. These structs provide a simple abstraction over the file format. Additionally, a set of Views are defined to easily navigate and inspect CompiledModules and CompiledScripts.

Folder Structure

.
├── cost_synthesis  # Infrastructure for gas cost synthesis
├── src             # VM core files
├── tests           # Proptests
├── vm_genesis      # Helpers to generate a genesis block, the initial state of the blockchain
└── vm_runtime      # Interpreter and runtime data types (see README in that folder)
← StorageLibra CLI →
  • Overview
  • Implementation Details
  • Folder Structure
Libra
Learn About Libra
Welcome to LibraLibra ProtocolLibra BlockchainLife of a Transaction

Try Libra Core
My First TransactionGetting Started With Move
Policies
Privacy PolicyTerms of UseCookies PolicyCode of Conduct
Social
libra
Follow @libradev
© Libra Association

To help us provide relevant content, analyze our traffic, and provide a variety of features, we use cookies. By clicking on or navigating the site, you agree to allow us to collect information on and off the Libra Website through cookies. To learn more, view our Cookie Policy:

Cookies Policy