# System Dependencies & Configuration#-----------------------------------------sudo apt update > /dev/null 2>&1sudo apt install curl tmux jq lz4 unzip aria2 wget htop net-tools -y > /dev/null 2>&1# Download Node Snapshots#-----------------------------------------cd $HOMEsudo systemctl stop story story-getharia2c -x 16 -s 16 -o story-pruned-snap.tar.lz4 https://st-snap-1.stakeme.pro/story/pruned/cosmos_data_story_20250809_080001.tar.lz4aria2c -x 16 -s 16 -o geth-pruned-snap.tar.lz4 https://st-snap-1.stakeme.pro/story/pruned/evm_chaindata_story_20250809_080001.tar.lz4# Restore Story Chain Data#-----------------------------------------cp $HOME/.story/story/data/priv_validator_state.json $HOME/.story/story/priv_validator_state.json.backuprm -r $HOME/.story/story/datatar -I lz4 -xvf ~/story-pruned-snap.tar.lz4 -C $HOME/.story/storymv $HOME/.story/story/priv_validator_state.json.backup $HOME/.story/story/data/priv_validator_state.json# Restore Geth Chain Data#-----------------------------------------rm -r $HOME/.story/geth/odyssey/geth/chaindatatar -I lz4 -xvf ~/geth-pruned-snap.tar.lz4 -C $HOME/.story/geth/odyssey/geth# Monitor, cleanup and restart services#-----------------------------------------sudo systemctl restart story story-gethrm $HOME/story-pruned-snap.tar.lz4rm $HOME/geth-pruned-snap.tar.lz4sudo journalctl -u story-geth -u story -f
Snapshot
powered by
STAKEME
Height:
EVM size
Cosmos size
Prunning
7602374
16.52GB
36.05GB
default
Indexer
db:
Date:
Update:
Estimated Time
powered by
Mictonode
Indexer
Updated
null
every 12 hours
sudo systemctl stop story story-gethmv $HOME/.story/story/data/priv_validator_state.json $HOME/.story/priv_validator_state.json.backuprm -rf $HOME/.story/story/datarm -rf $HOME/.story/geth/aeneid/geth/chaindatamkdir -p $HOME/.story/geth/aeneid/gethSNAPSHOT_URL="https://files.mictonode.com/story/snapshot/"LATEST_COSMOS=$(curl -s $SNAPSHOT_URL | grep -oP 'story_d{8}-d{4}_d+_cosmos.tar.lz4' | sort | tail -n 1)LATEST_GETH=$(curl -s $SNAPSHOT_URL | grep -oP 'story_d{8}-d{4}_d+_geth.tar.lz4' | sort | tail -n 1)if [ -n "$LATEST_COSMOS" ] && [ -n "$LATEST_GETH" ]; thenCOSMOS_URL="${SNAPSHOT_URL}${LATEST_COSMOS}"GETH_URL="${SNAPSHOT_URL}${LATEST_GETH}"if curl -s --head "$COSMOS_URL" | head -n 1 | grep "200" > /dev/null && curl -s --head "$GETH_URL" | head -n 1 | grep "200" > /dev/null; thencurl "$COSMOS_URL" | lz4 -dc - | tar -xf - -C $HOME/.story/storycurl "$GETH_URL" | lz4 -dc - | tar -xf - -C $HOME/.story/geth/aeneid/gethmv $HOME/.story/priv_validator_state.json.backup $HOME/.story/story/data/priv_validator_state.jsonsudo systemctl restart story-gethsleep 5sudo systemctl restart storysudo journalctl -u story -u story-geth -f -o catelseecho "Snapshot URL is not accessible"fielseecho "No snapshot found"fi
powered by

