74 lines
1.9 KiB
Bash
Executable File
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
|