Smart Contract Stack
Runtime Architecture
UOMI's runtime is built on Substrate and incorporates pallet-contracts
, providing a sandboxed environment for WebAssembly smart contracts. While any language that compiles to Wasm can potentially be used, the code must be compatible with the pallet-contracts
API.
💡 Tip For efficient development, it's recommended to use an eDSL (embedded Domain-Specific Language) targeting
pallet-contracts
, such as:
ink! (Rust-based)
ask! (AssemblyScript-based)
Execution Environment
Interpreter
The pallet-contracts
uses the wasmi
interpreter to execute Wasm smart contracts.
ℹ️ Note While faster JIT interpreters like
wasmtime
exist,wasmi
is chosen for its higher degree of interpretation correctness, which is crucial for the untrusted environment of smart contracts.
Contract Deployment Process
Contract deployment follows a two-step process:
Code Upload
Upload Wasm contract code to the blockchain
Each contract receives a unique
code_hash
identifier
Contract Instantiation
Create contract address and storage
Anyone can instantiate a contract using its
code_hash
Benefits of Two-Step Deployment
Storage Efficiency
Multiple instances can share the same code
Reduces on-chain storage requirements
Particularly efficient for standard tokens (like PSP22 & PSP34)
Flexible Deployment
Create new instances from existing contracts
Use
code_hash
for contract instantiation within other contractsSingle upload for standard contracts, reducing gas costs
Upgradability
Update contract code while preserving storage and balances
Use
set_code_hash
to replace contract code at specific addresses
Development Tools
Client APIs
🔧 Available Tools
Polkadot.js API for blockchain interaction via JavaScript
contracts-ui web application for contract interaction
Comparison with Ethereum
Architecture
Ethereum clients
Substrate
Runtime Environment
EVM
Wasm pallet-contract + EVM frontier
Gas Model
Fixed price per instruction
Weight + storage fees + loading fees
Smart Contract DSLs
Solidity and Vyper
ink! (Rust) and ask! (AssemblyScript)
Standards
EIPs
PSPs
Additional Resources
pallet-contracts Rust Documentation
pallet-contracts GitHub Repository
Polkadot.js API Documentation
📚 Further Reading For more detailed information about
pallet-contracts
, visit the Rust docs or GitHub repository.
Last updated