my-homelab-configs/scripts/blockchain-devnet

74 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
STACK_DIR="${REPO_ROOT}/infra/blockchain-devnet"
RPC_URL="${BLOCKCHAIN_RPC_URL:-http://127.0.0.1:${BLOCKCHAIN_RPC_PORT:-8545}}"
usage() {
cat <<'EOF'
Usage: ./jeannie blockchain-devnet {status|up|down|logs|rpc}
status Show local devnet containers and RPC health.
up Start the local Anvil devnet.
down Stop the local Anvil devnet.
logs Follow devnet logs.
rpc Print the configured JSON-RPC endpoint.
EOF
}
rpc_call() {
local method="$1"
curl -fsS -X POST "$RPC_URL" \
-H 'content-type: application/json' \
--data "{\"jsonrpc\":\"2.0\",\"method\":\"${method}\",\"params\":[],\"id\":1}"
}
case "${1:-status}" in
status)
echo "Blockchain devnet stack: ${STACK_DIR}"
if command -v docker >/dev/null 2>&1; then
(cd "$STACK_DIR" && docker compose ps) || true
else
echo "docker compose unavailable; cannot inspect local devnet stack"
fi
echo
echo "RPC endpoint: ${RPC_URL}"
if rpc_call eth_chainId >/tmp/homelab-blockchain-chainid.json 2>/tmp/homelab-blockchain-rpc.err; then
printf 'chainId: '
cat /tmp/homelab-blockchain-chainid.json
echo
printf 'blockNumber: '
rpc_call eth_blockNumber || true
echo
else
echo "RPC unavailable"
sed 's/^/ /' /tmp/homelab-blockchain-rpc.err >&2 || true
fi
;;
up)
cd "$STACK_DIR"
docker compose up -d
;;
down)
cd "$STACK_DIR"
docker compose down
;;
logs)
cd "$STACK_DIR"
docker compose logs -f --tail=100
;;
rpc)
echo "$RPC_URL"
;;
-h|--help|help)
usage
;;
*)
usage >&2
exit 1
;;
esac