Signed history. Check your copy for free.
Genesis to tip as signed, digest-addressed partitions. Check a running database against them read-only, repair only the ranges that break, or stand up a fresh box in hours.
Nothing leaves your machine
Verify reads your database and the public manifest. No upload, no account, no charge.
Repair touches only what broke
Each fix is one transaction per partition, so an interrupted repair leaves no half-corrected range.
A fresh box in hours
Bootstrap restores from signed partitions instead of replaying the chain, then follows your node forward.
One signed set, four ways to use it
Verify is free. The three that fetch partitions are quoted against your balance before anything is charged.
Verify an instance
Digest-check every range of your data against the manifest, read-only.
secondlayer verify allBootstrap a fresh box
Genesis to tip arrives as verified partitions instead of a replay.
secondlayer bootstrapBackfill history
Fill the range behind your node's reach, then follow it forward for free.
secondlayer bootstrap \
--to-block <n>Repair gaps
Plans the fix as a dry run, then heals exactly those partitions with --apply.
secondlayer repair --applyChecking us is free, forever
Run verify as often as you like. When it finds a broken range, repair fetches only those partitions, checks each against its signed digest before reading a row, and writes it back.
Skip the replay
Bootstrap prints both timings before it starts, then restores and verifies itself. Pass --from-block to restore forward only; everything below is declared out of scope, so verify doesn't read it as missing.
sample timings
| Dataset | Rows | Share of the set | Coverage | Fetch |
|---|---|---|---|---|
| events | 299,680,847 | 0 → 9,266,609 | $0.15 / partition | |
| transactions | 30,154,578 | 0 → 9,266,609 | $0.05 / partition | |
| blocks | 9,266,610 | 0 → 9,266,609 | $0.05 / partition |
Everything you need to check us, in the open
Append-only on R2. Each partition carries a SHA-256 over its bytes and a semantic digest over its canonical encoding.
snapshots/<digest>.jsonThe signed manifest: coverage, counts, per-object digests, finality rule and audit.
blocks/ · transactions/ · events/Range-partitioned Parquet, digest in the filename.
digests/<range>-<sha16>.parquetOne row per height with the block digest and rolled-up transaction and event digests.
attestations/<digest>/node.jsonA signed independent node audit: the attested window, exact stats, a sample of any mismatches.
status.jsonOperational state: fresh, lagging, stale, gap, failed-audit or source-unavailable.
reports/incidents/Signed incident reports, newest first. When we get something wrong, it is written down here.
The strength of the claim, next to the claim
Every range in the manifest states which of three levels it reaches. Most of the set is at the first level today.
Rebuilds the database exactly as the indexer wrote it. You trust our indexer, and you can check every byte it produced.
An independent node re-read the range and signed what it found. A smaller thing to trust.
Checked against what a node observed live, as it happened. The level each range reaches is in the manifest.
Prepay for the runs that fetch
Bootstrap, backfill and repair draw from your account balance. Every run is quoted first, and a short balance stops it before anything is charged.
Verify, deep verify and reading the manifest. No account needed.
Of repair, on any account. Bootstrap and backfill are metered from the first partition.
Built on this history
You hold the cursor
Every event in order, pulled from any point in history.
Streams →Typed rows from genesis
Query decoded events behind one key, with the same manifest to check against.
Index →Your contract, as a table
Backfilled from this history and held at tip.
Subgraphs →Your server, told first
Chain events pushed to your endpoint as they land, with failed deliveries logged and requeueable.
Webhooks →How a new box starts
The archive is how a self-hosted instance skips weeks of replay. secondlayer bootstrap fills an empty instance; after that your node feeds it and verify keeps checking it against each new signed publish.
Archive questions
Do I need an account to verify?
secondlayer verify reads your database and the public manifest. Nothing is uploaded and nothing is charged. An account key is only needed for runs that fetch partitions.How do I know the history is complete?
What does db-reconstructive mean for me?
What does a repair cost?
secondlayer archive quote --flow repair prices it before anything runs.