Architecture
The validator set, full nodes, the object store, transaction flow, and how fast-path vs. consensus-path transactions are handled.
Path: architecture
Third-party documentation. This is independently authored analysis of the public Sui codebase — not the official docs, and not reviewed or endorsed by the Sui team.
Architecture
Sui's architecture is shaped by one decision: treat owned-object transactions and shared-object transactions differently. Everything else — the validator set, full nodes, the object store, and the SDK — follows from that.
The network roles
- Validators — a permissioned (staked) set that executes transactions, participates in consensus for shared objects, and produces checkpoints. Validator stake and behavior are governed by Sui's on-chain system state (epoch-based).
- Full nodes — non-staked replicas that verify and serve the chain: they expose the JSON-RPC API, maintain a copy of the object store and history, and can be run by anyone. Most applications talk to a full node, not to validators.
- Archive nodes — store complete historical data (all checkpoints and transactions) for deep history queries and auditability.
The object store
State is a database of objects keyed by (ObjectID, version). The object store:
- Indexes objects by owner (an address, another object, or "shared") and by type, enabling rich queries (
getObjectsOwnedByAddress,getDynamicFieldObject). - Keeps versions — every mutation bumps an object's version, which is what lets fast-path transactions detect and reject stale reads.
- Represents owned vs. shared state, which decides the execution path a transaction takes.
Transaction flow
- A client builds a transaction block (a set of commands: Move calls, transfers, splits), signs it, and submits it to a full node or validator via
sui_executeTransactionBlock. - The client decides the path based on the objects the tx touches:
- Owned-only transactions are sent to validators for fast-path certification — a quorum of signatures and the tx is final. No consensus round.
- Shared-object transactions are sent to validators which sequence them through the DAG-based consensus (see the Consensus & Ordering module) and execute them in that order.
- Validators execute via the MoveVM, produce effects (state changes, events, gas), and form checkpoints that are signed and finalized.
- Full nodes ingest checkpoints and update their local object store; clients see the effects via the RPC.
Why the split works
- Parallelism — transactions touching disjoint owned objects can be executed in parallel (they're independent), and the fast path avoids consensus entirely.
- Latency — the common "send a payment" case commits in one round-trip.
- Simplicity for developers — you don't choose the path; the framework does, based on object ownership. As a builder you just pick whether an object is owned or shared when you design it.
Design principles
- Ownership is a first-class, enforced concept — the framework won't let you mutate an object you don't own.
- Consensus only where required — ordering is the expensive resource; the architecture spends it only on genuinely shared state.
- Move is the only way to touch state — no arbitrary bytecode execution, which is a large part of why the system can be this parallel and auditable.
System Diagram
User
Frontend
Lending
Vaults
Trading
Liquidation
Core
Oracle
Data / Storage
Interface
Interface
text
┌────────────────────────────────────────────┐│ Validator set ││ ┌──────────────────────────────────────┐ ││ │ fast-path (owned-object txs) │ ││ │ quorum cert = final, no consensus │ ││ └──────────────────────────────────────┘ ││ ┌──────────────────────────────────────┐ ││ │ shared-object txs → Narwhal DAG │ ││ │ Bullshark / Mysticeti ordering │ ││ └──────────────────────────────────────┘ │└──────────────┬──────────────────┬──────────┘│ checkpoints │ certs┌──────────────▼──────┐ ┌───────▼──────────┐│ Full node │ │ Archive nodes ││ JSON-RPC + objects │ │ historical data │└─────────────────────┘ └──────────────────┘
STATUSinterface
