Move VM on Tendermint
Table of contents:
- Overview
- Dependencies and TCB
- Repo Structure
- Running the Placeholder App
- Join the Movemint!
- Contributing
- Research
This is the genesis repo for movemint
which is being built by replacing the SMR Module of Libra Core with Tendermint. We'll use LC to refer to Libra Core henceforth.
Movemint talks to Tendermint via the ABCI.
Movemint will primarily depend on the Move language crate from LC. A hat-tip to the LC authors and the Libra Assosciation!
When complete, Movemint may serve as node software for 1 or more Tendermint-powered networks. Some of these networks may join the Cosmos network.
Movemint is a project of the OL collective. OL is grateful for grant funding from the ICF.
See the Roadmap to learn more about where we're headed.
The current design of Movemint makes use of rust-abci for ABCI, Abscissa for CLI (and component management), as well as the Tokio runtime. (Tokio along with an Actor model is used in LC's mempool
and consensus
components.)
As it stands, Move is not available as a crate so we have opted to include LC as a git submodule. This should change once the Libra Core components are published on a registry (like crates.io). See the GitStrategy doc for more info on our upstream/downstream strategy.
We are focused on minimal dependencies (read TCB). Read more on the TCB philosophy from the Libra Assosciation blog: The Path Forward. One way of looking at movemint is as an LC-compatible implementation with a different (read smaller) TCB.
We'll have more to say on the notion of TCB as it pertains to Movemint vs. LC.
├── cargo-move
├── cargo-movemint
├── docs
├── protofiles
└── src
├── libra-core # git submodule
└── main.rs
Make sure you have installed Git, Rust/Cargo, and Tendermint.
Clone this repo:
git clone https://github.com/open-libra/movemint
Update the Libra Core submodule. cd
into the cloned repo and run: git submodule update --init --recursive
Then build movemint: cargo build
To run it, open two windows:
on the 1st, run: cargo run movemint
on the 2nd, run: tendermint init
and then tendermint node
You will see that the dummy movemint
app connects to Tendermint via ABCI. There is an unused MoveVM instance that is to be used to validate, verify, and execute transactions (TODO!).
In the coming weeks we will be fleshing out this repository with code and documentation. See the Components doc to learn more about tools we are building.
Now, you may want to join us as we work hard to make movemint
a reality! Jump to the Research
section; it may give you ideas to contribute as code or documentation! You may also want to join the OL collective's Discord channel.
Use standard GitHub practices. Fork this repository. Clone to your machine. Branch from the tip, etc.
git branch -b my_awesome_contribution_to_the_movemint
Code away, commit, test, and push to GitHub.
Finally, when you're ready to merge, please submit a PR. We will promptly review the code and (if all goes well) we'll merge it to master!
For the past few months we've been busy doing research on the Libra ecosystem: papers, codebase, community, et cetera.
We have come up with a ∆ strategy wherein the Move VM
serves as compatiblity layer
between a Movemint network and an LC network.
We will publish a blog about this ∆-ular strategy of 'unpacking trust in Libra'.
Note that TCB is a term used in the trusted computing domain.
The Tendermint/Cosmos ecosystem is increasingly adopting Rust. The rust-abci and tendermint-rs crates are good examples. There are also tools like kms
and sagan
built for Tendermint in Rust. We hope to contribute to the Cosmos Rust SDK in the process of building Movemint (e.g. a Rust equivalent of the Cosmos Go SDK's BaseApp).
The Golang team has recently introduced the Go checksum database (built on Trillian):
Being able to authenticate a particular module version download effectively moves code hosting servers like rsc.io and github.com out of the trusted computing base [TCB] of the Go module ecosystem.
Introducing a similar checksum DB to Rust (e.g. in crates.io) and to Move
itself is within our Roadmap. This is beneficial to the Rust community at large as well as the nascent Move language ecosystem. More importantly, it allows Move-compatible financial networks to share Move packages in a trustworthy fashion. We'll explain our rationale and design goals in the tlog-rust-move doc.
Cargo
is a powerful tool into which we can introduce checksum database checking and more. To this end, we're building a movemint
-specific plugin and a general purpose plugin to work with Move code from within Cargo. These are found in ./cargo-movemint
and ./cargo-move
directories, respectively. Both plugins are to be built with the Abscissa framework (h/t @bascule).
Last but not least, the protofiles
directory is a repository of protobuf files extracted from LC, Tendermint/ABCI, and Trillian for convenience. Note that the last 2 are implemented in Golang whereas LC is written in Rust. We encourage researchers and developers planning to work on Movemint to familiarize themselves with the protobuf/gRPC files in the abci
and lc
directories first. (The trillian
directory will come in handy too, in the near future!)
The 3 directories roughly correspond to 3 points in a triangle, hence the ∆
in our strategy.
DISCLAIMER
THERE MAY BE DRAGONS.
All content in this repo including the README are licensed under Apache-2.0.