From a4039dd7b9c9054505be5eaed3c674c44f519f2c Mon Sep 17 00:00:00 2001 From: 0xPatrick Date: Thu, 31 Oct 2024 16:31:14 -0400 Subject: [PATCH] feat: noble customizations --- multichain-testing/config.fusdc.yaml | 160 ++++++++++ multichain-testing/scripts/install.sh | 6 +- .../scripts/noble/create-genesis.sh | 106 ++++++- .../scripts/noble/update-config.sh | 66 ---- .../scripts/noble/update-genesis.sh | 281 ++++++++++++++++-- 5 files changed, 518 insertions(+), 101 deletions(-) create mode 100644 multichain-testing/config.fusdc.yaml delete mode 100644 multichain-testing/scripts/noble/update-config.sh diff --git a/multichain-testing/config.fusdc.yaml b/multichain-testing/config.fusdc.yaml new file mode 100644 index 000000000000..db41df17e98d --- /dev/null +++ b/multichain-testing/config.fusdc.yaml @@ -0,0 +1,160 @@ +chains: + - id: agoriclocal + name: agoric + image: ghcr.io/agoric/agoric-sdk:dev + numValidators: 1 + env: + - name: DEBUG + value: SwingSet:vat,SwingSet:ls + genesis: + app_state: + staking: + params: + unbonding_time: '2m' + swingset: + params: + bootstrap_vat_config: '@agoric/vm-config/decentral-itest-orchestration-config.json' + scripts: + updateConfig: + file: scripts/update-config.sh + faucet: + enabled: false + ports: + rest: 1317 + rpc: 26657 + exposer: 38087 + grpc: 9090 + resources: + cpu: 1 + memory: 4Gi + - id: osmosislocal + name: osmosis + numValidators: 1 + genesis: + app_state: + staking: + params: + unbonding_time: '2m' + interchain_accounts: + host_genesis_state: + params: + host_enabled: true + allow_messages: ['*'] + interchainquery: + host_port: 'icqhost' + params: + host_enabled: true + allow_queries: + - /cosmos.bank.v1beta1.Query/Balance + - /cosmos.bank.v1beta1.Query/AllBalances + faucet: + enabled: true + type: starship + ports: + rest: 1315 + rpc: 26655 + grpc: 9093 + faucet: 8084 + resources: + cpu: 1 + memory: 1Gi + - id: noblelocal + name: custom + image: ghcr.io/cosmology-tech/starship/noble:v7.0.0 + scripts: + createGenesis: + file: scripts/noble/create-genesis.sh + updateGenesis: + file: scripts/noble/update-genesis.sh + home: /root/.noble + binary: nobled + prefix: noble + prettyName: Noble + coins: 100000000000000uusdc,100000000000000ustake + hdPath: m/44'/118'/0'/0/0 + coinType: 118 + denom: uusdc + assets: + - base: uusdc + description: 'USD Coin' + name: USDC + display: usdc + symbol: USDC + logo_URIs: + png: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/noble.png' + svg: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/noble.svg' + denom_units: + - denom: uusdc + exponent: 0 + - denom: usdc + exponent: 6 + coingecko_id: usdc + keywords: ['usdc'] + - base: ustake + description: 'Permissioned stake token for noble' + name: Stake + display: stake + symbol: STAKE + logo_URIs: + png: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/stake.png' + svg: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/stake.svg' + denom_units: + - denom: ustake + exponent: 0 + - denom: stake + exponent: 6 + coingecko_id: stake + keywords: ['stake'] + numValidators: 1 + genesis: + app_state: + staking: + params: + unbonding_time: '2m' + faucet: + enabled: true + type: starship + ports: + rest: 1314 + rpc: 26654 + grpc: 9092 + faucet: 8083 + resources: + cpu: 1 + memory: 1Gi + +relayers: + - name: osmosis-noble + type: hermes + replicas: 1 + chains: + - osmosislocal + - noblelocal + - name: agoric-osmosis + type: hermes + replicas: 1 + chains: + - agoriclocal + - osmosislocal + - name: agoric-noble + type: hermes + replicas: 1 + chains: + - agoriclocal + - noblelocal + config: + chains: + - id: agoriclocal + clock_drift: '360s' + trusting_period: '119s' + - id: noblelocal + clock_drift: '360s' + trusting_period: '119s' + +explorer: + enabled: false + +registry: + enabled: true + ports: + rest: 8081 diff --git a/multichain-testing/scripts/install.sh b/multichain-testing/scripts/install.sh index 13d0d2124feb..be25e079010e 100644 --- a/multichain-testing/scripts/install.sh +++ b/multichain-testing/scripts/install.sh @@ -67,19 +67,19 @@ function set_helm_args() { # Get the absolute path of the config file's directory datadir="$(cd "$(dirname -- "${CONFIGFILE}")" > /dev/null && pwd -P)" - + # Iterate through each chain for i in $(seq 0 $num_chains); do # Check if chain has scripts section scripts=$(yq -r ".chains[$i].scripts" ${CONFIGFILE}) if [[ "$scripts" == "null" ]]; then echo "No scripts found for chain $i" - continue # Skip to next chain instead of returning + continue # Skip to next chain instead of returning fi # Process each script for the current chain while IFS= read -r script; do - if [[ -n "$script" ]]; then # Only process non-empty script names + if [[ -n "$script" ]]; then # Only process non-empty script names script_file=$(yq -r ".chains[$i].scripts.$script.file" ${CONFIGFILE}) if [[ "$script_file" != "null" && -n "$script_file" ]]; then full_path="$datadir/$script_file" diff --git a/multichain-testing/scripts/noble/create-genesis.sh b/multichain-testing/scripts/noble/create-genesis.sh index 5d9c47f969c9..e8e1635c31c0 100644 --- a/multichain-testing/scripts/noble/create-genesis.sh +++ b/multichain-testing/scripts/noble/create-genesis.sh @@ -2,18 +2,62 @@ set -eux -DENOM="${DENOM:=uosmo}" -COINS="${COINS:=100000000000000000uosmo}" -CHAIN_ID="${CHAIN_ID:=osmosis}" -CHAIN_BIN="${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" +DENOM="${DENOM:=uusdc}" +COINS="${COINS:=100000000000000uusdc,100000000000000ustake}" +CHAIN_ID="${CHAIN_ID:=noblelocal}" +CHAIN_BIN="${CHAIN_BIN:=nobled}" +CHAIN_DIR="${CHAIN_DIR:=$HOME/.nobled}" KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" FAUCET_ENABLED="${FAUCET_ENABLED:=true}" NUM_VALIDATORS="${NUM_VALIDATORS:=1}" NUM_RELAYERS="${NUM_RELAYERS:=0}" -# check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty +# FiatTokenFactory roles +FIATTF_OWNER_KEY="fiattf_owner" +FIATTF_OWNER_MNEMONIC="gesture inject test cycle original hollow east ridge hen combine junk child bacon zero hope comfort vacuum milk pitch cage oppose unhappy lunar seat" + +FIATTF_MASTER_MINTER_KEY="fiattf_master_minter" +FIATTF_MASTER_MINTER_MNEMONIC="maximum display century economy unlock van census kite error heart snow filter midnight usage egg venture cash kick motor survey drastic edge muffin visual" + +FIATTF_MINTER_CONTROLLER_KEY="fiattf_minter_controller" +FIATTF_MINTER_CONTROLLER_MNEMONIC="keep liar demand upon shed essence tip undo eagle run people strong sense another salute double peasant egg royal hair report winner student diamond" + +FIATTF_MINTER_CONTROLLER2_KEY="fiattf_minter_controller2" +FIATTF_MINTER_CONTROLLER2_MNEMONIC="morning person bachelor illegal inner note learn problem cement river half sentence junk evidence mercy intact step nasty cotton elite real unveil business drum" + +FIATTF_MINTER_KEY="fiattf_minter" +FIATTF_MINTER_MNEMONIC="shed spike wish soda inside awake satoshi fish length whisper garlic sketch diary trumpet tree nose stove tobacco vague target announce brave alley priority" + +FIATTF_BLACKLISTER_KEY="fiattf_blacklister" +FIATTF_BLACKLISTER_MNEMONIC="planet reunion diet obscure curious swim suit kitchen fiscal creek jeans doll disorder color gown sweet have search repair exhaust clap assault dwarf design" + +FIATTF_PAUSER_KEY="fiattf_pauser" +FIATTF_PAUSER_MNEMONIC="guilt juice tone exhibit vault stairs mesh often expect face search quality paddle broccoli hundred another elder range horror beef session found loop mobile" + +# TokenFactory roles +TF_OWNER_KEY="tf_owner" +TF_OWNER_MNEMONIC="poverty pride inject trumpet candy quiz mixed junk cricket food include involve uphold gasp wish gas save occur genius shoe slight occur sudden cute" + +TF_MASTER_MINTER_KEY="tf_master_minter" +TF_MASTER_MINTER_MNEMONIC="belt cream catalog absurd hen toast ethics summer addict kick hood february spatial inmate cycle business double keep gravity private nose obvious phrase birth" + +TF_MINTER_CONTROLLER_KEY="tf_minter_controller" +TF_MINTER_CONTROLLER_MNEMONIC="spider silk peasant tobacco cactus range draft merry fashion trick modify scale width omit admit face off property enact upper drink obvious off used" + +TF_MINTER_CONTROLLER2_KEY="tf_minter_controller2" +TF_MINTER_CONTROLLER2_MNEMONIC="swear blossom hybrid write crash seven then ship brush market moral renew plug oval focus stairs brisk inner blue main barely broken burden fancy" + +TF_MINTER_KEY="tf_minter" +TF_MINTER_MNEMONIC="muffin clog joy echo hello size reform mention patient pumpkin enough inside danger talk wire home doctor bone ensure bind arrest dizzy magnet arrest" + +TF_BLACKLISTER_KEY="tf_blacklister" +TF_BLACKLISTER_MNEMONIC="gravity domain nothing stomach cousin print rally door bone ghost tuition opera witness paper color oak mistake toward current coach industry thought acid breeze" + +TF_PAUSER_KEY="tf_pauser" +TF_PAUSER_MNEMONIC="sniff tail rotate pelican snap spawn champion thought recycle body caution grain brass armed hawk goat champion sunset soul answer panel present open room" + +# check if the binary has genesis subcommand or not CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" @@ -38,11 +82,47 @@ echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".keys[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .keys[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" -if [[ $FAUCET_ENABLED == "false" && $NUM_RELAYERS -gt "-1" ]]; -then +# Add FiatTokenFactory role keys +echo "Adding FiatTokenFactory role keys..." +echo "$FIATTF_OWNER_MNEMONIC" | $CHAIN_BIN keys add $FIATTF_OWNER_KEY --recover --keyring-backend="test" +echo "$FIATTF_MASTER_MINTER_MNEMONIC" | $CHAIN_BIN keys add $FIATTF_MASTER_MINTER_KEY --recover --keyring-backend="test" +echo "$FIATTF_MINTER_CONTROLLER_MNEMONIC" | $CHAIN_BIN keys add $FIATTF_MINTER_CONTROLLER_KEY --recover --keyring-backend="test" +echo "$FIATTF_MINTER_CONTROLLER2_MNEMONIC" | $CHAIN_BIN keys add $FIATTF_MINTER_CONTROLLER2_KEY --recover --keyring-backend="test" +echo "$FIATTF_MINTER_MNEMONIC" | $CHAIN_BIN keys add $FIATTF_MINTER_KEY --recover --keyring-backend="test" +echo "$FIATTF_BLACKLISTER_MNEMONIC" | $CHAIN_BIN keys add $FIATTF_BLACKLISTER_KEY --recover --keyring-backend="test" +echo "$FIATTF_PAUSER_MNEMONIC" | $CHAIN_BIN keys add $FIATTF_PAUSER_KEY --recover --keyring-backend="test" + +# Add TokenFactory role keys +echo "Adding TokenFactory role keys..." +echo "$TF_OWNER_MNEMONIC" | $CHAIN_BIN keys add $TF_OWNER_KEY --recover --keyring-backend="test" +echo "$TF_MASTER_MINTER_MNEMONIC" | $CHAIN_BIN keys add $TF_MASTER_MINTER_KEY --recover --keyring-backend="test" +echo "$TF_MINTER_CONTROLLER_MNEMONIC" | $CHAIN_BIN keys add $TF_MINTER_CONTROLLER_KEY --recover --keyring-backend="test" +echo "$TF_MINTER_CONTROLLER2_MNEMONIC" | $CHAIN_BIN keys add $TF_MINTER_CONTROLLER2_KEY --recover --keyring-backend="test" +echo "$TF_MINTER_MNEMONIC" | $CHAIN_BIN keys add $TF_MINTER_KEY --recover --keyring-backend="test" +echo "$TF_BLACKLISTER_MNEMONIC" | $CHAIN_BIN keys add $TF_BLACKLISTER_KEY --recover --keyring-backend="test" +echo "$TF_PAUSER_MNEMONIC" | $CHAIN_BIN keys add $TF_PAUSER_KEY --recover --keyring-backend="test" + +# Add genesis accounts for FiatTokenFactory roles +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $FIATTF_OWNER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $FIATTF_MASTER_MINTER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $FIATTF_MINTER_CONTROLLER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $FIATTF_MINTER_CONTROLLER2_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $FIATTF_MINTER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $FIATTF_BLACKLISTER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $FIATTF_PAUSER_KEY --keyring-backend="test") $COINS --keyring-backend="test" + +# Add genesis accounts for TokenFactory roles +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $TF_OWNER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $TF_MASTER_MINTER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $TF_MINTER_CONTROLLER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $TF_MINTER_CONTROLLER2_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $TF_MINTER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $TF_BLACKLISTER_KEY --keyring-backend="test") $COINS --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $TF_PAUSER_KEY --keyring-backend="test") $COINS --keyring-backend="test" + +if [[ $FAUCET_ENABLED == "false" && $NUM_RELAYERS -gt "-1" ]]; then ## Add relayers keys and delegate tokens - for i in $(seq 0 $NUM_RELAYERS); - do + for i in $(seq 0 $NUM_RELAYERS); do # Add relayer key and delegate tokens RELAYER_KEY_NAME="$(jq -r ".relayers[$i].name" $KEYS_CONFIG)" echo "Adding relayer key.... $RELAYER_KEY_NAME" @@ -57,11 +137,9 @@ then fi ## if faucet not enabled then add validator and relayer with index as keys and into gentx -if [[ $FAUCET_ENABLED == "false" && $NUM_VALIDATORS -gt "1" ]]; -then +if [[ $FAUCET_ENABLED == "false" && $NUM_VALIDATORS -gt "1" ]]; then ## Add validators key and delegate tokens - for i in $(seq 0 $NUM_VALIDATORS); - do + for i in $(seq 0 $NUM_VALIDATORS); do VAL_KEY_NAME="$(jq -r '.validators[0].name' $KEYS_CONFIG)-$i" echo "Adding validator key.... $VAL_KEY_NAME" jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_KEY_NAME --index $i --recover --keyring-backend="test" diff --git a/multichain-testing/scripts/noble/update-config.sh b/multichain-testing/scripts/noble/update-config.sh deleted file mode 100644 index be190ba6a7ca..000000000000 --- a/multichain-testing/scripts/noble/update-config.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash - -CHAIN_ID="${CHAIN_ID:=osmosis}" -CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - -set -eux - -ls $CHAIN_DIR - - -echo "Update config.toml file" -sed -i -e 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:26657"#g' $CHAIN_DIR/config/config.toml -sed -i -e 's/index_all_keys = false/index_all_keys = true/g' $CHAIN_DIR/config/config.toml -sed -i -e 's/seeds = ".*"/seeds = ""/g' $CHAIN_DIR/config/config.toml -sed -i -e 's#cors_allowed_origins = \[\]#cors_allowed_origins = \["*"\]#g' $CHAIN_DIR/config/config.toml -sed -i -e 's/index_all_keys = false/index_all_keys = true/g' $CHAIN_DIR/config/config.toml - -echo "Update client.toml file" -sed -i -e 's#keyring-backend = "os"#keyring-backend = "test"#g' $CHAIN_DIR/config/client.toml -sed -i -e 's#output = "text"#output = "json"#g' $CHAIN_DIR/config/client.toml -sed -i -e "s#chain-id = \"\"#chain-id = \"$CHAIN_ID\"#g" $CHAIN_DIR/config/client.toml - - -echo "Update app.toml file" -sed -i -e "s#minimum-gas-prices = \".*\"#minimum-gas-prices = \"0$DENOM\"#g" $CHAIN_DIR/config/app.toml -sed -i -e "s#pruning = \".*\"#pruning = \"default\"#g" $CHAIN_DIR/config/app.toml -sed -i -e 's/enable-unsafe-cors = false/enable-unsafe-cors = true/g' $CHAIN_DIR/config/app.toml -sed -i -e 's/enabled-unsafe-cors = false/enabled-unsafe-cors = true/g' $CHAIN_DIR/config/app.toml -sed -i -e 's/enable = false/enable = true/g' $CHAIN_DIR/config/app.toml -sed -i -e 's/swagger = false/swagger = true/g' $CHAIN_DIR/config/app.toml -sed -i -e 's/enable = false/enable = true/g' $CHAIN_DIR/config/app.toml -sed -i -e 's/enabled = false/enabled = true/g' $CHAIN_DIR/config/app.toml - - -function get_next_line_number() { - local txt=$1 - local file=$2 - local line_number=$(grep -n "$txt" $file | cut -d: -f1 | head -1) - echo $((line_number + 1)) -} - -line_number=$(get_next_line_number "Address defines the API server to listen on." $CHAIN_DIR/config/app.toml) -sed -i -e "${line_number}s#address = \".*\"#address = \"tcp://0.0.0.0:1317\"#g" $CHAIN_DIR/config/app.toml - -line_number=$(get_next_line_number "Address defines the gRPC server address to bind to." $CHAIN_DIR/config/app.toml) -sed -i -e "${line_number}s#address = \".*\"#address = \"0.0.0.0:9090\"#g" $CHAIN_DIR/config/app.toml - -line_number=$(get_next_line_number "Address defines the gRPC-web server address to bind to." $CHAIN_DIR/config/app.toml) -sed -i -e "${line_number}s#address = \".*\"#address = \"0.0.0.0:9091\"#g" $CHAIN_DIR/config/app.toml - -if [ "$METRICS" == "true" ]; then - sed -i -e "s/prometheus = false/prometheus = true/g" $CHAIN_DIR/config/config.toml - - line_number=$(get_next_line_number "PrometheusRetentionTime, when positive, enables a Prometheus metrics sink." $CHAIN_DIR/config/app.toml) - sed -i -e "${line_number}s/prometheus-retention-time = 0/prometheus-retention-time = 3600/g" $CHAIN_DIR/config/app.toml -fi - -echo "Update consensus params in config.toml" -sed -i -e "s#timeout_propose = \".*\"#timeout_propose = \"$TIMEOUT_PROPOSE\"#g" $CHAIN_DIR/config/config.toml -sed -i -e "s#timeout_propose_delta = \".*\"#timeout_propose_delta = \"$TIMEOUT_PROPOSE_DELTA\"#g" $CHAIN_DIR/config/config.toml -sed -i -e "s#timeout_prevote = \".*\"#timeout_prevote = \"$TIMEOUT_PREVOTE\"#g" $CHAIN_DIR/config/config.toml -sed -i -e "s#timeout_prevote_delta = \".*\"#timeout_prevote_delta = \"$TIMEOUT_PREVOTE_DELTA\"#g" $CHAIN_DIR/config/config.toml -sed -i -e "s#timeout_precommit = \".*\"#timeout_precommit = \"$TIMEOUT_PRECOMMIT\"#g" $CHAIN_DIR/config/config.toml -sed -i -e "s#timeout_precommit_delta = \".*\"#timeout_precommit_delta = \"$TIMEOUT_PRECOMMIT_DELTA\"#g" $CHAIN_DIR/config/config.toml -sed -i -e "s#timeout_commit = \".*\"#timeout_commit = \"$TIMEOUT_COMMIT\"#g" $CHAIN_DIR/config/config.toml diff --git a/multichain-testing/scripts/noble/update-genesis.sh b/multichain-testing/scripts/noble/update-genesis.sh index 1bdd24676dc5..8ced47d63b3a 100644 --- a/multichain-testing/scripts/noble/update-genesis.sh +++ b/multichain-testing/scripts/noble/update-genesis.sh @@ -1,42 +1,287 @@ #!/bin/bash -DENOM="${DENOM:=uosmo}" -CHAIN_BIN="${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" +DENOM="${DENOM:=uusdc}" +CHAIN_BIN="${CHAIN_BIN:=nobled}" +CHAIN_DIR="${CHAIN_DIR:=$HOME/.nobled}" set -eux ls $CHAIN_DIR/config echo "Update genesis.json file with updated local params" + +# Get genesis account to use as primary owner +GENESIS_ADDR=$(jq -r '.app_state.auth.accounts[0].address' $CHAIN_DIR/config/genesis.json) +if [ -z "$GENESIS_ADDR" ]; then + echo "ERROR: No genesis account found" + exit 1 +fi + +# Get FiatTokenFactory role addresses +FIATTF_OWNER_ADDR=$($CHAIN_BIN keys show -a fiattf_owner --keyring-backend="test") +FIATTF_MASTER_MINTER_ADDR=$($CHAIN_BIN keys show -a fiattf_master_minter --keyring-backend="test") +FIATTF_MINTER_CONTROLLER_ADDR=$($CHAIN_BIN keys show -a fiattf_minter_controller --keyring-backend="test") +FIATTF_MINTER_CONTROLLER2_ADDR=$($CHAIN_BIN keys show -a fiattf_minter_controller2 --keyring-backend="test") +FIATTF_MINTER_ADDR=$($CHAIN_BIN keys show -a fiattf_minter --keyring-backend="test") +FIATTF_BLACKLISTER_ADDR=$($CHAIN_BIN keys show -a fiattf_blacklister --keyring-backend="test") +FIATTF_PAUSER_ADDR=$($CHAIN_BIN keys show -a fiattf_pauser --keyring-backend="test") + +# Get TokenFactory role addresses +TF_OWNER_ADDR=$($CHAIN_BIN keys show -a tf_owner --keyring-backend="test") +TF_MASTER_MINTER_ADDR=$($CHAIN_BIN keys show -a tf_master_minter --keyring-backend="test") +TF_MINTER_CONTROLLER_ADDR=$($CHAIN_BIN keys show -a tf_minter_controller --keyring-backend="test") +TF_MINTER_CONTROLLER2_ADDR=$($CHAIN_BIN keys show -a tf_minter_controller2 --keyring-backend="test") +TF_MINTER_ADDR=$($CHAIN_BIN keys show -a tf_minter --keyring-backend="test") +TF_BLACKLISTER_ADDR=$($CHAIN_BIN keys show -a tf_blacklister --keyring-backend="test") +TF_PAUSER_ADDR=$($CHAIN_BIN keys show -a tf_pauser --keyring-backend="test") + +echo "Configure fiat-tokenfactory module..." +jq --arg owner "$FIATTF_OWNER_ADDR" \ + --arg master_minter "$FIATTF_MASTER_MINTER_ADDR" \ + --arg minter_controller "$FIATTF_MINTER_CONTROLLER_ADDR" \ + --arg minter_controller2 "$FIATTF_MINTER_CONTROLLER2_ADDR" \ + --arg minter "$FIATTF_MINTER_ADDR" \ + --arg blacklister "$FIATTF_BLACKLISTER_ADDR" \ + --arg pauser "$FIATTF_PAUSER_ADDR" \ + --arg denom "$DENOM" \ + '.app_state."fiat-tokenfactory" = { + "mintingDenom": { + "denom": $denom + }, + "paused": { + "paused": false + }, + "blacklistedList": [], + "blacklister": { + "address": $blacklister + }, + "masterMinter": { + "address": $master_minter + }, + "minterControllerList": [ + { + "minter": $minter, + "controller": $minter_controller + }, + { + "minter": $minter, + "controller": $minter_controller2 + } + ], + "mintersList": [ + { + "address": $minter, + "allowance": { + "denom": $denom, + "amount": "100000000000000" + } + } + ], + "owner": { + "address": $owner + }, + "pauser": { + "address": $pauser + }, + "params": {} +}' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json && mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + +echo "Configure tokenfactory module..." +jq --arg owner "$TF_OWNER_ADDR" \ + --arg master_minter "$TF_MASTER_MINTER_ADDR" \ + --arg minter_controller "$TF_MINTER_CONTROLLER_ADDR" \ + --arg minter_controller2 "$TF_MINTER_CONTROLLER2_ADDR" \ + --arg minter "$TF_MINTER_ADDR" \ + --arg blacklister "$TF_BLACKLISTER_ADDR" \ + --arg pauser "$TF_PAUSER_ADDR" \ + '.app_state.tokenfactory = { + "mintingDenom": { + "denom": "ufrienzies" + }, + "paused": { + "paused": false + }, + "blacklistedList": [], + "blacklister": { + "address": $blacklister + }, + "masterMinter": { + "address": $master_minter + }, + "minterControllerList": [ + { + "minter": $minter, + "controller": $minter_controller + }, + { + "minter": $minter, + "controller": $minter_controller2 + } + ], + "mintersList": [ + { + "address": $minter, + "allowance": { + "denom": "ufrienzies", + "amount": "100000000000000" + } + } + ], + "owner": { + "address": $owner + }, + "pauser": { + "address": $pauser + }, + "params": {} +}' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json && mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + +# Add denomination metadata +echo "Add denomination metadata..." +USDC_METADATA='{ + "base": "uusdc", + "display": "usdc", + "name": "usdc", + "symbol": "USDC", + "denom_units": [ + { + "denom": "uusdc", + "aliases": ["microusdc"], + "exponent": "0" + }, + { + "denom": "usdc", + "exponent": "6" + } + ] +}' + +FRNZ_METADATA='{ + "base": "ufrienzies", + "display": "ufrienzies", + "name": "frienzies", + "symbol": "FRNZ", + "denom_units": [ + { + "denom": "ufrienzies", + "aliases": ["microfrienzies"], + "exponent": "0" + }, + { + "denom": "mfrienzies", + "aliases": ["millifrienzies"], + "exponent": "3" + }, + { + "denom": "frienzies", + "exponent": "6" + } + ] +}' + +jq --argjson usdc "$USDC_METADATA" --argjson frnz "$FRNZ_METADATA" \ + '.app_state.bank.denom_metadata += [$usdc, $frnz]' \ + $CHAIN_DIR/config/genesis.json > /tmp/genesis.json && mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + +# Configure parameter authority +echo "Configure parameter authority..." +jq --arg addr "$GENESIS_ADDR" ' + .app_state.params.params.authority = $addr | + .app_state.upgrade.params.authority = $addr +' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json && mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + +# Configure CCTP module +echo "Configure CCTP module..." +jq --arg addr "$GENESIS_ADDR" '.app_state.cctp = { + "owner": $addr, + "attester_manager": $addr, + "pauser": $addr, + "token_controller": $addr, + "attester_list": [], + "per_message_burn_limit_list": [ + { + "amount": "99999999", + "denom": "uusdc" + } + ], + "burning_and_minting_paused": { + "paused": false + }, + "sending_and_receiving_messages_paused": { + "paused": false + }, + "max_message_body_size": { + "amount": "8000" + }, + "next_available_nonce": { + "nonce": "0" + }, + "signature_threshold": { + "amount": "2" + }, + "token_pair_list": [], + "used_nonces_list": [], + "token_messenger_list": [] +}' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json && mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + +# Configure tariff module +echo "Configure tariff module..." +jq --arg addr "$GENESIS_ADDR" '.app_state.tariff.params = { + "share": "0.8", + "distribution_entities": [ + { + "address": $addr, + "share": "1.0" + } + ], + "transfer_fee_bps": "0", + "transfer_fee_max": "0", + "transfer_fee_denom": "uusdc" +}' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json && mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + sed -i -e "s/\"stake\"/\"$DENOM\"/g" $CHAIN_DIR/config/genesis.json sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" $CHAIN_DIR/config/genesis.json echo "Update max gas param" -jq -r '.consensus_params.block.max_gas |= "100000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json +jq -r '.consensus_params.block.max_gas |= "100000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json +mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json echo "Update staking unbonding time and slashing jail time" -jq -r '.app_state.staking.params.unbonding_time |= "300s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -jq -r '.app_state.slashing.params.downtime_jail_duration |= "60s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json +jq -r '.app_state.staking.params.unbonding_time |= "300s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json +mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json +jq -r '.app_state.slashing.params.downtime_jail_duration |= "60s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json +mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json # overrides for older sdk versions, before 0.47 function gov_overrides_sdk_v46() { - jq -r '.app_state.gov.deposit_params.max_deposit_period |= "30s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.deposit_params.min_deposit[0].amount |= "10"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.voting_params.voting_period |= "30s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.tally_params.quorum |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.tally_params.threshold |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.tally_params.veto_threshold |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.deposit_params.max_deposit_period |= "30s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.deposit_params.min_deposit[0].amount |= "10"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.voting_params.voting_period |= "30s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.tally_params.quorum |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.tally_params.threshold |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.tally_params.veto_threshold |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json } # overrides for newer sdk versions, post 0.47 function gov_overrides_sdk_v47() { - jq -r '.app_state.gov.params.max_deposit_period |= "30s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.params.min_deposit[0].amount |= "10"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.params.voting_period |= "30s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.params.quorum |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.params.threshold |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.gov.params.veto_threshold |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.params.max_deposit_period |= "30s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.params.min_deposit[0].amount |= "10"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.params.voting_period |= "30s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.params.quorum |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.params.threshold |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.gov.params.veto_threshold |= "0.000000000000000000"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json + mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json } if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then