diff --git a/ci/testnet-deploy.sh b/ci/testnet-deploy.sh index 355af6acd5..ad69c3cdf1 100755 --- a/ci/testnet-deploy.sh +++ b/ci/testnet-deploy.sh @@ -24,7 +24,9 @@ blockstreamer=false deployUpdateManifest=true fetchLogs=true maybeHashesPerTick= -maybeStakeNodesInGenesisBlock= +maybeDisableAirdrops= +maybeInternalNodesStakeLamports= +maybeInternalNodesLamports= maybeExternalPrimordialAccountsFile= maybeLamports= maybeLetsEncrypt= @@ -68,8 +70,12 @@ Deploys a CD testnet -s - Skip start. Nodes will still be created or configured, but network software will not be started. -S - Stop network software without tearing down nodes. -f - Discard validator nodes that didn't bootup successfully - --stake-internal-nodes NUM_LAMPORTS - - Amount to stake internal nodes. If set, airdrops are disabled. + --no-airdrop + - If set, disables airdrops. Nodes must be funded in genesis block when airdrops are disabled. + --internal-nodes-stake-lamports NUM_LAMPORTS + - Amount to stake internal nodes. + --internal-nodes-lamports NUM_LAMPORTS + - Amount to fund internal nodes in genesis block --external-accounts-file FILE_PATH - Path to external Primordial Accounts file, if it exists. --hashes-per-tick NUM_HASHES|sleep|auto @@ -104,8 +110,14 @@ while [[ -n $1 ]]; do elif [[ $1 = --lamports ]]; then maybeLamports="$1 $2" shift 2 - elif [[ $1 = --stake-internal-nodes ]]; then - maybeStakeNodesInGenesisBlock="$1 $2" + elif [[ $1 = --no-airdrop ]]; then + maybeDisableAirdrops="$1" + shift 1 + elif [[ $1 = --internal-nodes-stake-lamports ]]; then + maybeInternalNodesStakeLamports="$1 $2" + shift 2 + elif [[ $1 = --internal-nodes-lamports ]]; then + maybeInternalNodesLamports="$1 $2" shift 2 elif [[ $1 = --external-accounts-file ]]; then maybeExternalPrimordialAccountsFile="$1 $2" @@ -389,9 +401,17 @@ if ! $skipStart; then args+=(--deploy-update windows) fi - if [[ -n $maybeStakeNodesInGenesisBlock ]]; then - # shellcheck disable=SC2206 # Do not want to quote $maybeStakeNodesInGenesisBlock - args+=($maybeStakeNodesInGenesisBlock) + if [[ -n $maybeDisableAirdrops ]]; then + # shellcheck disable=SC2206 + args+=($maybeDisableAirdrops) + fi + if [[ -n $maybeInternalNodesStakeLamports ]]; then + # shellcheck disable=SC2206 # Do not want to quote $maybeInternalNodesStakeLamports + args+=($maybeInternalNodesStakeLamports) + fi + if [[ -n $maybeInternalNodesLamports ]]; then + # shellcheck disable=SC2206 # Do not want to quote $maybeInternalNodesLamports + args+=($maybeInternalNodesLamports) fi if [[ -n $maybeExternalPrimordialAccountsFile ]]; then # shellcheck disable=SC2206 # Do not want to quote $maybeExternalPrimordialAccountsFile diff --git a/ci/testnet-manager.sh b/ci/testnet-manager.sh index 629b8b62a0..a1498f890c 100755 --- a/ci/testnet-manager.sh +++ b/ci/testnet-manager.sh @@ -500,12 +500,30 @@ deploy() { maybeHashesPerTick="--hashes-per-tick ${HASHES_PER_TICK}" fi - if [[ -z $STAKE_INTERNAL_NODES ]]; then - maybeStakeInternalNodes="--stake-internal-nodes 1000000000000" - elif [[ $STAKE_INTERNAL_NODES == skip ]]; then - maybeStakeInternalNodes="" + if [[ -z $DISABLE_AIRDROPS ]]; then + DISABLE_AIRDROPS="true" + fi + + if [[ $DISABLE_AIRDROPS == true ]] ; then + maybeDisableAirdrops="--no-airdrop" else - maybeStakeInternalNodes="--stake-internal-nodes ${STAKE_INTERNAL_NODES}" + maybeDisableAirdrops="" + fi + + if [[ -z $INTERNAL_NODES_STAKE_LAMPORTS ]]; then + maybeInternalNodesStakeLamports="--internal-nodes-stake-lamports 1000000000000" + elif [[ $INTERNAL_NODES_STAKE_LAMPORTS == skip ]]; then + maybeInternalNodesStakeLamports="" + else + maybeInternalNodesStakeLamports="--internal-nodes-stake-lamports ${INTERNAL_NODES_STAKE_LAMPORTS}" + fi + + if [[ -z $INTERNAL_NODES_LAMPORTS ]]; then + maybeInternalNodesLamports="--internal-nodes-lamports 2000000000000" + elif [[ $INTERNAL_NODES_LAMPORTS == skip ]]; then + maybeInternalNodesLamports="" + else + maybeInternalNodesLamports="--internal-nodes-lamports ${INTERNAL_NODES_LAMPORTS}" fi EXTERNAL_ACCOUNTS_FILE=/tmp/validator.yml @@ -557,7 +575,9 @@ deploy() { ${skipStart:+-s} \ ${maybeStop:+-S} \ ${maybeDelete:+-D} \ - ${maybeStakeInternalNodes} \ + ${maybeDisableAirdrops} \ + ${maybeInternalNodesStakeLamports} \ + ${maybeInternalNodesLamports} \ ${maybeExternalAccountsFile} \ ${maybeLamports} \ ${maybeAdditionalDisk} \ diff --git a/multinode-demo/fullnode.sh b/multinode-demo/fullnode.sh index b7f4cf3f6a..bdd9fc1c5a 100755 --- a/multinode-demo/fullnode.sh +++ b/multinode-demo/fullnode.sh @@ -27,6 +27,7 @@ Start a validator or a replicator --label LABEL - Append the given label to the configuration files, useful when running multiple fullnodes in the same workspace --stake LAMPORTS - Number of lamports to stake + --node-lamports LAMPORTS - Number of lamports this node has been funded from the genesis block --no-voting - start node without vote signer --rpc-port port - custom RPC port for this node --no-restart - do not restart the node if it exits @@ -217,6 +218,9 @@ while [[ -n $1 ]]; do elif [[ $1 = --stake ]]; then stake_lamports="$2" shift 2 + elif [[ $1 = --node-lamports ]]; then + node_lamports="$2" + shift 2 elif [[ $1 = --no-voting ]]; then args+=("$1") shift diff --git a/net/net.sh b/net/net.sh index ecc1296a61..8ec8c6fb2f 100755 --- a/net/net.sh +++ b/net/net.sh @@ -56,12 +56,16 @@ Operate a configured testnet --hashes-per-tick NUM_HASHES|sleep|auto - Override the default --hashes-per-tick for the cluster + --no-airdrop + - If set, disables airdrops. Nodes must be funded in genesis block when airdrops are disabled. --lamports NUM_LAMPORTS_TO_MINT - Override the default 100000000000000 lamports minted in genesis - --stake-internal-nodes NUM_LAMPORTS_PER_NODE - - Amount to stake internal nodes in genesis block. If set, airdrops are disabled. + --internal-nodes-stake-lamports NUM_LAMPORTS_PER_NODE + - Amount to stake internal nodes. + --internal-nodes-lamports NUM_LAMPORTS_PER_NODE + - Amount to fund internal nodes in genesis block. --external-accounts-file FILE_PATH - - A YML file with a list of account pubkeys and corresponding stakes for external nodes + - A YML file with a list of account pubkeys and corresponding lamport balances in genesis block for external nodes --no-snapshot - If set, disables booting validators from a snapshot --skip-ledger-verify @@ -108,9 +112,11 @@ genesisOptions= numFullnodesRequested= externalPrimordialAccountsFile= remoteExternalPrimordialAccountsFile= -stakeNodesInGenesisBlock= +internalNodesStakeLamports= +internalNodesLamports= maybeNoSnapshot="" maybeSkipLedgerVerify="" +maybeDisableAirdrops="" command=$1 [[ -n $command ]] || usage @@ -137,13 +143,19 @@ while [[ -n $1 ]]; do elif [[ $1 = --deploy-update ]]; then updatePlatforms="$updatePlatforms $2" shift 2 - elif [[ $1 = --stake-internal-nodes ]]; then - stakeNodesInGenesisBlock="$2" + elif [[ $1 = --internal-nodes-stake-lamports ]]; then + internalNodesStakeLamports="$2" + shift 2 + elif [[ $1 = --internal-nodes-lamports ]]; then + internalNodesLamports="$2" shift 2 elif [[ $1 = --external-accounts-file ]]; then externalPrimordialAccountsFile="$2" remoteExternalPrimordialAccountsFile=/tmp/external-primordial-accounts.yml shift 2 + elif [[ $1 = --no-airdrop ]]; then + maybeDisableAirdrops="$1" + shift 1 else usage "Unknown long option: $1" fi @@ -369,7 +381,9 @@ startBootstrapLeader() { $skipSetup \ $failOnValidatorBootupFailure \ \"$remoteExternalPrimordialAccountsFile\" \ - \"$stakeNodesInGenesisBlock\" \ + \"$maybeDisableAirdrops\" \ + \"$internalNodesStakeLamports\" \ + \"$internalNodesLamports\" \ $nodeIndex \ $numBenchTpsClients \"$benchTpsExtraArgs\" \ $numBenchExchangeClients \"$benchExchangeExtraArgs\" \ @@ -431,7 +445,9 @@ startNode() { $skipSetup \ $failOnValidatorBootupFailure \ \"$remoteExternalPrimordialAccountsFile\" \ - \"$stakeNodesInGenesisBlock\" \ + \"$maybeDisableAirdrops\" \ + \"$internalNodesStakeLamports\" \ + \"$internalNodesLamports\" \ $nodeIndex \ $numBenchTpsClients \"$benchTpsExtraArgs\" \ $numBenchExchangeClients \"$benchExchangeExtraArgs\" \ diff --git a/net/remote/remote-node.sh b/net/remote/remote-node.sh index 3f3dafa70e..ea8559fe03 100755 --- a/net/remote/remote-node.sh +++ b/net/remote/remote-node.sh @@ -12,14 +12,16 @@ RUST_LOG="$5" skipSetup="$6" failOnValidatorBootupFailure="$7" externalPrimordialAccountsFile="$8" -stakeNodesInGenesisBlock="$9" -nodeIndex="${10}" -numBenchTpsClients="${11}" -benchTpsExtraArgs="${12}" -numBenchExchangeClients="${13}" -benchExchangeExtraArgs="${14}" -genesisOptions="${15}" -extraNodeArgs="${16}" +maybeDisableAirdrops="$9" +internalNodesStakeLamports="${10}" +internalNodesLamports="${11}" +nodeIndex="${12}" +numBenchTpsClients="${13}" +benchTpsExtraArgs="${14}" +numBenchExchangeClients="${15}" +benchExchangeExtraArgs="${16}" +genesisOptions="${17}" +extraNodeArgs="${18}" set +x export RUST_LOG @@ -29,7 +31,7 @@ export RUST_LOG # trouble # # Ref: https://github.com/solana-labs/solana/issues/3798 -stake=424243 +stake=${internalNodesStakeLamports:=424243} missing() { echo "Error: $1 not specified" @@ -44,7 +46,7 @@ missing() { [[ -n $failOnValidatorBootupFailure ]] || missing failOnValidatorBootupFailure airdropsEnabled=true -if [[ -n $stakeNodesInGenesisBlock ]]; then +if [[ -n $maybeDisableAirdrops ]]; then airdropsEnabled=false fi cat > deployConfig <> ./solana-node-stakes/fullnode-stakes.yml + echo "${pubkey}: $internalNodesLamports" >> ./solana-node-balances/fullnode-balances.yml done fi @@ -144,9 +146,9 @@ local|tar) tail -n +2 -q ./solana-client-accounts/bench-exchange"$i".yml >> ./solana-client-accounts/client-accounts.yml echo "" >> ./solana-client-accounts/client-accounts.yml done - [[ -z $externalPrimordialAccountsFile ]] || cat "$externalPrimordialAccountsFile" >> ./solana-node-stakes/fullnode-stakes.yml - if [ -f ./solana-node-stakes/fullnode-stakes.yml ]; then - genesisOptions+=" --primordial-accounts-file ./solana-node-stakes/fullnode-stakes.yml" + [[ -z $externalPrimordialAccountsFile ]] || cat "$externalPrimordialAccountsFile" >> ./solana-node-balances/fullnode-balances.yml + if [ -f ./solana-node-balances/fullnode-balances.yml ]; then + genesisOptions+=" --primordial-accounts-file ./solana-node-balances/fullnode-balances.yml" fi if [ -f ./solana-client-accounts/client-accounts.yml ]; then genesisOptions+=" --primordial-keypairs-file ./solana-client-accounts/client-accounts.yml" @@ -154,12 +156,15 @@ local|tar) if [[ $skipSetup != true ]]; then args=( --bootstrap-leader-stake-lamports "$stake" - ) + ) + if [[ -n $internalNodesLamports ]]; then + args+=(--bootstrap-leader-lamports "$internalNodesLamports") + fi # shellcheck disable=SC2206 # Do not want to quote $genesisOptions args+=($genesisOptions) ./multinode-demo/setup.sh "${args[@]}" fi - if [[ -z $stakeNodesInGenesisBlock ]]; then + if [[ $airdropsEnabled = true ]]; then ./multinode-demo/drone.sh > drone.log 2>&1 & fi args=( @@ -167,7 +172,7 @@ local|tar) --gossip-port "$entrypointIp":8001 ) - if [[ -n $stakeNodesInGenesisBlock ]]; then + if [[ $airdropsEnabled != true ]]; then args+=(--no-airdrop) fi args+=(--init-complete-file "$initCompleteFile") @@ -179,7 +184,7 @@ local|tar) validator|blockstreamer) net/scripts/rsync-retry.sh -vPrc "$entrypointIp":~/.cargo/bin/ ~/.cargo/bin/ rm -f ~/solana/fullnode-identity.json - [[ -z $stakeNodesInGenesisBlock ]] || net/scripts/rsync-retry.sh -vPrc \ + [[ -z $internalNodesLamports ]] || net/scripts/rsync-retry.sh -vPrc \ "$entrypointIp":~/solana/solana-node-keys/"$nodeIndex" ~/solana/fullnode-identity.json if [[ -e /dev/nvidia0 && -x ~/.cargo/bin/solana-validator-cuda ]]; then @@ -202,13 +207,16 @@ local|tar) else args+=(--stake "$stake") args+=(--enable-rpc-exit) + if [[ -n $internalNodesLamports ]]; then + args+=(--node-lamports "$internalNodesLamports") + fi fi if [[ -f ~/solana/fullnode-identity.json ]]; then args+=(--identity ~/solana/fullnode-identity.json) fi - if [[ -n $stakeNodesInGenesisBlock ]]; then + if [[ $airdropsEnabled != true ]]; then args+=(--no-airdrop) fi @@ -223,7 +231,7 @@ local|tar) # a static IP/DNS name for hosting the blockexplorer web app, and is # a location that somebody would expect to be able to airdrop from scp "$entrypointIp":~/solana/config-local/mint-keypair.json config-local/ - if [[ -z $stakeNodesInGenesisBlock ]]; then + if [[ $airdropsEnabled = true ]]; then ./multinode-demo/drone.sh > drone.log 2>&1 & fi @@ -262,10 +270,14 @@ local|tar) "$entrypointIp":~/solana "$entrypointIp:8001" ) - if [[ -n $stakeNodesInGenesisBlock ]]; then + if [[ $airdropsEnabled != true ]]; then args+=(--no-airdrop) fi + if [[ -n $internalNodesLamports ]] ; then + args+=(--node-lamports "$internalNodesLamports") + fi + if [[ $skipSetup != true ]]; then ./multinode-demo/clear-config.sh fi