EVM/MoveVM Cheatsheet
Quickly compare Solidity and Move, and understand how the EVM and MoveVM differ in design and execution.
High-Level Overview
Smart Contracts
Solidity, EVM
Move, MoveVM
Benefits
Mature, wide adoption
Scalability, low latency, Optimal fees
Transaction Fees
Variable, can be high
Lower and more predictable
Account Addresses
160-bit
256-bit
Account Structure
Balance in a single field, uses nonce
Modules and resources, uses sequence number
Data Storage
Patricia Merkle Trees
Global storage with resources and modules
Storage Mindset
Contract-based storage
Account & Resources centric mindset for code and data
Parallelization
Limited due to shared storage space
Enhanced parallel execution due to resource model
Type Safety
Contract types provide basic type safety
Module structs and generics offer robust type safety
Unique Features
Wide ecosystem, EVM compatibility
Native VRF, Automation, Oracle price feeds
Comparing Token Standards
Token Structure
Each token is its own contract
Every token uses typed Coin with single, reusable contract
Token Standard
Must conform to standards like ERC20; implementations vary
Uniform interface and implementation for all tokens
Balance Storage
Balances stored in contract using mapping structure
Resource-Oriented: Balances stored as resource in user’s account
Transfer Mechanism
Tokens can be transferred without receiver’s permission
Tokens require receiver’s explicit consent for transfer
Safety
Depends on implementation quality
Resources cannot be arbitrarily created, ensuring token integrity
Comparing EVM and Move VM
Data Storage
Data stored in smart contract’s storage space
Data stored across smart contracts, user accounts, and objects
Parallelization
Limited parallel execution due to shared storage
Enhanced parallel execution enabled by flexible split storage
VM and Language Integration
Separate layers for EVM and languages (Solidity)
Seamless integration between VM layer and Move language
Critical Network Operations
Complex implementation of network operations
Critical operations natively implemented in Move
Function Calling
Dynamic dispatch allows arbitrary contract calls
Static dispatch focuses on security and predictable behavior
Type Safety
Contract types provide basic type safety
Module structs and generics offer robust type safety
Transaction Safety
Uses nonces for transaction ordering
Uses sequence numbers for transaction ordering
Object Accessibility
Objects bound to smart contract scope
Guaranteed global accessibility of objects
Module Structure & Initialization
Ethereum (Solidity)
Supra Move
Key Differences:
Supra Move: Uses
init_modulefor automatic initialization or explicit initialization functionsEthereum: Uses constructors that run once during deployment
Supra Move: Resources are stored under user accounts, not contract addresses
Ethereum: State stored in contract storage slots
Functions
Ethereum (Solidity)
Supra Move
Key Differences:
Supra Move: Uses
#[view]for read-only functions, public entry for blockchain callsEthereum: Uses view, pure, public, external modifiers
Supra Move: acquires keyword, declares which resources the function accesses
Ethereum: Automatic state access without declaration
Basic Types
Ethereum (Solidity)
Supra Move
Structs and Resources
Ethereum (Solidity)
Supra Move
Key Differences:
Supra Move: Resources have abilities (
key, store, drop, copy)Ethereum: Structs are simple data containers
Supra Move: Resources ensure linear type safety
Ethereum: No built-in protection against double-spending
Events
Ethereum (Solidity)
Supra Move
Key Differences:
Supra Move: Events are structs with
#[event]attributeEthereum: Events are declared with
eventkeywordSupra Move: Uses
event::emit()to emit eventsEthereum: Uses
emitkeywordSupra Move: No indexed parameters concept
Ethereum: Supports indexed parameters for filtering
Storage & State Management
Ethereum (Solidity)
Supra Move
Key Differences:
Supra Move: Resources stored under specific account addresses
Ethereum: State stored in contract’s storage slots
Supra Move: Must explicitly declare resource access with
acquiresEthereum: Automatic state access
Testing
Ethereum (Solidity with Hardhat)
Supra Move
Deployment
Ethereum
Supra Move
Account Structure & Transaction Model
Ethereum Account Model
Supra Move Account Model
Recap
Feature
Ethereum/Solidity
Supra Move
Type System
Dynamic typing, runtime checks
Static typing, compile-time safety
Resource Management
Manual memory management
Automatic resource lifecycle
Upgrades
Proxy patterns, complex
Module upgrades, simpler
State Storage
Contract storage
Account resources
Safety
Runtime safety
Compile-time + runtime safety
Arrays
Fixed/dynamic arrays
Vectors
Mappings
Built-in mappings
Table data structure
Events
Built-in event system
Struct-based events
Testing
External frameworks
Built-in testing
Last updated
