Virtual Machines Take Off in the Cosmos

Interchain
4 min readOct 29, 2019

--

The Cosmos Ecosystem is a complex adaptive system grounded in the joint philosophy of sovereignty and choice: where any group may build, deploy, and operate, using their preferred languages and tools, a fault-tolerant co-ordination service — “blockchain”, if you will — that can rendezvous with other blockchains.

This philosophy manifests in Cosmos software in the form of the ABCI and IBC protocols, that respectively enable blockchain applications to be built in any programming language, and to securely communicate with one another.

To date, the focus of ABCI development has been in Golang, namely, via the Cosmos-SDK, which is used for Gaia (aka the Cosmos Hub) and is emerging as a leading framework for blockchain application development. As the Cosmos-SDK has matured, attention is turning towards integrating various virtual machines as Cosmos-SDK modules, enabling Cosmos-SDK applications to update their logic at run-time through some of the leading blockchain virtual machines and runtime environments. Smart contracts and their underlying virtual machines are taking off in Cosmos.

In addition to Golang, there has also been significant development in Javascript, namely the LotionJS framework, which is being integrated with Agoric’s work on securing Javascript, and is being used to build Bitcoin pegs. There is also a preliminary ABCI framework in python, and community supported ABCI servers in languages like Rust, Erlang, Java, and Haskell.

To facilitate adaptation and emergence in the Cosmos ecosystem, we must continue to expand and increase support for a diverse set of languages and development environments.

Hence our Request for Proposals for development teams to build ABCI frameworks in other languages, and to integrate them with existing state machines and with IBC.

To this end, the Interchain Foundation is excited about funding a number of projects building virtual machines on top of Tendermint, either as modules for the Cosmos-SDK and/or via run-times in other languages:

https://gist.github.com/ebuchman/ec4882b7002803b4b33ccd4390baec47

More information about each project can be found below:

  1. Ethermint: The ICF funded ChainSafe to build Ethermint. Ethermint is the high speed implementation of Ethereum built on top of Tendermint. Go Ethereum can be slow and doesn’t offer transaction finality due to Ethereum’s Proof-of-Work security model. Ethermint will give the same ability to deploy smart contracts at a much faster speed. ChainSafe is implementing the EVM as a Cosmos-SDK module, allowing the Ethermint EVM to interact with other Cosmos-SDK modules. Prominent Ethereum applications, including Aragon, are contemplating adopting Ethermint for their own uses.
  2. CosmWasm: The ICF funded Confio to continue the project that was started at the Cosmos Hackatom in Berlin in June 2019 of developing an implementation of a WASM smart contract engine for the Cosmos-SDK. Confio is working with Hackatom team members from Regen Network, TruStory, and Althea on completing this implementation. This project will bring a WASM virtual machine into the Cosmos-SDK, allowing decentralized applications to be built on top of an existing blockchain as a set of WASM smart contracts.
  3. Cosmic Swingset: With support from the ICF, the Agoric team integrated their object-capabilities based Javascript run-time, Secure EcmaScript, into the Cosmos-SDK. This enables Cosmos-SDK applications to utilize smart contracts written in a more secure subset of Javascript, opening the ecosystem to the world’s most popular programming language without inheriting the typical mess of security issues that come along with it. The Agoric team are pioneers in object-capability based security, and bring decades of experience in designing such systems to the Cosmos. They have also been instrumental in the development of the IBC specification.
  4. Kadenamint: The ICF funded a joint project with the Kadena and FOAM teams to build out support for ABCI and IBC in Haskell. Haskell is an advanced functional language with strong guarantees and deep roots in mathematical and formal methods communities. Expanding the Cosmos ecosystem into Haskell will open new opportunities for building advanced state machine systems with strong correctness guarantees.
    The FOAM team is focusing on hs-abci, a production ready ABCI server and a minimal Cosmos-SDK in Haskell, including a BaseApp library and a Basecoin app roughly compatible with those of the Cosmos-SDK.
    The Kadena team is focusing on “Kadenamint” — integrating their Pact runtime into the FOAM-built SDK. Pact is an advanced smart contract language and runtime developed by Kadena in Haskell. It is Turing incomplete, open source, and human readable. Kadenamint will support contract upgrades and formal verification, while integrating with relational database systems. Furthermore, this lays the groundwork for smart contract integration with the upcoming IBC protocol.
  5. Movemint: The ICF funded OpenLibra to integrate the Move virtual machine on top of the Tendermint ABCI and prepare it for future IBC integration. Move is the VM being designed for the notorious Libra project, but it inherits much of it’s type system and safety features from the beloved Rust language.

Of course, there is also the original gangster of putting virtual machines on Tendermint, since before the Cosmos white paper was even written: Burrow by Monax, an implementation of the Ethereum Virtual Machine on Tendermint, which is now also part of the Hyperledger project.

We are looking forward to working with these projects, and many more, on the journey to developing sovereign and decentralized state machines and integrating them into the larger Cosmos ecosystem.

To learn more about our funding program, including a complete list of funded projects, see here: https://github.com/interchainio/funding/

--

--

Interchain

As stewards of the interchain, we advance the development of an interoperable, sustainable, and community-owned decentralized ecosystem. https://interchain.io/