validators/sol/api.sh

69 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -ex
#shellcheck source=/dev/null
#. ~/service-env.sh
PATH=/home/sol/.local/share/solana/install/active_release/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
# Parameters from https://docs.solana.com/clusters#mainnet-beta
ENTRYPOINT=mainnet-beta.solana.com:8001
TRUSTED_VALIDATOR_PUBKEYS=(7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2 GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S)
EXPECTED_BANK_HASH=Fi4p8z3AkfsuGXZzQ4TD28N8QDNSWC7ccqAqTs2GPdPu
EXPECTED_GENESIS_HASH=5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d
EXPECTED_SHRED_VERSION=13490
# Delete any zero-length snapshots that can cause validator startup to fail
find /data/sol/ledger/snapshot-* -size 0 -print -exec rm {} \; || true
identity_keypair=~/api-identity.json
if [[ -f $identity_keypair ]]; then
echo 'identity_keypair exists'
else
echo 'generating identity_keypair'
solana-keygen new -o $identity_keypair --no-passphrase
fi
identity_pubkey=$(solana-keygen pubkey $identity_keypair)
trusted_validators=()
for tv in "${TRUSTED_VALIDATOR_PUBKEYS[@]}"; do
[[ $tv = "$identity_pubkey" ]] || trusted_validators+=(--trusted-validator "$tv")
done
if [[ -n "$EXPECTED_BANK_HASH" ]]; then
maybe_expected_bank_hash="--expected-bank-hash $EXPECTED_BANK_HASH"
fi
args=(
--gossip-port 8001
--dynamic-port-range 8002-8012
--entrypoint "${ENTRYPOINT}"
--ledger /data/sol/ledger
--accounts /mnt/accounts
--identity "$identity_keypair"
--enable-rpc-transaction-history
--limit-ledger-size 50000000
--health-check-slot-distance 500
--cuda
--rpc-port 8899
--private-rpc
--expected-genesis-hash "$EXPECTED_GENESIS_HASH"
--expected-shred-version "$EXPECTED_SHRED_VERSION"
${maybe_expected_bank_hash}
"${trusted_validators[@]}"
--no-untrusted-rpc
--no-voting
--log -
--wal-recovery-mode skip_any_corrupted_record
)
# Note: can get into a bad state that requires actually fetching a new snapshot. One such error that indicates this:
# "...processing for bank 0 must succeed: FailedToLoadEntries(InvalidShredData(Custom(\"could not reconstruct entries\")))"
if [[ -d /data/sol/ledger ]]; then
args+=(--no-snapshot-fetch)
fi
exec solana-validator "${args[@]}"