cosmoshub-4 mainnet node in minutes instead of a multi-day full sync, in
goleveldb or pebbledb. Pick the database and the variant below - the table and the command
update together, so you always see exactly what you are about to download.
A pebbledb snapshot needs both backend settings switched before the node starts -
db_backend
in config.toml and app-db-backend in app.toml. The pebbledb command in the picker above does it for you.
Because the restore replaces the whole data/ folder, this is also how you move an existing
goleveldb node to pebbledb.What’s inside
data/folder from a live Cosmos Hub (cosmoshub-4)gaiadfull node with pruning (custom/keep-recent=100/interval=19).wasm/state- the CosmWasm contract bytecode.x/wasmkeeps only the code hashes inapplication.dband the bytecode itself on disk, so adata/-only archive restores a node that cannot execute contracts. It is bundled here so the snapshot is self-sufficient.wasm/cacheis deliberately left out: it is a compiled, machine-specific cache your node rebuilds by itself.
Compatible software and settings
File names
Each archive is published under a name carrying the chain ID, database backend, block height and UTC creation time, with a matching.sha256 and .txt next to it:
latest.tar.lz4 and latest-pebbledb.tar.lz4 always point at the newest of each, so scripts can
use a stable URL. Downloads support HTTP range requests, so aria2c -x8 and resumed curl -C -
both work.
Verify the download
.sha256 file is fetched first: it names the dated archive it belongs to, so the file you download is
always the one the checksum is for, even if a new snapshot is published during a long download. The last line should read <archive name>: OK.
For pebbledb fetch latest-pebbledb.tar.lz4.sha256 instead.
To restore from the verified file rather than streaming it, use lz4 -dc "$F" in place of
curl -fL <url> | lz4 -dc - in the picker command.
FAQ
How often is the snapshot updated?
How often is the snapshot updated?
goleveldb every 4 hours; the pebbledb snapshot for the same height follows about
30 minutes later. The last 2 of each are kept online.
What db backend?
What db backend?
Both.
goleveldb and pebbledb, always at the same height.How is the pebbledb snapshot produced?
How is the pebbledb snapshot produced?
It is converted from the goleveldb snapshot of the same height with
pebblify, using the same pebble library version
gaiad itself uses. Before anything is published, every key and value of the converted database
is compared against the goleveldb original; a single mismatch stops the release.Can I use this to bootstrap a validator?
Can I use this to bootstrap a validator?
Yes. The tarball carries only
data/ and wasm/state. There is no config/ directory in
it, so no priv_validator_key.json, no node_key.json and no keyring - your identity files
are never overwritten by a restore.Do I need to download the wasm archive separately?
Do I need to download the wasm archive separately?
No.
wasm/state is already inside the snapshots above, so a single download gives you a
node that can execute contracts. The standalone wasm.tar.lz4 exists only for topping up a
node that is already synced.Is the node stopped while the snapshot is taken?
Is the node stopped while the snapshot is taken?
Yes, briefly. The goleveldb archive is a cold tar taken with
gaiad stopped, so the database is
never copied mid-write. The pebbledb conversion works on that finished archive and never touches
the running node.My pebbledb node prints panic: pebble: closed when I stop it. Is my data damaged?
My pebbledb node prints panic: pebble: closed when I stop it. Is my data damaged?
No. On
gaiad v28 with pebbledb, IAVL’s background pruning can still be reading when the database is
closed during shutdown, and pebble reports that as a panic where goleveldb would just return an error.
It happens after the last block is already committed. We reproduced it on our own pebbledb node and
restarted from the same data: the node reopened in 20 seconds and kept producing app hashes identical
to independent public RPCs.