Open source · awslabs · Apache-2.0

Skip the initial sync

Bootstrap your node from a pre-synced snapshot in Amazon S3. Each snapshot is a copy of a node database from the network’s upstream publisher, refreshed on their schedule.

Chains
Ethereum, Solana
Clients
Agave, Geth, Nethermind, Reth
Regions
us-east-1, eu-west-1, ap-northeast-1
Price
No charge for snapshots
~/blockchain-snapshots/dist
$ ./snapshot.sh --list
ethereum-hoodi-geth          tar-zstd-stream-v1         3770000
ethereum-mainnet-geth        tar-zstd-seekable-v1       26139552
ethereum-mainnet-nethermind  tar-zstd-seekable-v1       26139552
ethereum-mainnet-reth        tar-zstd-seekable-v1       26149553
solana-mainnet-agave         archive-set-v1             454662635
$ ./snapshot.sh --snapshot ethereum-mainnet-geth --out /data/chaindata
Example output

Start from current state, not from genesis

Pick a snapshot ID, point it at a volume, and run one command.

  • Latest, every time

    Select a stable ID like ethereum-mainnet-geth. snapshot.sh resolves the newest catalog entry when you run it, so there’s no block, script, or extraction method to choose.

  • Parallel extraction

    Seekable snapshots decode independent zstd frames in parallel and write the filesystem tree directly. Local NVMe gets O_DIRECT writes; EBS gets buffered writes.

  • Checks before it writes

    Credentials, bucket access, artifact size, output safety, dependencies, and free space are validated before any data is written.

  • Container-aware

    Worker count follows CPU affinity, cgroup CPU quota, and memory headroom, up to 96. Runs in Docker, Amazon ECS, and Kubernetes.

  • In-Region, through your VPC

    Snapshots are reachable only through an Amazon S3 gateway VPC endpoint, from an EC2 instance in the same Region.

  • No charge for snapshots

    Standard charges apply for the instance, EBS volumes, and other AWS resources you use.

Get started

From instance to node data in four steps

Run this on EC2, not your laptop. Snapshots are only reachable through an Amazon S3 gateway VPC endpoint, so you download them from an EC2 instance in the same Region. A laptop or a browser won’t work.

  1. 01

    Use an instance

    Run these steps on an EC2 instance in us-east-1, eu-west-1, or ap-northeast-1, running Amazon Linux 2023 or Ubuntu 24.04. Its VPC needs an S3 gateway endpoint, and its instance profile needs s3:GetObject and s3:ListBucket.

    • EC2 instance in an active Region
    • S3 gateway VPC endpoint
    • Instance profile with read access
    • Local NVMe or an EBS volume sized for the extracted snapshot
    Example instance profile policy
    json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject", "s3:ListBucket"],
          "Resource": [
            "arn:aws:s3:::blockchain-snapshots-us-east-1",
            "arn:aws:s3:::blockchain-snapshots-us-east-1/*",
            "arn:aws:s3:::blockchain-snapshots-eu-west-1",
            "arn:aws:s3:::blockchain-snapshots-eu-west-1/*",
            "arn:aws:s3:::blockchain-snapshots-ap-northeast-1",
            "arn:aws:s3:::blockchain-snapshots-ap-northeast-1/*"
          ]
        }
      ]
    }

    Scope the resources to the Region you use. Bucket names come from each Region’s catalog.

  2. 02

    Get the tools and dependencies

    Clone the repository, then run setup once. Setup installs AWS CLI v2; Python 3 with boto3 and zstandard; zstd, tar, curl, and unzip; and mountpoint-s3 with FUSE when the instance supports them. Otherwise, downloads use S3 directly.

    bash
    sudo dnf install -y git
    cd ~ && git clone https://github.com/awslabs/blockchain-snapshots.git
    cd blockchain-snapshots/dist
    bash
    sudo apt-get update && sudo apt-get install -y git
    cd ~ && git clone https://github.com/awslabs/blockchain-snapshots.git
    cd blockchain-snapshots/dist
    bash · run once
    ./snapshot.sh --setup

    Setup may prompt for sudo. Snapshot download commands don’t use sudo; run them as the account that should own the data. AWS Blockchain Node Runners uses bcuser.

  3. 03

    Set up storage

    Extract to a dedicated directory on a volume with room for the full snapshot. Pick the one that matches your instance.

    Join the instance’s NVMe drives into one volume at /data. Instance types like i4i or i8g are the fastest option.

    bash
    sudo bash setup-storage.sh

    No RAID needed. If it’s an extra volume (here /dev/nvme1n1), format and mount it once. If you’re using the root volume, just make the directory.

    bash
    sudo mkfs.xfs -f /dev/nvme1n1          # skip if already formatted
    sudo mkdir -p /data && sudo mount /dev/nvme1n1 /data
    sudo chown "$(id -u):$(id -g)" /data

    On EBS the extractor writes buffered automatically; on local NVMe it uses O_DIRECT. Either way the result is identical. Size the volume for the snapshot’s extracted size, not its download size.

  4. 04

    Download a snapshot

    Pick a snapshot below and run its command from the dist folder. snapshot.sh resolves the latest catalog entry at execution time, checks storage, and selects the delivery method from catalog data. Each snapshot writes to its own folder under /data.

    bash
    ./snapshot.sh --snapshot ethereum-mainnet-geth --out /data/ethereum-mainnet-geth

    For archive-set snapshots such as Solana, the files stay compressed because the node unpacks them itself. Start Agave with --snapshots pointing at that folder and --no-snapshot-fetch.

Live catalog

Available snapshots

Loading catalogs…

How it works

One entrypoint, driven by catalog data

The tooling has no hardcoded snapshot list. Adding a snapshot that uses an existing delivery protocol is a catalog change, not a tool release.

  1. 01

    Registry

    Reads the active-region registry, config/regions.json, published with this page.

  2. 02

    Catalog

    Fetches the Region’s current catalog.json: CloudFront first, with an S3 fallback for private subnets.

  3. 03

    Resolve

    Maps the stable ID to the latest catalog entry at execution time. No block, slot, or version is a user choice.

  4. 04

    Validate

    Checks credentials, bucket access, artifact size, output safety, dependencies, and available space.

  5. 05

    Deliver

    Calls the handler for the protocol the catalog declares. An unknown protocol fails clearly and asks you to update the tooling.

Delivery protocols

ProtocolBehaviorFree space checked againstUsed by
tar-zstd-seekable-v1 Fetches the manifest, decodes independent zstd frames in parallel, and writes the filesystem tree The manifest’s exact uncompressed size Ethereum Mainnet (Geth, Nethermind, Reth)
tar-zstd-stream-v1 Streams the archive through zstd | tar and writes the filesystem tree A conservative estimate of 2× the compressed size Ethereum Hoodi (Geth)
archive-set-v1 Keeps the named full, incremental, and genesis archives for the node to unpack Known artifact sizes plus a 5% margin Solana Mainnet (Agave)

Reference

snapshot.sh

One command for setup, discovery, and download. Logs go to stderr, so --json output pipes cleanly.

usage
snapshot.sh --setup
snapshot.sh --snapshot ID [options]
snapshot.sh --chain CHAIN [--network NETWORK] [--client CLIENT] [options]
snapshot.sh --list [--region REGION] [--json]

Automate it

bash
# machine-readable result on stdout, progress on stderr
./snapshot.sh --snapshot ethereum-mainnet-reth --json | jq -r .output_dir

# discover IDs, or narrow with selectors
./snapshot.sh --list --region us-east-1
./snapshot.sh --chain solana --network mainnet

A partial selection that matches more than one entry lists the candidates instead of guessing. DEBUG=1 traces shell commands, keeps the per-run work directory, and logs each extraction group.

Options
--snapshot IDStable catalog ID, such as ethereum-mainnet-geth
--chain --network --clientConvenience selectors; must resolve to one entry
--listList available snapshots in this Region and exit
--region REGIONActive Region. Defaults to AWS_REGION/AWS_DEFAULT_REGION, then EC2 IMDSv2
--out DIROutput directory. Default: /data/<snapshot-id>
--source MODEauto | mount | s3. Auto uses mountpoint-s3 when FUSE is usable, otherwise direct S3 reads
--workers NParallel workers; 0 is container-aware auto
--o-direct MODEauto | on | off. Auto enables O_DIRECT only on local NVMe, after a test write
--forceClear a non-empty output for filesystem delivery
--jsonMachine-readable final result
--registry URLActive-region registry override, for test registries
Environment
REGISTRY_URL SOURCE WORKERS ODIRECTSame as the matching options
MS3_GBPSmountpoint-s3 maximum throughput in Gbps. Default: 25
DROP_CACHES=1Drop the page cache before extraction (needs root)
DEBUG=1Trace commands and keep the work directory
--json result fields
statussuccess
snapshot_id blockchain network clientWhat was resolved
versionResolved block or slot. block remains as an alias during the compatibility window
delivery_protocol methodProtocol from the catalog, and the read path used: mount, s3, or archive-set
region output_dir size_bytes duration_secondsWhere it ran, where the data is, and how long it took

Where it runs

EC2, containers, and Node Runners

Hosts

Amazon Linux 2023 and Ubuntu 22.04 or 24.04, on x86_64 and arm64. Run setup once, separately from the download.

Containers

Bake the dependencies into the image instead of running setup. Pass credentials through an ECS task role, EKS Pod Identity or IRSA, environment credentials, or reachable instance metadata. --source s3 needs no FUSE or extra container capabilities.

AWS Blockchain Node Runners

Node Runners uses bcuser (UID/GID 1002). Run setup and storage preparation in its root bootstrap, then run the download as bcuser so the node user owns the files.

Explore Node Runners

Integrity

The network is the final arbiter of correctness.

A node restored from a snapshot must validate against its network peers. The resolver validates catalog shape and exact S3 URIs, checks artifact size against the catalog before delivery, and checks seekable artifacts against their download manifest.

Snapshot data is mirrored from third-party blockchain foundations and teams. Availability doesn’t constitute endorsement. No availability, freshness, or correctness guarantee is provided, and this is not an AWS service or SLA.

Report a security issue