135 lines
4.4 KiB
Bash
Executable File
135 lines
4.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# shellcheck disable=SC1090
|
|
# shellcheck disable=SC1091
|
|
source "$(dirname "$0")"/get_program_accounts.sh
|
|
|
|
usage() {
|
|
exitcode=0
|
|
if [[ -n "$1" ]]; then
|
|
exitcode=1
|
|
echo "Error: $*"
|
|
fi
|
|
cat <<EOF
|
|
usage: $0 [cluster_rpc_url]
|
|
|
|
Report total token distribution of a running cluster owned by the following programs:
|
|
STAKE
|
|
SYSTEM
|
|
VOTE
|
|
CONFIG
|
|
|
|
Required arguments:
|
|
cluster_rpc_url - RPC URL and port for a running Solana cluster (ex: http://34.83.146.144:8899)
|
|
EOF
|
|
exit $exitcode
|
|
}
|
|
|
|
function get_cluster_version {
|
|
clusterVersion="$(curl -s -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getVersion"}' "$url" | jq '.result | ."solana-core" ')"
|
|
echo Cluster software version: "$clusterVersion"
|
|
}
|
|
|
|
function get_token_capitalization {
|
|
totalSupplyLamports="$(curl -s -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getTotalSupply"}' "$url" | cut -d , -f 2 | cut -d : -f 2)"
|
|
totalSupplySol=$((totalSupplyLamports / LAMPORTS_PER_SOL))
|
|
|
|
printf "\n--- Token Capitalization ---\n"
|
|
printf "Total token capitalization %'d SOL\n" "$totalSupplySol"
|
|
printf "Total token capitalization %'d Lamports\n" "$totalSupplyLamports"
|
|
|
|
}
|
|
|
|
function get_program_account_balance_totals {
|
|
PROGRAM_NAME="$1"
|
|
|
|
# shellcheck disable=SC2002
|
|
accountBalancesLamports="$(cat "${PROGRAM_NAME}_account_data.json" | \
|
|
jq '.result | .[] | .account | .lamports')"
|
|
|
|
totalAccountBalancesLamports=0
|
|
numberOfAccounts=0
|
|
|
|
# shellcheck disable=SC2068
|
|
for account in ${accountBalancesLamports[@]}; do
|
|
totalAccountBalancesLamports=$((totalAccountBalancesLamports + account))
|
|
numberOfAccounts=$((numberOfAccounts + 1))
|
|
done
|
|
totalAccountBalancesSol=$((totalAccountBalancesLamports / LAMPORTS_PER_SOL))
|
|
|
|
printf "\n--- %s Account Balance Totals ---\n" "$PROGRAM_NAME"
|
|
printf "Number of %s Program accounts: %'.f\n" "$PROGRAM_NAME" "$numberOfAccounts"
|
|
printf "Total token balance in all %s accounts: %'d SOL\n" "$PROGRAM_NAME" "$totalAccountBalancesSol"
|
|
printf "Total token balance in all %s accounts: %'d Lamports\n" "$PROGRAM_NAME" "$totalAccountBalancesLamports"
|
|
|
|
case $PROGRAM_NAME in
|
|
SYSTEM)
|
|
systemAccountBalanceTotalSol=$totalAccountBalancesSol
|
|
systemAccountBalanceTotalLamports=$totalAccountBalancesLamports
|
|
;;
|
|
STAKE)
|
|
stakeAccountBalanceTotalSol=$totalAccountBalancesSol
|
|
stakeAccountBalanceTotalLamports=$totalAccountBalancesLamports
|
|
;;
|
|
VOTE)
|
|
voteAccountBalanceTotalSol=$totalAccountBalancesSol
|
|
voteAccountBalanceTotalLamports=$totalAccountBalancesLamports
|
|
;;
|
|
CONFIG)
|
|
configAccountBalanceTotalSol=$totalAccountBalancesSol
|
|
configAccountBalanceTotalLamports=$totalAccountBalancesLamports
|
|
;;
|
|
*)
|
|
echo "Unknown program: $PROGRAM_NAME"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function sum_account_balances_totals {
|
|
grandTotalAccountBalancesSol=$((systemAccountBalanceTotalSol + stakeAccountBalanceTotalSol + voteAccountBalanceTotalSol + configAccountBalanceTotalSol))
|
|
grandTotalAccountBalancesLamports=$((systemAccountBalanceTotalLamports + stakeAccountBalanceTotalLamports + voteAccountBalanceTotalLamports + configAccountBalanceTotalLamports))
|
|
|
|
printf "\n--- Total Token Distribution in all Account Balances ---\n"
|
|
printf "Total SOL in all Account Balances: %'d\n" "$grandTotalAccountBalancesSol"
|
|
printf "Total Lamports in all Account Balances: %'d\n" "$grandTotalAccountBalancesLamports"
|
|
}
|
|
|
|
url=$1
|
|
[[ -n $url ]] || usage "Missing required RPC URL"
|
|
shift
|
|
|
|
LAMPORTS_PER_SOL=1000000000 # 1 billion
|
|
|
|
stakeAccountBalanceTotalSol=
|
|
systemAccountBalanceTotalSol=
|
|
voteAccountBalanceTotalSol=
|
|
configAccountBalanceTotalSol=
|
|
|
|
stakeAccountBalanceTotalLamports=
|
|
systemAccountBalanceTotalLamports=
|
|
voteAccountBalanceTotalLamports=
|
|
configAccountBalanceTotalLamports=
|
|
|
|
echo "--- Querying RPC URL: $url ---"
|
|
get_cluster_version
|
|
|
|
get_program_accounts STAKE "$STAKE_PROGRAM_PUBKEY" "$url"
|
|
get_program_accounts SYSTEM "$SYSTEM_PROGRAM_PUBKEY" "$url"
|
|
get_program_accounts VOTE "$VOTE_PROGRAM_PUBKEY" "$url"
|
|
get_program_accounts CONFIG "$CONFIG_PROGRAM_PUBKEY" "$url"
|
|
|
|
write_program_account_data_csv STAKE
|
|
write_program_account_data_csv SYSTEM
|
|
write_program_account_data_csv VOTE
|
|
write_program_account_data_csv CONFIG
|
|
|
|
get_token_capitalization
|
|
|
|
get_program_account_balance_totals STAKE
|
|
get_program_account_balance_totals SYSTEM
|
|
get_program_account_balance_totals VOTE
|
|
get_program_account_balance_totals CONFIG
|
|
|
|
sum_account_balances_totals
|