From 02964fe182c5efc13e8eafcc9ceb34c6c43dfe94 Mon Sep 17 00:00:00 2001 From: Kerber0x Date: Wed, 20 Dec 2023 13:49:58 +0000 Subject: [PATCH] ci: script to extract vault info --- scripts/deployment/extract_pools.sh | 38 ++++++++++----- scripts/deployment/extract_vaults.sh | 73 ++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 11 deletions(-) create mode 100755 scripts/deployment/extract_vaults.sh diff --git a/scripts/deployment/extract_pools.sh b/scripts/deployment/extract_pools.sh index 5a185de3..afc81fb9 100755 --- a/scripts/deployment/extract_pools.sh +++ b/scripts/deployment/extract_pools.sh @@ -7,12 +7,11 @@ project_root_path=$(realpath "$0" | sed 's|\(.*\)/.*|\1|' | cd ../ | pwd) # Displays tool usage function display_usage() { - echo "WW Pool Deployer" - echo -e "\nUsage:./deploy_pool.sh [flags].\n" + echo "WW Pool Extractor" + echo -e "\nUsage:./extract_pools.sh [flags].\n" echo -e "Available flags:\n" echo -e " -h \thelp" - echo -e " -c \tThe chain where you want to deploy (juno|juno-testnet|terra|terra-testnet|... check chain_env.sh for the complete list of supported chains)" - echo -e " -p \tPool configuration file to get deployment info from." + echo -e " -c \tThe chain where you want to extract pools on (juno|juno-testnet|terra|terra-testnet|... check chain_env.sh for the complete list of supported chains)" } # Generates the label for the given asset pair @@ -21,6 +20,8 @@ function generate_label() { local processed_assets=() for asset in "${assets[@]}"; do + # reload the original chain env in case it gets overriden by the cw20:* asset case + init_chain_env $chain local processed_asset="$asset" # first of, check if the asset is an ibc token. An IBC token can be a native token on the chain it came from, or a token factory token @@ -35,6 +36,22 @@ function generate_label() { # if the denom trace has the pattern factory:*... this is the factory token model adopted by the kujira token factory elif [[ "$denom_trace_result" == factory:* ]]; then processed_asset="${denom_trace_result##*:}" + + # if the denom trace has the pattern cw20:*... + elif [[ "$denom_trace_result" == cw20:* ]]; then + denom_trace_result=${denom_trace_result#*:} + + # remove the cw20: prefix and load the chain env for the chain the token is on + if [[ $denom_trace_result =~ ([a-zA-Z]+)1 ]]; then + x=${BASH_REMATCH[1]} + init_chain_env $x + else + continue + fi + + local query='{"token_info":{}}' + local symbol=$($BINARY query wasm contract-state smart $denom_trace_result "$query" --node $RPC --output json | jq -r '.data.symbol') + processed_asset=$symbol else # else, just use the denom trace result. This can be the case of native tokens being transferred to another chain, i.e. uwhale on terra processed_asset="$denom_trace_result" fi @@ -115,7 +132,12 @@ function extract_pools() { done < <(echo "$pairs" | jq -c '.[]') # Combine all pool entries into a single JSON array and write to the output file - jq -n --argjson pools "$(echo "${pools[@]}" | jq -s '.')" '{pools: $pools}' >"$output_file" + jq -n \ + --argjson pools "$(echo "${pools[@]}" | jq -s '.')" \ + --arg pool_factory_addr "$pool_factory_addr" \ + --arg chain "$CHAIN_ID" \ + '{chain: $chain, pool_factory_addr: $pool_factory_addr, pools: $pools }' \ + >"$output_file" echo -e "\n**** Extracted pool data on $CHAIN_ID successfully ****\n" jq '.' $output_file @@ -134,12 +156,6 @@ while getopts $optstring arg; do chain=$OPTARG source $deployment_script_dir/deploy_env/chain_env.sh init_chain_env $OPTARG - if [[ "$chain" = "local" ]]; then - tx_delay=0.5 - else - tx_delay=8 - fi - extract_pools ;; h) diff --git a/scripts/deployment/extract_vaults.sh b/scripts/deployment/extract_vaults.sh new file mode 100755 index 00000000..4d7073bb --- /dev/null +++ b/scripts/deployment/extract_vaults.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +set -e + +# Import the deploy_liquidity_hub script +deployment_script_dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P) +project_root_path=$(realpath "$0" | sed 's|\(.*\)/.*|\1|' | cd ../ | pwd) + +# Displays tool usage +function display_usage() { + echo "WW Vault Extractor" + echo -e "\nUsage:./extract_vaults.sh [flags].\n" + echo -e "Available flags:\n" + echo -e " -h \thelp" + echo -e " -c \tThe chain where you want to extract vaults on (juno|juno-testnet|terra|terra-testnet|... check chain_env.sh for the complete list of supported chains)" +} + +function extract_vaults() { + mkdir -p $project_root_path/scripts/deployment/output + output_file=$project_root_path/scripts/deployment/output/"$CHAIN_ID"_vaults.json + deployment_file=$project_root_path/scripts/deployment/output/"$CHAIN_ID"_liquidity_hub_contracts.json + if [[ ! -f "$output_file" ]]; then + # create file to dump results into + echo '{"vaults": []}' | jq '.' >$output_file + fi + + vault_factory_addr=$(jq -r '.contracts[] | select (.wasm == "vault_factory.wasm") | .contract_address' $deployment_file) + local limit=30 + query='{"vaults":{"limit": '$limit'}}' + local vaults=$($BINARY query wasm contract-state smart $vault_factory_addr "$query" --node $RPC --output json | jq '.data.vaults') + vault_code_id=$(jq -r '.contracts[] | select (.wasm == "vault.wasm") | .code_id' $deployment_file) + lp_code_id=$(jq -r '.contracts[] | select (.wasm == "terraswap_token.wasm") | .code_id' $deployment_file) + + echo -e "\nExtracting vaults info...\n" + + jq '[.[] | {vault: .vault, asset_info: .asset_info}]' <<<"$vaults" >$output_file + jq --arg vault_factory_addr "$vault_factory_addr" \ + --arg chain "$CHAIN_ID" \ + '{chain: $chain, vault_factory_addr: $vault_factory_addr, vaults: [.[] | {vault: .vault, asset_info: .asset_info}]}' <<<$vaults >$output_file + + echo -e "\n**** Extracted vault data on $CHAIN_ID successfully ****\n" + jq '.' $output_file +} + +if [ -z $1 ]; then + display_usage + exit 0 +fi + +# get args +optstring=':c:h' +while getopts $optstring arg; do + case "$arg" in + c) + chain=$OPTARG + source $deployment_script_dir/deploy_env/chain_env.sh + init_chain_env $OPTARG + extract_vaults + ;; + h) + display_usage + exit 0 + ;; + :) + echo "Must supply an argument to -$OPTARG" >&2 + exit 1 + ;; + ?) + echo "Invalid option: -${OPTARG}" + display_usage + exit 2 + ;; + esac +done