What are multi-chain contracts?
CosmWasm is designed and built from the ground up to be a multi-chain solution for smart contracts. As it comes from the Cosmos ecosystem, it was designed for networks of blockchains, rather than siloed chains. But what exactly is meant by multi-chain?
Different chain, same contract
All code is designed to be agnostic to the details of the underlying chain, so by writing a CosmWasm contract, you will be able to run it on different chains within the Cosmos ecosystem.
Inter blockchain contracts
CosmWasm contracts leverage the Inter-Blockchain Communication protocol (IBC), making it possible to handle authentication and data transport between blockchains. Because IBC provides a permissionless way for relaying data packets between blockchains, CosmWasm allows you to write code on one chain that can execute a transaction on another chain.
In order to achieve this, CosmWasm fully adopts the actor model, ensuring that the code is designed with IBC usage in mind. As a result, in CosmWasm, messages follow a "fire-and-forget" approach, eliminating the need to await promises and reducing concerns about race conditions and reentrancy attacks. By incorporating IBC primitives into CosmWasm's libraries, you can unlock the full potential of inter-chain messaging and execution.
Easy to integrate
CosmWasm has been designed more as a library than a framework, minimizing required APIs. This allows you to take advantage of CosmWasm without being heavily dependent on it.
This offers two significant advantages:
- It simplifies the process of adding support for multiple languages to write smart contracts.
- As it places limited demands on the host system, it can be integrated into other frameworks besides just the Cosmos SDK. The core runtime logic cosmwasm-vm is written in Rust, while wasmvm offers a generic Go binding to it.
CosmWasm is designed to be adaptable to different blockchains and coding languages. This makes it a solid foundation to build upon, as all your smart contracts and dapps can be migrated to another chain.