suideveloper
All questions
Consensus, validators and staking

What are checkpoints on Sui?

October 30, 2026

A checkpoint is a certified record of Sui's history: a numbered batch of transactions that have already executed, with their effects. Each one is signed by validators holding more than two-thirds of the stake and linked to the previous checkpoint by hash. Checkpoints play the role blocks play on other chains for syncing full nodes, feeding indexers and verifying history. The difference is that they're built after execution, not before. Mainnet produces several checkpoints per second.

What's in a checkpoint

According to Sui's docs, each checkpoint contains:

  • the hash of the previous checkpoint
  • the digests of the transactions it includes and of their effects
  • an aggregated BLS signature from a quorum (more than 2/3) of validators

Checkpoints also have a sequence number, a timestamp, the epoch, and a running total of transactions on the network. The last checkpoint of each epoch carries the next epoch's validator committee and public keys. That's how a light client can verify the chain from genesis, one committee hand-off at a time.

How checkpoints relate to consensus

Mysticeti orders transactions in consensus commits, and validators execute them. Validators then build checkpoints from those commits: a big commit can be split into several checkpoints, or several small ones merged into one. Every honest validator ends up with the same checkpoint contents and signs them.

Checkpoints aren't what makes a transaction final. A transaction is final once its effects are certified, which usually happens before it's checkpointed. Being included in a certified checkpoint is another way to prove finality, and it's the one indexers and archives depend on.

Look one up

The latest checkpoint, via GraphQL:

Terminal
curl -s -X POST https://graphql.mainnet.sui.io/graphql \
  -H 'content-type: application/json' \
  -d '{"query":"{ checkpoint { sequenceNumber digest timestamp networkTotalTransactions epoch { epochId } } }"}'

At epoch 1291 (25 October 2026), mainnet was past checkpoint 338,000,000 and over 6.34 billion total transactions. Checkpoints 338,000,000 to 338,005,000 took about 1,185 seconds, roughly one every 0.24 s. Pass checkpoint(sequenceNumber: N) to fetch a specific one.

To find which checkpoint a transaction landed in, use @mysten/sui:

TypeScript
import { SuiGrpcClient } from '@mysten/sui/grpc';

const client = new SuiGrpcClient({ network: 'mainnet', baseUrl: 'https://fullnode.mainnet.sui.io:443' });
const result = await client.getTransaction({ digest: DIGEST });
const tx = result.Transaction ?? result.FailedTransaction;
console.log(tx.checkpoint, tx.timestampMs); // sequence number and checkpoint time

The result of signAndExecuteTransaction has checkpoint: null because the transaction hasn't been checkpointed yet. Call client.waitForTransaction({ digest }) before reading it from an indexer.

Why developers care

  • Indexing. Custom indexers process the stream of certified checkpoints in order, and the sequence number is your cursor. See custom indexers.
  • Timestamps. A transaction's timestamp is its checkpoint's timestamp, not the time it was submitted.
  • Explorers. "Checkpoint" on an explorer is the closest thing to a block height.
  • Health checks. A checkpoint that isn't advancing is the clearest sign of a network or node problem. See checking whether Sui is down.

Sources

More on consensus, validators and staking