aboutsummaryrefslogtreecommitdiff
path: root/start-monzerod.sh
blob: 6b3ac8c2fe2a2b17182a93d8404514f2b86581f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env bash
set -euo pipefail

PROJECT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
DAEMON_BIN="${MONZERO_DAEMON_BIN:-$PROJECT_DIR/build/bin/monzerod}"
DATA_DIR="${MONZERO_DATA_DIR:-$HOME/.monzero-auto-test}"
P2P_PORT="${MONZERO_P2P_PORT:-16174}"
RPC_PORT="${MONZERO_RPC_PORT:-16175}"
ZMQ_PORT="${MONZERO_ZMQ_PORT:-16176}"

if [[ ! -x "$DAEMON_BIN" ]]; then
  printf 'Error: daemon executable not found: %s\n' "$DAEMON_BIN" >&2
  printf 'Build monzerod first, or set MONZERO_DAEMON_BIN.\n' >&2
  exit 1
fi

daemon_ready() {
  curl --silent --fail --max-time 2 \
    --header 'Content-Type: application/json' \
    --data '{}' \
    "http://127.0.0.1:$RPC_PORT/get_info" >/dev/null 2>&1
}

if daemon_ready; then
  printf 'Monzero daemon is already running at 127.0.0.1:%s.\n' "$RPC_PORT"
  exit 0
fi

if command -v ss >/dev/null && ss -ltn | awk '{print $4}' | grep -Eq "(^|:)$RPC_PORT$"; then
  printf 'Error: port %s is occupied, but it is not responding as a Monzero daemon.\n' "$RPC_PORT" >&2
  exit 1
fi

mkdir -p "$DATA_DIR"

printf 'Starting Monzero daemon...\n'
printf '  Data: %s\n  P2P: %s\n  RPC: %s\n  ZMQ: %s\n' "$DATA_DIR" "$P2P_PORT" "$RPC_PORT" "$ZMQ_PORT"

"$DAEMON_BIN" \
  --detach \
  --data-dir "$DATA_DIR" \
  --p2p-bind-port "$P2P_PORT" \
  --rpc-bind-port "$RPC_PORT" \
  --zmq-rpc-bind-port "$ZMQ_PORT" \
  --add-priority-node 82.165.112.237:6174 \
  --no-igd

for _ in {1..30}; do
  if daemon_ready; then
    info="$(curl --silent --max-time 2 --header 'Content-Type: application/json' --data '{}' "http://127.0.0.1:$RPC_PORT/get_info")"
    python3 - "$info" <<'PY'
import json, sys
data = json.loads(sys.argv[1])
print(f"Daemon ready: height={data.get('height', '?')} synchronized={str(data.get('synchronized', False)).lower()}")
PY
    printf 'Log: %s/monzero.log\n' "$DATA_DIR"
    exit 0
  fi
  sleep 1
done

printf 'Error: daemon did not become ready within 30 seconds.\n' >&2
printf 'Check: %s/monzero.log\n' "$DATA_DIR" >&2
exit 1