EVM/MoveVM Cheatsheet

Quickly compare Solidity and Move, and understand how the EVM and MoveVM differ in design and execution.

High-Level Overview

Feature
Ethereum
Supra Move

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

Aspect
Ethereum/Solidity
Supra Move

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

Aspect
EVM (Ethereum Virtual Machine)
Move VM (Supra Move Virtual Machine)

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_module for automatic initialization or explicit initialization functions

  • Ethereum: 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 calls

  • Ethereum: 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] attribute

  • Ethereum: Events are declared with event keyword

  • Supra Move: Uses event::emit() to emit events

  • Ethereum: Uses emit keyword

  • Supra 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 acquires

  • Ethereum: 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