Files
tri-pi/setup/bootstrap.sh
T
Krystie bdd28aa33d feat: add automatic blockchain bootstrap
Add blockchain bootstrap support to dramatically speed up initial sync:

New files:
- setup/bootstrap.sh: Downloads and extracts blockchain snapshot
  from http://194.233.88.206/triangles-bootstrap.tar.gz (~1.3GB)
- docs/BOOTSTRAP.md: Complete documentation on bootstrap process,
  time savings, security, and troubleshooting
- build/test-bootstrap.sh: Bootstrap functionality tests

Installer changes (setup/install.sh):
- Automatically downloads bootstrap before starting trianglesd
- Skips bootstrap if already applied (.bootstrapped marker)
- Allows opt-out with BOOTSTRAP=no environment variable
- Reports bootstrap status in installation summary

Benefits:
- Reduces initial sync from 2-5 days to 1-6 hours
- Downloads 1.3GB instead of syncing 3GB over days
- Still validates all blocks from bootstrap point forward
- Safe: maintains full consensus rules

Bootstrap server updated weekly (Sundays 4 AM) with fresh snapshots.
2026-03-28 18:27:41 -07:00

65 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Download and extract Triangles blockchain bootstrap
# This dramatically speeds up initial sync (hours instead of days)
BOOTSTRAP_URL="${BOOTSTRAP_URL:-http://194.233.88.206/triangles-bootstrap.tar.gz}"
DATA_DIR="${DATA_DIR:-/var/lib/triangles}"
TEMP_DIR="/tmp/triangles-bootstrap-$$"
log() { echo "[tri-pi:bootstrap] $*"; }
die() { echo "[tri-pi:bootstrap] ERROR: $*" >&2; exit 1; }
# Check if already bootstrapped
if [[ -f "$DATA_DIR/.bootstrapped" ]]; then
log "Bootstrap already applied. Skipping."
exit 0
fi
# Check if daemon is running
if pgrep -x trianglesd >/dev/null; then
die "trianglesd is running. Stop it first: systemctl stop trianglesd"
fi
log "Downloading bootstrap from $BOOTSTRAP_URL..."
log "This may take several minutes (~1.3GB download)..."
mkdir -p "$TEMP_DIR"
trap "rm -rf '$TEMP_DIR'" EXIT
# Download with progress
if ! curl -#fSL "$BOOTSTRAP_URL" -o "$TEMP_DIR/bootstrap.tar.gz"; then
die "Failed to download bootstrap file"
fi
log "Verifying download..."
DOWNLOAD_SIZE=$(stat -c%s "$TEMP_DIR/bootstrap.tar.gz")
if [[ $DOWNLOAD_SIZE -lt 100000000 ]]; then
die "Download too small ($DOWNLOAD_SIZE bytes), possibly corrupted"
fi
log "Extracting bootstrap to $DATA_DIR..."
mkdir -p "$DATA_DIR"
if ! tar -xzf "$TEMP_DIR/bootstrap.tar.gz" -C "$DATA_DIR" --strip-components=1; then
die "Failed to extract bootstrap"
fi
# Fix ownership (in case we're running as root)
if [[ -n "${SUDO_USER:-}" ]]; then
chown -R triangles:triangles "$DATA_DIR"
fi
# Mark as bootstrapped
touch "$DATA_DIR/.bootstrapped"
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > "$DATA_DIR/.bootstrap-date"
log ""
log "Bootstrap complete!"
log " Data directory: $DATA_DIR"
log " Bootstrap date: $(cat "$DATA_DIR/.bootstrap-date")"
log ""
log "You can now start trianglesd. It will sync only blocks since the bootstrap."
log " systemctl start trianglesd"