Skip to main content

Sequencer Quickstart

The sequencer orders events, commits them to Merkle roots, and anchors those commitments so anyone can verify inclusion without trusting it. This gets one running and walks a single event through.

Run it

Authentication is Authorization: ApiKey <key>. A bootstrap admin key exists for local development:
dev_admin_key is a development bootstrap credential. Replace it before anything reachable from outside your machine.

1. Register an agent key

Events are signed, so the sequencer needs the agent’s public key first.
Keys are registered with proof of possession β€” the agent demonstrates it holds the private key rather than merely asserting a public one. See /api/v1/agents/keys.

2. Ingest an event

The event gets a sequence number in its stream, and its leaf enters the next batch.

3. Read the head

head is the current sequence position for that tenant and store β€” how you know whether your event landed.

4. Get the commitment and an inclusion proof

That returns the batch’s events_root, state roots, and sequence range. To verify an individual event, pair it with an inclusion proof from the gRPC v2 service (GetInclusionProof) and recompute the root locally.
Recompute against the root read from the chain, not the one this API returns. Comparing an API-supplied root to an API-supplied proof verifies nothing β€” the on-chain value is what makes it trust-minimised. Full walkthrough: verification example.

5. Anchor

Anchoring submits the commitment to Set L2. Until it lands, you have a sequenced event; after, you have a verifiable one.

Run the full demo

Next

Sequencer overview

What VES is and why it exists.

Architecture deep dive

Every component in detail.

Operations

Running it in production.

Verification

Prove inclusion yourself.