#!/usr/bin/env bash # Lightweight bootstrap for red-team / evaluator use. # Starts only Anvil + deploys contracts. No ponder, no webapp, no txnbot. set -euo pipefail REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" ONCHAIN_DIR="$REPO_ROOT/onchain" RPC_URL="http://localhost:8545" CAST="$HOME/.foundry/bin/cast" FORGE="$HOME/.foundry/bin/forge" log() { echo "[bootstrap-light] $*"; } die() { log "ERROR: $*" >&2; exit 1; } # 1. Start Anvil (docker) log "Starting Anvil..." cd "$REPO_ROOT" sudo docker compose down -v 2>/dev/null || true sudo docker compose up -d anvil for i in $(seq 1 30); do $CAST chain-id --rpc-url "$RPC_URL" 2>/dev/null && break sleep 1 done $CAST chain-id --rpc-url "$RPC_URL" >/dev/null 2>&1 || die "Anvil not responding" log "Anvil running" # 2. Clear ERC-4337 code from well-known addresses (fork safety) DEPLOYER=$($CAST wallet address --mnemonic "test test test test test test test test test test test junk" 2>/dev/null) log "Clearing code from deployer ($DEPLOYER) + feeDest" $CAST rpc --rpc-url "$RPC_URL" anvil_setCode "$DEPLOYER" "0x" 2>/dev/null || true $CAST rpc --rpc-url "$RPC_URL" anvil_setCode "0x8A9145E1Ea4C4d7FB08cF1011c8ac1F0e10F9383" "0x" 2>/dev/null || true # 3. Deploy contracts — capture output for addresses log "Deploying contracts..." cd "$ONCHAIN_DIR" # Fix ownership of forge artifacts (docker creates root-owned files) sudo chown -R "$(id -u):$(id -g)" cache out broadcast 2>/dev/null || true rm -f deployments-local.json # force fresh DEPLOY_OUT=$($FORGE script script/DeployLocal.sol --rpc-url "$RPC_URL" --broadcast 2>&1) echo "$DEPLOY_OUT" | grep -E "^\[|deployed|complete|Summary" || true # 4. Extract addresses from output and write deployments-local.json KRK=$(echo "$DEPLOY_OUT" | grep -oP 'Kraiken deployed: \K0x[a-fA-F0-9]+') STAKE=$(echo "$DEPLOY_OUT" | grep -oP 'Stake deployed: \K0x[a-fA-F0-9]+') OPT=$(echo "$DEPLOY_OUT" | grep -oP 'Optimizer deployed: \K0x[a-fA-F0-9]+') LM=$(echo "$DEPLOY_OUT" | grep -oP 'LiquidityManager deployed: \K0x[a-fA-F0-9]+') [[ -n "$LM" ]] || die "Could not extract LiquidityManager address from deploy output" cat > "$ONCHAIN_DIR/deployments-local.json" << EOF { "contracts": { "Kraiken": "$KRK", "Stake": "$STAKE", "LiquidityManager": "$LM", "OptimizerProxy": "$OPT" } } EOF # 5. Verify VWAP=$($CAST call --rpc-url "$RPC_URL" "$LM" "cumulativeVolume()(uint256)" 2>/dev/null || echo "0") log "LiquidityManager: $LM" log "cumulativeVolume: $VWAP" [[ "$VWAP" != "0" ]] && log "✅ Bootstrap complete — VWAP active" || log "⚠️ VWAP not bootstrapped"