Files
zeekayandHanzo AI 3e94752529 a validator that falls behind syncs, and does not need permission to
Five marker files decided whether a node was allowed to work. .allow-bootstrap
turned skip-bootstrap off and wrote the state-sync config; .bootstrap-from
narrowed the beacon set to ordinals an operator picked; .wipe-state discarded
local chain state; two one-shot wipe sentinels had already run everywhere. A
node without the right file held a stale height forever — the zoo script says so
in its own comment, that a validator which falls behind can never return.

None of them describes a choice. A node that is behind catches up; that is the
only correct behaviour, so there is nothing to opt into. skip-bootstrap is gone
from every fleet, along with the marker that existed to undo it, the background
loop that watched the fleet frontier so it could rename that marker to .done,
and the height that loop compared against.

State sync needs no line either: it is on by default now, bounded by its own
minimum-gap threshold, so a chain does not need a per-chain config file it may
not have to be able to rejoin.

The prose went with them. A startup script is not where a fleet keeps its
incident history.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-28 12:41:27 -07:00

11 lines
2.4 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: zood-mv-startup
namespace: zoo-mainnet
labels:
app: zood-mv
data:
init.sh: "#!/bin/sh\n set -e\n IDX=\"${HOSTNAME##*-}\"\n mkdir -p /data/staking /data/plugins\n cp /luxd/build/plugins/* /data/plugins/ 2>/dev/null || true\n cp \"/staking-keys/staker-${IDX}.crt\" /data/staking/staker.crt\n cp \"/staking-keys/staker-${IDX}.key\" /data/staking/staker.key\n cp \"/staking-keys/signer-${IDX}.key\" /data/staking/signer.key\n\n chmod 600 /data/staking/staker.key /data/staking/signer.key\n chown -R 1000:1000 /data\n echo \"init-setup-done ordinal=$IDX\"\n"
startup.sh: "#!/bin/sh\n set -e\n IDX=\"${HOSTNAME##*-}\"\n echo \"=== zood boot: ordinal=$IDX net=200200 multi-validator N=5 sybil-protection ON ===\"\n # staking identity + plugins + perms are prepared by the root initContainer.\n # peer discovery: all other validators via the headless mv service DNS\n DNS=\"zood-mv.zoo-mainnet.svc.cluster.local\"\n BOOT=\"\"; j=0\n while [ \"$j\" -lt 5 ]; do\n [ \"$j\" != \"$IDX\" ] && BOOT=\"${BOOT:+$BOOT,}zood-mv-${j}.${DNS}:9631\"\n j=$((j+1))\n done\n PUBLIC_IP=\"$(hostname -i | awk '{print $1}')\"\n # A validator that falls behind syncs from its peers. Not a mode, not an\n # opt-in: a node that does not sync holds a stale height forever and the\n # fleet quietly loses the margin it thought it had.\n echo \"[boot] idx=$IDX ip=$PUBLIC_IP bootstrap-nodes=$BOOT\"\n exec /luxd/build/luxd \\\n --network-id=200200 --genesis-file=/genesis/genesis.json \\\n --upgrade-file=/genesis/upgrade.json \\\n --data-dir=/data --db-type=zapdb --plugin-dir=/data/plugins \\\n --staking-tls-cert-file=/data/staking/staker.crt \\\n --staking-tls-key-file=/data/staking/staker.key \\\n --staking-signer-key-file=/data/staking/signer.key \\\n --http-host=0.0.0.0 --http-port=9630 --http-allowed-hosts=\"*\" --staking-port=9631 \\\n --sybil-protection-enabled=true \\\n --consensus-sample-size=5 --consensus-quorum-size=4 \\\n --consensus-preference-quorum-size=4 --consensus-confidence-quorum-size=4 \\\n --network-require-validator-to-connect=true --network-allow-private-ips=true --network-compression-type=zstd \\\n --bootstrap-nodes=\"$BOOT\" --track-all-chains=true \\\n --public-ip=\"$PUBLIC_IP\" --api-admin-enabled=true --api-metrics-enabled=true --index-enabled=true --log-level=info\n"