Coinspor
sudo apt updatesudo apt install -y aria2 zstd jq curlecho "Coinsspor Snapshot Height: $(curl -s https://snaps.coinsspor.com/story/aeneid/coinsspor-height.txt)"# Get detailed snapshot informationcurl -s https://snaps.coinsspor.com/story/aeneid/coinsspor-info.json | jq '.'#!/bin/bash# Coinsspor Advanced Snapshot Download - Server Optimized# Using aria2c + ZSTD for maximum performanceset -eecho "🌟 Coinsspor Advanced Snapshot Download (Server Optimized)"echo "========================================================="# ConfigurationCOINSSPOR_BASE="https://snaps.coinsspor.com/story/aeneid"STORY_DATA="$HOME/.story"TEMP_DIR="/tmp/coinsspor_sync"# Enhanced Story RPC port detection with connectivity testdetect_story_port() {local config_file="$STORY_DATA/story/config/config.toml"# Primary method: Test common Story ports with connectivity (fast & reliable)for test_port in 16657 26657 27657; doif timeout 2 curl -s "localhost:$test_port/status" >/dev/null 2>&1; thenecho "$test_port"returnfidone# Backup method: Extract from config if availableif [[ -f "$config_file" ]]; thenlocal extracted_port=$(grep "laddr.*tcp" "$config_file" | grep -oE ":[0-9]+" | tr -d ':' | head -1)if [[ -n "$extracted_port" ]] && [[ "$extracted_port" =~ ^[0-9]+$ ]]; thenif timeout 2 curl -s "localhost:$extracted_port/status" >/dev/null 2>&1; thenecho "$extracted_port"returnfififi# Final fallbackecho "26657"}STORY_PORT=$(detect_story_port)LOCAL_RPC="localhost:$STORY_PORT"# Check dependenciesecho "📦 Checking dependencies..."for cmd in aria2c zstd jq; doif ! command -v $cmd &> /dev/null; thenecho "❌ Missing dependency: $cmd"echo "💡 Install with: sudo apt install aria2 zstd jq"exit 1fidoneecho "✅ All dependencies ready"# Discover snapshots via JSON APIecho "🔍 Discovering latest snapshots..."METADATA=$(curl -s "$COINSSPOR_BASE/coinsspor-info.json")CONSENSUS_FILE=$(echo "$METADATA" | jq -r '.snapshots.consensus')EXECUTION_FILE=$(echo "$METADATA" | jq -r '.snapshots.execution')BLOCK_HEIGHT=$(echo "$METADATA" | jq -r '.block_height')if [ "$CONSENSUS_FILE" = "null" ] || [ "$EXECUTION_FILE" = "null" ]; thenecho "❌ Could not discover snapshot files"exit 1fiecho "📊 Snapshot Information:"echo " Block Height: $BLOCK_HEIGHT"echo " Consensus: $CONSENSUS_FILE"echo " Execution: $EXECUTION_FILE"echo " Detected RPC Port: $STORY_PORT"# Confirmationread -p "🚀 Continue with download? (y/N): " -n 1 -rechoif [[ ! $REPLY =~ ^[Yy]$ ]]; thenecho "Download cancelled"exit 0fi# Prepare environmentmkdir -p "$TEMP_DIR"echo "🛑 Stopping services..."sudo systemctl stop story story-gethecho "💾 Backing up validator state..."if [[ -f "$STORY_DATA/story/data/priv_validator_state.json" ]]; thencp "$STORY_DATA/story/data/priv_validator_state.json" "$TEMP_DIR/validator_backup.json"echo "✅ Validator state backed up"fiecho "🧹 Cleaning target directories..."rm -rf "$STORY_DATA/story/data"rm -rf "$STORY_DATA/geth/aeneid/geth/chaindata"mkdir -p "$STORY_DATA/geth/aeneid/geth"echo ""echo "📥 Downloading with optimized aria2c settings..."# SERVER OPTIMIZED aria2c configuration - 3x Faster VersionARIA2C_OPTIONS=(--max-connection-per-server=12--split=12--min-split-size=15M--max-concurrent-downloads=2--disk-cache=64M--file-allocation=falloc--continue=true--max-tries=5--retry-wait=2--timeout=90--connect-timeout=20--lowest-speed-limit=400K--user-agent="Coinsspor-Client/3.0-Fast")# Download consensus with server-optimized aria2cecho "🔹 Downloading consensus snapshot..."aria2c "${ARIA2C_OPTIONS[@]}" --dir="$TEMP_DIR" --out="$CONSENSUS_FILE" "$COINSSPOR_BASE/$CONSENSUS_FILE"# Download execution with server-optimized aria2cecho "🔸 Downloading execution snapshot..."aria2c "${ARIA2C_OPTIONS[@]}" --dir="$TEMP_DIR" --out="$EXECUTION_FILE" "$COINSSPOR_BASE/$EXECUTION_FILE"echo ""echo "📂 Extracting with ZSTD compression..."# Extract consensusecho "🔹 Extracting consensus snapshot..."if ! zstd -d --stdout "$TEMP_DIR/$CONSENSUS_FILE" | tar -xf - -C "$STORY_DATA/story"; thenecho "❌ Error extracting consensus snapshot"exit 1fi# Extract executionecho "🔸 Extracting execution snapshot..."if ! zstd -d --stdout "$TEMP_DIR/$EXECUTION_FILE" | tar -xf - -C "$STORY_DATA/geth/aeneid/geth"; thenecho "❌ Error extracting execution snapshot"exit 1fiecho "🔄 Restoring validator state..."if [[ -f "$TEMP_DIR/validator_backup.json" ]]; thencp "$TEMP_DIR/validator_backup.json" "$STORY_DATA/story/data/priv_validator_state.json"echo "✅ Validator state restored"fiecho "🚀 Starting services..."sudo systemctl start story-gethsleep 10sudo systemctl start storyecho "🧹 Cleaning up temporary files..."rm -rf "$TEMP_DIR"echo ""echo "✅ Coinsspor snapshot download completed successfully!"echo "📊 Monitor sync with: sudo journalctl -u story -u story-geth -f"# Enhanced final status with reliable port detectionecho ""echo "🎯 Final Status Check:"sleep 5# Verify RPC connectivity and get statusif timeout 5 curl -s "$LOCAL_RPC/status" >/dev/null 2>&1; thenLOCAL_HEIGHT=$(curl -s "$LOCAL_RPC/status" 2>/dev/null | jq -r '.result.sync_info.latest_block_height' 2>/dev/null || echo "Unknown")CATCHING_UP=$(curl -s "$LOCAL_RPC/status" 2>/dev/null | jq -r '.result.sync_info.catching_up' 2>/dev/null || echo "unknown")echo "📈 Node Status:"echo " • RPC Port: $STORY_PORT ✅"echo " • Current Height: $LOCAL_HEIGHT"echo " • Target Height: $BLOCK_HEIGHT"echo " • Catching Up: $CATCHING_UP"if [[ "$LOCAL_HEIGHT" =~ ^[0-9]+$ ]] && [[ "$BLOCK_HEIGHT" =~ ^[0-9]+$ ]]; thenblocks_behind=$((BLOCK_HEIGHT - LOCAL_HEIGHT))if [[ $blocks_behind -lt 100 ]]; thenecho " • Status: 🎉 Nearly synced! ($blocks_behind blocks behind)"elseecho " • Status: 🔄 Syncing... ($blocks_behind blocks behind)"fifielseecho "⚠️ Could not connect to RPC on port $STORY_PORT"echo " Node may still be starting up. Check with:"echo " sudo journalctl -u story -u story-geth -f"fiecho ""echo "🌟 Snapshot installation completed! Happy validating! 🚀"