Skip to content

Move - A Web3 Language and Runtime

The Aptos blockchain consists of validator nodes that run a consensus protocol. Consensus agrees on the order of transactions and on their output when executed on the Move Virtual Machine (MoveVM). Each validator feeds the current ledger state plus the block into the VM. The MoveVM produces a changeset (storage delta). Once consensus commits that output, it becomes public. This page covers core Move concepts and how they apply on Aptos.

Move is a programming language for Web3 that emphasizes scarcity and access control. Assets are represented by or stored inside resources. Scarcity is the default: a struct cannot be copied or dropped unless the bytecode explicitly grants the copy or drop ability.

Access control comes from accounts and module visibility. A module is a library or program that can create, store, or transfer assets. Only public (and public(friend)) functions are callable from other modules. Unless a struct has a public constructor, only its defining module can create it. Fields are readable and writable only inside that module, or through public accessors. Structs with key can enter global storage only from the module that defines them. Structs with store can sit inside another store or key value, including outside the defining module.

The sender of a transaction is a signer, a verified owner of an account. The signer has the highest privilege in Move and is the only entity that can publish a resource into an account. Module authors can also require a signer to read or update assets under an account.

Aptos / MoveSolana / SeaLevelEVMSui / Move
Data storageStored at a global address or within the owner’s accountStored in the owner’s account for a programStored in the contract accountStored at a global address
ParallelizationInferred at runtime with Block-STMRequires specifying all data accessedTypically serialRequires specifying all data accessed
Transaction safetySequence number or orderless nonceTransaction uniquenessNoncesTransaction uniqueness
Type safetyModule structs and genericsProgram structsContract typesModule structs and generics
Function callingStatic dispatch, plus function values (Move 2.2)Static dispatchDynamic dispatchStatic dispatch
Authenticated storageYesNoYesNo
Object global accessibilityYesNot applicableNot applicableNo; objects can nest inside others

Each MoveVM deployment can extend core Move through an adapter. Aptos also ships a framework of modules, similar to an operating system sitting on a CPU.

The Aptos Move adapter includes:

  • Move objects — an extensible model for a heterogeneous set of resources at one on-chain address (AIP-10).
  • Cryptography primitives for scalable, privacy-preserving apps.
  • Resource accounts — programmable accounts without an interactive private key, used for DAOs, shared accounts, and app-owned modules.
  • Tables for large key-value collections under an account.
  • Parallel execution via Block-STM without declared access lists.
  • Multi-agent transactions, so one transaction can carry multiple distinct signers.
  • Function values (Move 2.2) for first-class functions, with reentrancy rules you must follow.
  • On-chain randomness for unbiasable random values in Move.

The Aptos framework includes: