Skip to main content

Hard Reset Instructions

Hard reset wipes the local state and downloads the most recent chain snapshot. After the snapshot is applied, the node catches up using statesync and blocksync.

Hard reset is the most powerful means of resetting a node. Steps are:

  1. Download a recent snapshot of the network state. As of Nov 2025, this is about 60 GB on testnet but is very small on mainnet.
  2. Initialize the DB from the snapshot (this can take up to an hour on testnet and a few minutes on mainnet)
  3. Catch up to the tip of the chain via statesync / blocksync (typically 2-5 minutes assuming snapshot is a few hours old)
Snapshot Restore

Category Labs is one snapshot provider. If there is an issue, please refer to Discord validator channels for other snapshot providers.

Prerequisite

  • aria2 must be installed on your node

Instructions

  1. SSH into the node as monad user.

  2. Run reset-workspace.sh to ensure data is deleted.

    bash /opt/monad/scripts/reset-workspace.sh
  3. Download restore_from_snapshot.sh from the CL_BUCKET and execute it.

    # CL testnet
    CL_BUCKET=https://pub-b0d0d7272c994851b4c8af22a766f571.r2.dev
    curl -sSL $CL_BUCKET/scripts/testnet/restore_from_snapshot.sh | bash
    # CL mainnet
    CL_BUCKET=https://pub-b0d0d7272c994851b4c8af22a766f571.r2.dev
    curl -sSL $CL_BUCKET/scripts/mainnet/restore_from_snapshot.sh | bash
    info

    Alternatively, you can use the MF snapshot if you are facing issues with the CL snapshot:

    # MF testnet
    MF_BUCKET=https://bucket.monadinfra.com
    curl -sSL $MF_BUCKET/scripts/testnet/restore-from-snapshot.sh | bash
    # MF mainnet
    MF_BUCKET=https://bucket.monadinfra.com
    curl -sSL $MF_BUCKET/scripts/mainnet/restore-from-snapshot.sh | bash
  4. Fetch new forkpoint.toml and validators.toml.

    Note: For automatic remote config fetching (v0.12.1+), ensure REMOTE_VALIDATORS_URL and REMOTE_FORKPOINT_URL are defined in your .env file. See Full Node Installation for configuration details. If not configured, you may run the below commands.

    # testnet
    MF_BUCKET=https://bucket.monadinfra.com
    curl -sSL $MF_BUCKET/scripts/testnet/download-forkpoint.sh | bash
    curl -o ~/monad-bft/config/validators/validators.toml $MF_BUCKET/validators/testnet/validators.toml
    # mainnet
    MF_BUCKET=https://bucket.monadinfra.com
    curl -sSL $MF_BUCKET/scripts/mainnet/download-forkpoint.sh | bash
    curl -o ~/monad-bft/config/validators/validators.toml $MF_BUCKET/validators/mainnet/validators.toml
  5. Start all services

    systemctl start monad-bft monad-execution monad-rpc
  6. Verify the systemd services are running:

    systemctl list-units --type=service monad-bft.service monad-execution.service monad-rpc.service
    UNIT LOAD ACTIVE SUB DESCRIPTION
    monad-bft.service loaded active running "Service file for Monad BFT"
    monad-execution.service loaded active running "Service file for Monad Execution"
    monad-rpc.service loaded active running "Service file for Monad RPC"
    # Check logs for a specific process, e.g. bft
    journalctl -u monad-bft