Facebook Libra Cryptocurrency cum Blockchain core is built on a new programming language called “Move Language“. The white paper/ research paper was published by “Sam Blackshear, Evan Cheng, David L. Dill, Victor Gao, Ben Maurer, Todd Nowacki, Alistair Pott, Shaz Qadeer, Rain, Dario Russi, Stephane Sezer, Tim Zakian, Runtian Zhou” on 18 June 2019. The Move is the newest blockchain programming language that can be used for digital money transactions, authentication, etc. For the Facebook Libra, the protocol in Move, including Libra coin, transaction processing, and validator management.
The Move Language is a safe and flexible programming language for the Libra Blockchain.
- Describe the challenges of representing digital assets on a blockchain
- Explain how our design for Move addresses these challenges
- Give an example-oriented overview of Move’s key features and programming model
- Dig into the technical details of the language and virtual machine design
- Conclude by summarizing the progress we have made on Move, describing our plans for language evolution, and outlining our roadmap for supporting third-party Move code on the Libra Blockchain.
- Events: We will improve Move’s existing functionality for notifying clients about the on-chain activity via events. We will expose a dedicated type for event streams, finalize the format of event access path, and add events for important system module events, such as validator set changes or minting/burning Libra.
- Generics and collections:
- We will add parametric polymorphism with kind (resource or nonresource) constraints. This will allow us to write general-purpose business logic for managing resources (e.g., we can write a multisig wallet that can work for any kind of resource instead of only for Libra coin).
- We will add container types, such as vectors and maps. Containers will greatly increase the expressivity of Move and are required to implement some core system modules (e.g., the validator-set module manages a collection of validators).
- Move developer experience:
- We will improve the local development and testing experience for users of the Move intermediate representation (IR).
- We will continue working on a format for specifying functional correctness properties of Move programs and an automated verification tool for Move bytecode. We will apply this pipeline to the core Move modules first, but design it with the intention of supporting the verification of arbitrary user-defined specifications.
- We will design a versioning scheme for Move modules, resources, and transaction scripts. Currently, Move modules can never be upgraded or deleted. Sustainable software infrastructure must support updates and deletion.
Move Language: View of Blockchain
In the Libra Cryptocurrency, the blockchain is replicated state machine.
Replicators in the system are known as validators. Users of the system send transactions to validators. Each validator understands how to execute a transaction to transition its internal state machine from the current state to a new state.
- the validators start from the same initial state, and
- the validators agree on what the next transaction should be, and
- executing a transaction produces a deterministic state transition,
then the validators will also agree on what the next state is. Repeatedly applying this scheme allows the validators to process transactions while continuing to agree on the current state.
StrawCoin & Digital Asset Challenge
It is challenging to choose a representation of transitions and state that encodes ownership of digital assets in an open software system. In particular, there are two properties of physical assets that are
difficult to encode in digital assets:
- Scarcity: The supply of assets in the system should be controlled. Duplicating existing assets should be prohibited, and creating new assets should be a privileged operation.
- Access control: A participant in the system should be able to protect her assets with access
Access control. Though the second proposal addresses the scarcity issue, it still has a problem: Bob can send transactions that spend StrawCoin belonging to Alice. For example, nothing in the evaluation rule will stop Bob from sending the transaction ⟨Alice, 100, Bob⟩. We can address this by adding an access control mechanism based on digital signatures:
Move Blockchain Languages
So far, we have designed and implemented the following components of Move:
- A programming model suitable for blockchain execution.
- A bytecode language that fits this programmable model.
- A module system for implementing libraries with both strong data abstraction and access control.
- A virtual machine consisting of a serializer/deserializer, bytecode verifier, and bytecode interpreter.
Despite this progress, there is a long road ahead. We conclude by discussing some immediate next steps and longer-term plans for Move.
Implementing core Libra Blockchain functionality: We will use Move to implement the core functionality in the Libra Blockchain: accounts, Libra coin, Libra reserve management, validator node addition and removal, collecting and distributing transaction fees, cold wallets, etc. This work is already in progress.
New language features: We will add parametric polymorphism (generics), collections, and events to the Move language. Parametric polymorphism will not undermine Move’s existing safety and verifiability guarantees. Our design adds type parameters with kind (i.e, resource or unrestricted) constraints to procedure and structs