Move VM on Tendermint
Table of contents: - Overview - Dependencies and TCB - Repo Structure - Running the Placeholder App - Join the Movemint! - Contributing - Research - Our Strategy - From Golang to Rust and Move - Protobuf + gRPC
This is the genesis repo for
movemintwhich 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.
When complete, Movemint may serve as node software for 1 or more Tendermint-powered networks. Some of these networks may join the Cosmos network.
See the Roadmap to learn more about where we're headed.
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
Clone this repo:
git clone https://github.com/open-libra/movemint
Update the Libra Core submodule.
cdinto the cloned repo and run:
git submodule update --init --recursive
Then build movemint:
To run it, open two windows:
on the 1st, run:
cargo run movemint
on the 2nd, run:
tendermint initand then
You will see that the dummy
movemintapp 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
moveminta reality! Jump to the
Researchsection; it may give you ideas to contribute as code or documentation!
Use standard GitHub practices. Fork this repository. Clone to your machine. Branch from the tip, etc.
git checkout -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 VMserves as
compatibility layerbetween 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.
saganbuilt 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).
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
Moveitself 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.
Cargois 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-movedirectories, respectively. Both plugins are to be built with the Abscissa framework (h/t @bascule).
Last but not least, the
protofilesdirectory 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
lcdirectories first. (The
trilliandirectory 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.
THERE MAY BE DRAGONS.
All content in this repo including the README is licensed under Apache-2.0.