A hands-on course for learning Move smart contract development. Built for developers with EVM/Solidity experience transitioning to Move-based chains.
Each module contains explained concepts, working contract implementations, and tests. A Rust gRPC API demonstrates real-world off-chain integration.
- Familiarity with smart contract concepts (Solidity/EVM experience recommended)
- Sui CLI installed
- Rust toolchain (for the gRPC API module)
- Basic terminal/CLI proficiency
| # | Module | Topics |
|---|---|---|
| 00 | Setup | Environment, CLI installation, project structure |
| 01 | Fundamentals | Types, functions, control flow, references |
| 02 | Ownership & Abilities | copy, drop, store, key — resource safety vs. EVM |
| 03 | Generics | Type parameters, constraints, phantom types |
| 04 | Storage & Object Model | Objects, ownership types, dynamic fields |
| 05 | Module Design Patterns | init, capability pattern, visibility, events, OTW |
| 06 | Testing | Unit tests, integration tests, coverage, formal verification |
| 07 | Token Standards | Fungible tokens (Coin<T>), NFTs, display metadata |
| 08 | DeFi Patterns | Stablecoin, escrow, flash loans, AMM |
| 09 | Security | Vulnerability taxonomy, do's & don'ts, audit practices |
| 10 | Deployment & Upgrades | Publishing, UpgradeCap, versioned migrations, artifacts |
| 11 | Rust SDK Integration | Off-chain interaction, transaction building, event streaming |
| 12 | CI & Production | GitHub Actions, linting, mainnet deployment checklist |
The rust-api/ directory contains a working gRPC server wrapping Sui JSON-RPC calls. It demonstrates how a production backend interacts with on-chain Move contracts — object reads, transaction execution, balance queries, and event streaming. See rust-api/README.md.
Each module is a standalone Move package:
cd modules/01-fundamentals
sui move build
sui move test
sui move test --coverageRun all modules:
./scripts/test-all.shGitHub Actions workflow at .github/workflows/ci.yml builds and tests every Move package and the Rust API on push and pull request.