122 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
#
 | 
						|
# Run a minimal Solana cluster.  Ctrl-C to exit.
 | 
						|
#
 | 
						|
# Before running this script ensure standard Solana programs are available
 | 
						|
# in the PATH, or that `cargo build` ran successfully
 | 
						|
#
 | 
						|
set -e
 | 
						|
 | 
						|
# Prefer possible `cargo build` binaries over PATH binaries
 | 
						|
script_dir="$(readlink -f "$(dirname "$0")")"
 | 
						|
if [[ "$script_dir" =~ /scripts$ ]]; then
 | 
						|
  cd "$script_dir/.."
 | 
						|
else
 | 
						|
  cd "$script_dir"
 | 
						|
fi
 | 
						|
 | 
						|
 | 
						|
profile=debug
 | 
						|
if [[ -n $NDEBUG ]]; then
 | 
						|
  profile=release
 | 
						|
fi
 | 
						|
PATH=$PWD/target/$profile:$PATH
 | 
						|
 | 
						|
ok=true
 | 
						|
for program in solana-{faucet,genesis,keygen,validator}; do
 | 
						|
  $program -V || ok=false
 | 
						|
done
 | 
						|
$ok || {
 | 
						|
  echo
 | 
						|
  echo "Unable to locate required programs.  Try building them first with:"
 | 
						|
  echo
 | 
						|
  echo "  $ cargo build --all"
 | 
						|
  echo
 | 
						|
  exit 1
 | 
						|
}
 | 
						|
 | 
						|
export RUST_LOG=${RUST_LOG:-solana=info,solana_runtime::message_processor=debug} # if RUST_LOG is unset, default to info
 | 
						|
export RUST_BACKTRACE=1
 | 
						|
dataDir=$PWD/config/"$(basename "$0" .sh)"
 | 
						|
ledgerDir=$PWD/config/ledger
 | 
						|
 | 
						|
SOLANA_RUN_SH_CLUSTER_TYPE=${SOLANA_RUN_SH_CLUSTER_TYPE:-development}
 | 
						|
 | 
						|
set -x
 | 
						|
if ! solana address; then
 | 
						|
  echo Generating default keypair
 | 
						|
  solana-keygen new --no-passphrase
 | 
						|
fi
 | 
						|
validator_identity="$dataDir/validator-identity.json"
 | 
						|
if [[ -e $validator_identity ]]; then
 | 
						|
  echo "Use existing validator keypair"
 | 
						|
else
 | 
						|
  solana-keygen new --no-passphrase -so "$validator_identity"
 | 
						|
fi
 | 
						|
validator_vote_account="$dataDir/validator-vote-account.json"
 | 
						|
if [[ -e $validator_vote_account ]]; then
 | 
						|
  echo "Use existing validator vote account keypair"
 | 
						|
else
 | 
						|
  solana-keygen new --no-passphrase -so "$validator_vote_account"
 | 
						|
fi
 | 
						|
validator_stake_account="$dataDir/validator-stake-account.json"
 | 
						|
if [[ -e $validator_stake_account ]]; then
 | 
						|
  echo "Use existing validator stake account keypair"
 | 
						|
else
 | 
						|
  solana-keygen new --no-passphrase -so "$validator_stake_account"
 | 
						|
fi
 | 
						|
 | 
						|
if [[ -e "$ledgerDir"/genesis.bin || -e "$ledgerDir"/genesis.tar.bz2 ]]; then
 | 
						|
  echo "Use existing genesis"
 | 
						|
else
 | 
						|
  ./fetch-spl.sh
 | 
						|
  if [[ -r spl-genesis-args.sh ]]; then
 | 
						|
    SPL_GENESIS_ARGS=$(cat spl-genesis-args.sh)
 | 
						|
  fi
 | 
						|
 | 
						|
  # shellcheck disable=SC2086
 | 
						|
  solana-genesis \
 | 
						|
    --hashes-per-tick sleep \
 | 
						|
    --faucet-lamports 500000000000000000 \
 | 
						|
    --bootstrap-validator \
 | 
						|
      "$validator_identity" \
 | 
						|
      "$validator_vote_account" \
 | 
						|
      "$validator_stake_account" \
 | 
						|
    --ledger "$ledgerDir" \
 | 
						|
    --cluster-type "$SOLANA_RUN_SH_CLUSTER_TYPE" \
 | 
						|
    $SPL_GENESIS_ARGS \
 | 
						|
    $SOLANA_RUN_SH_GENESIS_ARGS
 | 
						|
fi
 | 
						|
 | 
						|
abort() {
 | 
						|
  set +e
 | 
						|
  kill "$faucet" "$validator"
 | 
						|
  wait "$validator"
 | 
						|
}
 | 
						|
trap abort INT TERM EXIT
 | 
						|
 | 
						|
solana-faucet &
 | 
						|
faucet=$!
 | 
						|
 | 
						|
args=(
 | 
						|
  --identity "$validator_identity"
 | 
						|
  --vote-account "$validator_vote_account"
 | 
						|
  --ledger "$ledgerDir"
 | 
						|
  --gossip-port 8001
 | 
						|
  --full-rpc-api
 | 
						|
  --rpc-port 8899
 | 
						|
  --rpc-faucet-address 127.0.0.1:9900
 | 
						|
  --log -
 | 
						|
  --enable-rpc-transaction-history
 | 
						|
  --enable-cpi-and-log-storage
 | 
						|
  --init-complete-file "$dataDir"/init-completed
 | 
						|
  --snapshot-compression none
 | 
						|
  --require-tower
 | 
						|
  --no-wait-for-vote-to-start-leader
 | 
						|
)
 | 
						|
# shellcheck disable=SC2086
 | 
						|
solana-validator "${args[@]}" $SOLANA_RUN_SH_VALIDATOR_ARGS &
 | 
						|
validator=$!
 | 
						|
 | 
						|
wait "$validator"
 |