Technologies
In this section, we’ll briefly introduce you to the tech-stack that Abstract depends on. We’ll do this from a top-down approach, starting with the smart-contract framework.
Already familiar with the stack? Jump to the next page to start learning about the Abstract SDK.
CosmWasm
The Abstract SDK and cw-orchestrator are tightly integrated with the CosmWasm smart-contract framework.
CosmWasm is a smart contract framework that is built on Rust and WebAssembly (WASM) to perform deterministic compute suitable for decentralized systems. It was born out of a desire to outgrow Solidity’s shortcomings.
It is the only smart contract platform for public blockchains that has seen heavy adoption and stress-testing outside of the EVM ecosystem.
To learn more about CosmWasm, check out its official documentation.
CosmWasm Coming from EVM
There are a few key differences between the EVM and CosmWasm that you should be aware of. The most important one is that instances of contracts and the code that they run against are two different concepts in CosmWasm. This means that you can have multiple instances of the same contract code running at the same time, each with their own state. This is not possible in EVM, where the contract code and the contract instance are the same thing.
This is an important difference to be aware of when we talk about migrations further in our documentation.
Migrations are a key feature of CosmWasm. They allow you to upgrade a contract’s code while retaining the state of the contract.
A migration doesn’t delete the code that was previously running for a contract. Code (a WebAssembly binary) is referred to by code-ids and contracts run against a specific code-id and get their own address space (and state) when they are instantiated. Hence migrations just update the code-id that a contract uses to run. I.e. The contract keeps its address and state but now runs on a different code-id (binary).
If you’re looking for a more in-depth comparison go read this article by the creator of CosmWasm.
Rust
Diving one level deeper, we have the Rust programming language. While theoretically any language can be compiled to WebAssembly, Rust is the only language that is officially supported. This is because Rust is a systems programming language that is designed to be fast and extremely safe.
Learn more about Rust here, or learn by doing the rustlings.
Typescript
You need to have a basic understanding of Typescript to use our front-end library.
You can learn about Javascript here.