Core architectural layers
IOTA’s architecture consists of several interconnected layers that work together to process transactions and maintain network state:Execution layer
The execution layer processes transactions and maintains the state of all objects on the network. Key components include:- Transaction executor: Processes programmable transactions and executes Move bytecode
- Move VM: Executes Move smart contracts with built-in safety guarantees
- Object runtime: Manages the lifecycle of objects including creation, mutation, and deletion
- Gas metering: Tracks computation and storage costs during execution
Storage layer
IOTA uses an object-centric storage model where data is organized around objects rather than accounts:- Object store: Stores all objects with their metadata (version, digest, owner)
- Package store: Manages Move package bytecode and dependencies
- Transaction store: Maintains transaction history and effects
- Checkpoint store: Persists consensus checkpoints for recovery and synchronization
IOTA stores objects as versioned entries with Lamport timestamps, enabling parallel transaction processing when objects don’t conflict.
Consensus layer
IOTA implements a DAG-based consensus protocol that provides high throughput:- Block DAG: Validators produce blocks that reference previous blocks, forming a directed acyclic graph
- Universal committer: Makes commit decisions for leader blocks in the DAG
- Leader schedule: Determines which validator acts as leader for each round
- Commit observer: Processes committed sub-DAGs and produces finalized output
Key components
Authority node
Validator nodes (authorities) are responsible for:- Proposing blocks containing transactions
- Validating and signing blocks from other authorities
- Participating in consensus by building the block DAG
- Executing committed transactions and updating state
- Serving queries from clients and other validators
Block manager
The block manager (BlockManager) tracks DAG dependencies when processing new blocks:
- Accepts blocks when their causal history is complete
- Suspends blocks waiting for missing ancestors
- Maintains the DAG state including blocks, commits, and committed rounds
- Coordinates with the synchronizer to fetch missing blocks
Transaction consumer
The transaction consumer pulls pending transactions from the mempool to include in the next block proposal. It ensures:- Transaction validity before inclusion
- Gas budget availability for execution
- Object dependencies are resolvable
- Compliance with protocol limits (max transactions per block)
Data flow
Here’s how a transaction flows through the system:Block proposal
Validator includes the transaction in a block proposal and broadcasts it to the network.
Consensus
The universal committer identifies committed leaders and their sub-DAGs based on stake-weighted voting.
Object versioning
IOTA uses Lamport timestamps for object versioning, which enables optimistic concurrency:- Multiple transactions to execute in parallel if they touch different objects
- Deterministic conflict resolution when transactions access the same objects
- Efficient caching and synchronization across validators
Programmable transactions
IOTA supports programmable transactions that chain multiple operations together atomically:- Pure arguments: Serialized data inputs (e.g., amounts, addresses)
- Object arguments: References to on-chain objects (owned, shared, or immutable)
- Commands: Move calls, transfers, object operations
- Results chaining: Output from one command can be input to another
Transaction effects
After execution, IOTA produces transaction effects that describe all state changes:- Modified objects: Objects that were mutated with their new versions
- Created objects: Newly created objects with their initial state
- Deleted objects: Objects that were deleted or wrapped
- Events: Custom events emitted by Move code
- Gas summary: Breakdown of computation and storage costs
- Status: Success or failure with error details
Epochs and protocol upgrades
IOTA operates in epochs, which are fixed periods of time (typically 24 hours):- Validator set is fixed within an epoch
- Stake distribution is locked for the epoch
- Protocol version is consistent across an epoch
- Epoch boundaries enable protocol upgrades without hard forks
- New validator set becomes active
- Protocol version can be upgraded if coordinated
- Storage fees are reconciled
- Randomness beacon is rotated
Related topics
Move language
Learn about the Move programming language used for smart contracts
Objects and ownership
Understand IOTA’s object model and ownership types
Consensus
Deep dive into IOTA’s DAG-based consensus mechanism
Transactions
Learn about transaction structure and lifecycle