diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/genesis-service.yaml index a5f8f1c37..c39ce4662 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: core-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/genesis-statefulset.yaml index a7025d296..a8ea13e73 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/genesis-statefulset.yaml @@ -43,17 +43,12 @@ spec: command: - bash - '-c' - - >- + - |- # Install cosmovisor - - go install - github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 - + go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 # Build genesis - - UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e - /scripts/build-chain.sh + UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh env: - name: CODE_REF value: https://github.com/persistenceOne/persistenceCore @@ -111,6 +106,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -122,47 +133,31 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '2' @@ -197,6 +192,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -309,7 +320,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -340,11 +351,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.persistenceCore name: node @@ -367,13 +378,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -396,20 +404,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -428,7 +430,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/setup-scripts-configmap.yaml index b53ee8476..1baa167a2 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: persistencecore starship.io/chain-id: core-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/validator-service.yaml index b0e93bc14..2d01cbdbf 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: core-1-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/validator-statefulset.yaml index 9bae55f93..86c3270b9 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/build-chain/persistencecore/validator-statefulset.yaml @@ -43,17 +43,12 @@ spec: command: - bash - '-c' - - >- + - |- # Install cosmovisor - - go install - github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 - + go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 # Build genesis - - UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e - /scripts/build-chain.sh + UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh env: - name: CODE_REF value: https://github.com/persistenceOne/persistenceCore @@ -104,22 +99,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." - echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/runner:latest imagePullPolicy: IfNotPresent @@ -140,6 +135,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: core-1-genesis - name: GENESIS_PORT @@ -157,46 +168,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -232,6 +226,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: core-1-genesis - name: GENESIS_PORT @@ -247,42 +257,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -364,32 +358,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -397,7 +378,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -410,7 +390,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -455,11 +435,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.persistenceCore name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/cometmock-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/cometmock-service.yaml new file mode 100644 index 000000000..3fd60bb45 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/cometmock-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-generator-test + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: rpc + port: 22331 + protocol: TCP + targetPort: 22331 + selector: + app.kubernetes.io/name: cosmoshub-4-cometmock diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/cometmock-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/cometmock-statefulset.yaml new file mode 100644 index 000000000..d326f1811 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/cometmock-statefulset.yaml @@ -0,0 +1,209 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-generator-test + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-cometmock + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/name: cosmoshub-4-cometmock + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/type: cometmock + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/rawname: cosmoshub-4-cometmock + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-wait + image: curlimages/curl + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-comet + image: ghcr.io/informalsystems/cometmock:v0.37.x + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + command: + - bash + - '-c' + - |- + mkdir -p /chain/genesis/config + mkdir -p /chain/genesis/data + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json + echo "Genesis file that we got....." + cat /chain/genesis/config/genesis.json + + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + + echo "copy cometmock binary to shared dir" + cp /usr/local/bin/cometmock /chain/cometmock + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + containers: + - name: comet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" + NODE_HOME_STR="/chain/genesis" + + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + readinessProbe: + httpGet: + path: /status + port: 22331 + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/genesis-service.yaml index 631f01d41..96709fcb4 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/genesis-statefulset.yaml index bfa208188..ba4c3fcca 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.3' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -196,17 +213,12 @@ spec: command: - bash - '-c' - - >- + - |- #!/bin/bash - set -euo pipefail - START_ARGS="" - - START_ARGS="--grpc-web.enable=false --transport=grpc - --with-tendermint=false --address tcp://0.0.0.0:26658" - + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" $CHAIN_BIN start $START_ARGS resources: @@ -224,7 +236,7 @@ spec: - mountPath: /scripts name: scripts - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -255,11 +267,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/setup-scripts-configmap.yaml index acc44e871..90541cc80 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cometmock/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/genesis-service.yaml index a5f8f1c37..c39ce4662 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: core-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/genesis-statefulset.yaml index a7025d296..a8ea13e73 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/genesis-statefulset.yaml @@ -43,17 +43,12 @@ spec: command: - bash - '-c' - - >- + - |- # Install cosmovisor - - go install - github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 - + go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 # Build genesis - - UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e - /scripts/build-chain.sh + UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh env: - name: CODE_REF value: https://github.com/persistenceOne/persistenceCore @@ -111,6 +106,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -122,47 +133,31 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '2' @@ -197,6 +192,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -309,7 +320,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -340,11 +351,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.persistenceCore name: node @@ -367,13 +378,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -396,20 +404,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -428,7 +430,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/setup-scripts-configmap.yaml index b53ee8476..1baa167a2 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: persistencecore starship.io/chain-id: core-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/validator-service.yaml index b0e93bc14..2d01cbdbf 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: core-1-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/validator-statefulset.yaml index 9bae55f93..86c3270b9 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-build/persistencecore/validator-statefulset.yaml @@ -43,17 +43,12 @@ spec: command: - bash - '-c' - - >- + - |- # Install cosmovisor - - go install - github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 - + go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 # Build genesis - - UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e - /scripts/build-chain.sh + UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh env: - name: CODE_REF value: https://github.com/persistenceOne/persistenceCore @@ -104,22 +99,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." - echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/runner:latest imagePullPolicy: IfNotPresent @@ -140,6 +135,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: core-1-genesis - name: GENESIS_PORT @@ -157,46 +168,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -232,6 +226,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: core-1-genesis - name: GENESIS_PORT @@ -247,42 +257,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -364,32 +358,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -397,7 +378,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -410,7 +390,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -455,11 +435,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.persistenceCore name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/cometmock-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/cometmock-service.yaml new file mode 100644 index 000000000..3fd60bb45 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/cometmock-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-generator-test + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: rpc + port: 22331 + protocol: TCP + targetPort: 22331 + selector: + app.kubernetes.io/name: cosmoshub-4-cometmock diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/cometmock-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/cometmock-statefulset.yaml new file mode 100644 index 000000000..d326f1811 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/cometmock-statefulset.yaml @@ -0,0 +1,209 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-generator-test + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-cometmock + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/name: cosmoshub-4-cometmock + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/type: cometmock + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/rawname: cosmoshub-4-cometmock + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-wait + image: curlimages/curl + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-comet + image: ghcr.io/informalsystems/cometmock:v0.37.x + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + command: + - bash + - '-c' + - |- + mkdir -p /chain/genesis/config + mkdir -p /chain/genesis/data + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json + echo "Genesis file that we got....." + cat /chain/genesis/config/genesis.json + + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + + echo "copy cometmock binary to shared dir" + cp /usr/local/bin/cometmock /chain/cometmock + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + containers: + - name: comet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" + NODE_HOME_STR="/chain/genesis" + + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + readinessProbe: + httpGet: + path: /status + port: 22331 + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/genesis-service.yaml index 631f01d41..96709fcb4 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/genesis-statefulset.yaml index bfa208188..ba4c3fcca 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.3' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -196,17 +213,12 @@ spec: command: - bash - '-c' - - >- + - |- #!/bin/bash - set -euo pipefail - START_ARGS="" - - START_ARGS="--grpc-web.enable=false --transport=grpc - --with-tendermint=false --address tcp://0.0.0.0:26658" - + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" $CHAIN_BIN start $START_ARGS resources: @@ -224,7 +236,7 @@ spec: - mountPath: /scripts name: scripts - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -255,11 +267,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/setup-scripts-configmap.yaml index acc44e871..90541cc80 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cometmock/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/genesis-service.yaml index 6065e5a39..d71081f2c 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/genesis-statefulset.yaml index 0849609af..1ff8b80b2 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -299,11 +316,9 @@ spec: command: - bash - '-c' - - >- + - |- export FAUCET_TOKENS=$(printf '%s\n' ${COINS//[[:digit:]]/}) - for coin in ${COINS//,/ } - do var="FAUCET_CREDIT_AMOUNT_$(printf '%s\n' ${coin//[[:digit:]]/} | tr '[:lower:]' '[:upper:]')" amt="${coin//[!0-9]/}" @@ -319,29 +334,19 @@ spec: export $var="$creditAmt" done - export FAUCET_PATH_PATTERN="${HD_PATH:0:$((${#HD_PATH}-1))}a" - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) echo "FAUCET_MNEMONIC: $FAUCET_MNEMONIC" - echo "FAUCET_PATH_PATTERN: $FAUCET_PATH_PATTERN" - export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10; done - - /app/packages/faucet/bin/cosmos-faucet-dist start - "http://localhost:26657" + /app/packages/faucet/bin/cosmos-faucet-dist start "http://localhost:26657" resources: limits: cpu: '0.2' @@ -357,7 +362,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-cosmjs/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/genesis-service.yaml index 631f01d41..96709fcb4 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/genesis-statefulset.yaml index 46d80e179..79813f2fd 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/setup-scripts-configmap.yaml index acc44e871..90541cc80 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/validator-service.yaml index 457a2bbb6..1dfdb35ed 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/validator-statefulset.yaml index 426a6f37b..fe1be1ddf 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "false" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/genesis-service.yaml index 6065e5a39..d71081f2c 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/genesis-statefulset.yaml index cad6c40d0..72ea71cee 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/validator-service.yaml index 4276c1126..90e926c9f 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/validator-statefulset.yaml index 8f58c8f76..734e8dac7 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-multi/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/genesis-service.yaml index 1b52515ba..e9a26a554 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/genesis-statefulset.yaml index 9f4102b5b..3fff42113 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,52 +84,32 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") - - - echo "Adding balance to - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo - --keyring-backend="test" + echo "Adding balance to osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo --keyring-backend="test" resources: limits: cpu: '0.5' @@ -148,6 +144,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -155,19 +167,13 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - - jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json - /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv - $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json - + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json bash -e /scripts/update-config.sh resources: @@ -264,7 +270,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -295,11 +301,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -322,13 +328,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -351,20 +354,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -383,7 +380,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/consistency-single/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/genesis-service.yaml index 1b52515ba..e9a26a554 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/genesis-statefulset.yaml index 9f4102b5b..3fff42113 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,52 +84,32 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") - - - echo "Adding balance to - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo - --keyring-backend="test" + echo "Adding balance to osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo --keyring-backend="test" resources: limits: cpu: '0.5' @@ -148,6 +144,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -155,19 +167,13 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - - jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json - /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv - $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json - + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json bash -e /scripts/update-config.sh resources: @@ -264,7 +270,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -295,11 +301,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -322,13 +328,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -351,20 +354,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -383,7 +380,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/content-validation/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/genesis-service.yaml index 6065e5a39..d71081f2c 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/genesis-statefulset.yaml index 0849609af..1ff8b80b2 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -299,11 +316,9 @@ spec: command: - bash - '-c' - - >- + - |- export FAUCET_TOKENS=$(printf '%s\n' ${COINS//[[:digit:]]/}) - for coin in ${COINS//,/ } - do var="FAUCET_CREDIT_AMOUNT_$(printf '%s\n' ${coin//[[:digit:]]/} | tr '[:lower:]' '[:upper:]')" amt="${coin//[!0-9]/}" @@ -319,29 +334,19 @@ spec: export $var="$creditAmt" done - export FAUCET_PATH_PATTERN="${HD_PATH:0:$((${#HD_PATH}-1))}a" - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) echo "FAUCET_MNEMONIC: $FAUCET_MNEMONIC" - echo "FAUCET_PATH_PATTERN: $FAUCET_PATH_PATTERN" - export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10; done - - /app/packages/faucet/bin/cosmos-faucet-dist start - "http://localhost:26657" + /app/packages/faucet/bin/cosmos-faucet-dist start "http://localhost:26657" resources: limits: cpu: '0.2' @@ -357,7 +362,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/cosmjs-faucet/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/ethereum/ethereum/ethereum-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/ethereum/ethereum/ethereum-statefulset.yaml index 831140058..8e7b8e15e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/ethereum/ethereum/ethereum-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/ethereum/ethereum/ethereum-statefulset.yaml @@ -59,8 +59,12 @@ spec: echo "Copy secrets over" cp /config/jwt.hex /etc/secrets/jwt.hex resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: secrets mountPath: /etc/secrets @@ -75,14 +79,16 @@ spec: - bash - '-c' args: - - >- + - |- echo "Initializing genesis geth" - - geth --datadir /ethereum/execution init - /ethereum/execution/genesis.json + geth --datadir /ethereum/execution init /ethereum/execution/genesis.json resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: secrets mountPath: /etc/secrets @@ -136,8 +142,12 @@ spec: --nat=none \ --log.vmodule=engine=6 resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: ethereum mountPath: /ethereum @@ -148,11 +158,7 @@ spec: command: - /bin/bash - '-c' - - >- - curl -s --data - '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' - -H "Content-Type: application/json" -X POST - http://localhost:8545 | grep -q '"result":false' + - 'curl -s --data ''{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'' -H "Content-Type: application/json" -X POST http://localhost:8545 | grep -q ''"result":false''' initialDelaySeconds: 15 periodSeconds: 10 - name: beacon-chain @@ -189,8 +195,12 @@ spec: --minimum-peers-per-subnet=0 \ --force-clear-db resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: ethereum mountPath: /ethereum @@ -199,7 +209,7 @@ spec: readinessProbe: httpGet: path: /eth/v1/node/health - port: '3500' + port: 3500 initialDelaySeconds: 15 periodSeconds: 20 - name: validator @@ -232,8 +242,12 @@ spec: --monitoring-port=8081 \ --suggested-fee-recipient=0x0C46c2cAFE097b4f7e1BB868B89e5697eE65f934 resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: ethereum mountPath: /ethereum @@ -242,7 +256,7 @@ spec: readinessProbe: httpGet: path: /metrics - port: '8081' + port: 8081 initialDelaySeconds: 20 periodSeconds: 30 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/ethereum/ethereum/service-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/ethereum/ethereum/service-service.yaml index 3c9f5e8f1..dacbfadba 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/ethereum/ethereum/service-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/ethereum/ethereum/service-service.yaml @@ -18,14 +18,14 @@ spec: - name: http port: 8545 protocol: TCP - targetPort: '8545' + targetPort: 8545 - name: ws port: 8546 protocol: TCP - targetPort: '8546' + targetPort: 8546 - name: rpc port: 8551 protocol: TCP - targetPort: '8551' + targetPort: 8551 selector: app.kubernetes.io/name: ethereum-1337 diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/configmaps/setup-scripts.yaml index db7671241..8d77be4d4 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/explorer/configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/explorer/configmap.yaml index 88f6a9fd7..54384f598 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/explorer/configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/explorer/configmap.yaml @@ -10,5 +10,4 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: explorer data: - osmosis-1.json: >- - {"chain_name":"osmosis-1","coingecko":"osmosis","api":"http://localhost:1313","rpc":["http://localhost:26653"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]} + osmosis-1.json: '{"chain_name":"osmosis-1","coingecko":"osmosis","api":"http://localhost:1313","rpc":["http://localhost:26653"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]}' diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/explorer/service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/explorer/service.yaml index 202a15b29..1d323bbe8 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/explorer/service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/explorer/service.yaml @@ -15,6 +15,6 @@ spec: - name: http port: 8080 protocol: TCP - targetPort: '8080' + targetPort: 8080 selector: app.kubernetes.io/name: explorer diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/genesis-service.yaml index 740662250..44b08761b 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/genesis-statefulset.yaml index 05362d6d9..12124e4d3 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,52 +84,32 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") - - - echo "Adding balance to - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo - --keyring-backend="test" + echo "Adding balance to osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo --keyring-backend="test" resources: limits: cpu: '0.5' @@ -148,6 +144,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -155,19 +167,13 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - - jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json - /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv - $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json - + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json bash -e /scripts/update-config.sh resources: @@ -264,7 +270,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -295,11 +301,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -322,13 +328,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -351,20 +354,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -383,7 +380,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/setup-scripts-configmap.yaml index 33876f7cc..e45d55b56 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/config-configmap.yaml deleted file mode 100644 index 8a5496467..000000000 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: full-testnet - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/deployment.yaml index 288f82619..816dc0ea7 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: full-testnet app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: registry:latest - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..0e0185830 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/osmosis-1-configmap.yaml @@ -0,0 +1,126 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: full-testnet + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8081" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/service.yaml index 86fa97854..ff5958bd9 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/full-builders/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/genesis-service.yaml index 631f01d41..96709fcb4 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/genesis-statefulset.yaml index 46d80e179..79813f2fd 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/setup-scripts-configmap.yaml index acc44e871..90541cc80 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/validator-service.yaml index 457a2bbb6..1dfdb35ed 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/validator-statefulset.yaml index 426a6f37b..fe1be1ddf 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "false" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/genesis-service.yaml index 6065e5a39..d71081f2c 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/genesis-statefulset.yaml index cad6c40d0..72ea71cee 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/validator-service.yaml index 4276c1126..90e926c9f 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/validator-statefulset.yaml index 8f58c8f76..734e8dac7 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/multi-chain/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/genesis-service.yaml index 631f01d41..96709fcb4 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/genesis-statefulset.yaml index 46d80e179..79813f2fd 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/setup-scripts-configmap.yaml index acc44e871..90541cc80 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/validator-service.yaml index 457a2bbb6..1dfdb35ed 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/validator-statefulset.yaml index 426a6f37b..fe1be1ddf 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "false" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/genesis-service.yaml index 6065e5a39..d71081f2c 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/genesis-statefulset.yaml index cad6c40d0..72ea71cee 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/validator-service.yaml index 4276c1126..90e926c9f 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/validator-statefulset.yaml index 8f58c8f76..734e8dac7 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/organization-validation/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/genesis-service.yaml index 631f01d41..96709fcb4 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/genesis-statefulset.yaml index 9ba11eacc..6e79c654b 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/setup-scripts-configmap.yaml index acc44e871..90541cc80 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/validator-service.yaml index 457a2bbb6..1dfdb35ed 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/validator-statefulset.yaml index 426a6f37b..fe1be1ddf 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "false" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/configmap.yaml index 8ff36f257..1d50554e6 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/configmap.yaml @@ -10,7 +10,5 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: explorer data: - osmosis-1.json: >- - {"chain_name":"osmosis-1","coingecko":"osmosis","api":"http://localhost:1313","rpc":["http://localhost:26653"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub-4","coingecko":"cosmoshub","api":"http://localhost:1317","rpc":["http://localhost:26657"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"cosmos","logo":"","assets":[{"base":"uatom","symbol":"COSMOS","exponent":"6","coingecko_id":"cosmoshub-4","logo":""}]} + osmosis-1.json: '{"chain_name":"osmosis-1","coingecko":"osmosis","api":"http://localhost:1313","rpc":["http://localhost:26653"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]}' + cosmoshub-4.json: '{"chain_name":"cosmoshub-4","coingecko":"cosmoshub","api":"http://localhost:1317","rpc":["http://localhost:26657"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"cosmos","logo":"","assets":[{"base":"uatom","symbol":"COSMOS","exponent":"6","coingecko_id":"cosmoshub-4","logo":""}]}' diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/deployment.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/deployment.yaml index 60bea1122..1cd735e0e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/deployment.yaml @@ -32,8 +32,7 @@ spec: spec: containers: - name: explorer - image: >- - ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db + image: ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db imagePullPolicy: IfNotPresent env: - name: CHAINS_CONFIG_PATH diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/service.yaml index 0074fd78f..25a73a52b 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/explorer/service.yaml @@ -15,6 +15,6 @@ spec: - name: http port: 8080 protocol: TCP - targetPort: '8080' + targetPort: 8080 selector: app.kubernetes.io/name: explorer diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/genesis-service.yaml index 6065e5a39..d71081f2c 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/genesis-statefulset.yaml index 7c235ffd0..09f811b1a 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/validator-service.yaml index 4276c1126..90e926c9f 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/validator-statefulset.yaml index 8f58c8f76..734e8dac7 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/config-configmap.yaml deleted file mode 100644 index af06f401f..000000000 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-generator-test - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..c10452895 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-generator-test + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/deployment.yaml index 4382555cb..92865d061 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-generator-test app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/cosmology-tech/starship/registry:latest - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 - - name: chain-cosmoshub-4 + name: registry-osmosis-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..c0fed8099 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/osmosis-1-configmap.yaml @@ -0,0 +1,126 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-generator-test + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/service.yaml index 77d5b61e0..d3c6be3dc 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/relayer/hermes-osmos-cosmos-configmap.yaml index 33e66de19..57abd7a60 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/relayer/hermes-osmos-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/relayer/hermes-osmos-cosmos-configmap.yaml @@ -11,303 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-osmos-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = false - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = false - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1-cli" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/relayer/hermes-osmos-cosmos-statefulset.yaml index 8c482ba59..bd77b5496 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/relayers/relayer/hermes-osmos-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/relayers/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for osmosis-1..." - hermes keys add \ --chain osmosis-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name osmosis-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" - - RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | - jq -r '.result."osmosis-1".account') - + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/configmaps/setup-scripts.yaml index 288d7e505..1925195d0 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/genesis-service.yaml index 1b52515ba..e9a26a554 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/genesis-statefulset.yaml index 9f4102b5b..3fff42113 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,52 +84,32 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") - - - echo "Adding balance to - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo - --keyring-backend="test" + echo "Adding balance to osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo --keyring-backend="test" resources: limits: cpu: '0.5' @@ -148,6 +144,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -155,19 +167,13 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - - jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json - /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv - $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json - + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json bash -e /scripts/update-config.sh resources: @@ -264,7 +270,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -295,11 +301,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -322,13 +328,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -351,20 +354,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -383,7 +380,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/setup-scripts-configmap.yaml index 25e24d1d2..62a0c994e 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/single-chain/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/configmaps/setup-scripts.yaml index b019f5fdc..81b2bc081 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/genesis-service.yaml index a1c5ec452..99d72be04 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: test-chain-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/genesis-statefulset.yaml index 5d69b96ae..0cfa869f1 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/genesis-statefulset.yaml @@ -56,6 +56,22 @@ spec: value: '' - name: CHAIN_ID value: test-chain-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -67,52 +83,32 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") - - - echo "Adding balance to - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo - --keyring-backend="test" + echo "Adding balance to osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo --keyring-backend="test" resources: limits: cpu: '0.5' @@ -145,6 +141,22 @@ spec: value: '' - name: CHAIN_ID value: test-chain-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -152,19 +164,13 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - - jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json - /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv - $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json - + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json bash -e /scripts/update-config.sh resources: @@ -258,7 +264,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -289,11 +295,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - name: node - mountPath: /configs @@ -314,13 +320,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -343,20 +346,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -375,7 +372,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/setup-scripts-configmap.yaml index c0932a952..83ade9bd8 100644 --- a/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/builder-tests/special-chars/test-chain/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: test-chain starship.io/chain-id: test-chain-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/genesis-service.yaml index 5cd29e1ce..f79e42a95 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: agoric-3-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/genesis-statefulset.yaml index 8b3f42a76..a4ad8fd46 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: agd - name: CHAIN_ID value: agoric-3 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: 1 @@ -140,6 +141,22 @@ spec: value: agd - name: CHAIN_ID value: agoric-3 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.agoric name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/setup-scripts-configmap.yaml index 6d613af57..dba632313 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/agoric/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: agoric starship.io/chain-id: agoric-3 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/genesis-statefulset.yaml index 93fff77a3..6ae432684 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/agoric-3-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/agoric-3-configmap.yaml new file mode 100644 index 000000000..edab6f30c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/agoric-3-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-agoric-3 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-agoric-3 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "agoric", + "status": "live", + "network_type": "devnet", + "chain_id": "agoric-3", + "pretty_name": "Agoric Devnet", + "bech32_prefix": "agoric", + "daemon_name": "agd", + "node_home": "/root/.agoric", + "key_algos": [ + "secp256k1" + ], + "slip44": "564", + "fees": { + "fee_tokens": [ + { + "denom": "ubld", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ubld" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/Agoric/agoric-sdk", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "agoric", + "assets": [ + { + "base": "ubld", + "description": "The native token of Agoric", + "name": "Agoric", + "display": "bld", + "symbol": "BLD", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.svg" + }, + "denom_units": [ + { + "denom": "ubld", + "exponent": 0 + }, + { + "denom": "bld", + "exponent": 6 + } + ], + "coingecko_id": "agoric", + "keywords": [ + "agoric" + ] + }, + { + "base": "uist", + "description": "IST is the stable token used by the Agoric chain for execution fees and commerce.", + "name": "Inter Stable Token", + "display": "ist", + "symbol": "IST", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.svg" + }, + "denom_units": [ + { + "denom": "uist", + "exponent": 0 + }, + { + "denom": "ist", + "exponent": 6 + } + ], + "coingecko_id": "inter-stable-token", + "keywords": [ + "inter-stable-token" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/config-configmap.yaml deleted file mode 100644 index 86cebd262..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/config-configmap.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - agoric-3.json: >- - {"chain_name":"agoric","assets":[{"base":"ubld","description":"The native - token of - Agoric","name":"Agoric","display":"bld","symbol":"BLD","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.svg"},"denom_units":[{"denom":"ubld","exponent":0},{"denom":"bld","exponent":6}],"coingecko_id":"agoric","keywords":["agoric"]},{"base":"uist","description":"IST - is the stable token used by the Agoric chain for execution fees and - commerce.","name":"Inter Stable - Token","display":"ist","symbol":"IST","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.svg"},"denom_units":[{"denom":"uist","exponent":0},{"denom":"ist","exponent":6}],"coingecko_id":"inter-stable-token","keywords":["inter-stable-token"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/deployment.yaml index 2e65760f3..47344d438 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: agoric-3. Waiting for it to start..." + echo "Checking: http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: agoric-3,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: agoric,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-agoric-3 + - name: registry-agoric-3 mountPath: /chains/agoric-3 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-agoric-3 + - name: registry-agoric-3 configMap: - name: chain-agoric-3 - - name: chain-cosmoshub-4 + name: registry-agoric-3 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/relayer/hermes-agoric-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/relayer/hermes-agoric-cosmos-configmap.yaml index 16bc1a12e..f144032a1 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/relayer/hermes-agoric-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/relayer/hermes-agoric-cosmos-configmap.yaml @@ -11,311 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-agoric-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "agoric-3" - type = "CosmosSdk" - key_name = "agoric-3" - - rpc_addr = "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "agoric" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "ubld" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "agoric-3" - type = "CosmosSdk" - key_name = "agoric-3-cli" - - rpc_addr = "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "agoric" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "ubld" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/agoric/relayer/hermes-agoric-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/agoric/relayer/hermes-agoric-cosmos-statefulset.yaml index 3f4d915a8..99b35f046 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/agoric/relayer/hermes-agoric-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/agoric/relayer/hermes-agoric-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-agoric-3 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for agoric-3 service..." - - wait-for-service - agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: agoric-3. Waiting for it to start..." + echo "Checking: http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for agoric-3..." - hermes keys add \ --chain agoric-3 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name agoric-3 \ --hd-path "m/44'/564'/0'/0/0" - DENOM="ubld" - - RLY_ADDR=$(hermes --json keys list --chain agoric-3 | tail -1 | jq - -r '.result."agoric-3".account') - + RLY_ADDR=$(hermes --json keys list --chain agoric-3 | tail -1 | jq -r '.result."agoric-3".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for agoric-3-cli..." + hermes keys add \ + --chain agoric-3 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name agoric-3-cli \ + --hd-path "m/44'/564'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain agoric-3 | tail -1 | jq -r '.result."agoric-3-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain agoric-3 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/genesis-statefulset.yaml index 81df6d906..cf70bfa6f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/validator-service.yaml index 31a91d385..59bc68aea 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/validator-statefulset.yaml index 0ea564bab..234796f35 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/genesis-service.yaml index 70f8fac27..b43454c5d 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: core-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/genesis-statefulset.yaml index e9dba2d54..bb539dcb1 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/genesis-statefulset.yaml @@ -43,17 +43,12 @@ spec: command: - bash - '-c' - - >- + - |- # Install cosmovisor - - go install - github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 - + go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 # Build genesis - - UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e - /scripts/build-chain.sh + UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh env: - name: CODE_REF value: https://github.com/persistenceOne/persistenceCore @@ -111,6 +106,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -122,47 +133,31 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '2' @@ -197,6 +192,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -309,7 +320,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -340,11 +351,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.persistenceCore name: node @@ -367,13 +378,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -396,20 +404,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -428,7 +430,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/setup-scripts-configmap.yaml index 038ba830a..87da8e13b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: persistencecore starship.io/chain-id: core-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/validator-service.yaml index 1bed5ced0..467325f97 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: core-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/validator-statefulset.yaml index 2f8d98688..51da8a8e9 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/persistencecore/validator-statefulset.yaml @@ -43,17 +43,12 @@ spec: command: - bash - '-c' - - >- + - |- # Install cosmovisor - - go install - github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 - + go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 # Build genesis - - UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e - /scripts/build-chain.sh + UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh env: - name: CODE_REF value: https://github.com/persistenceOne/persistenceCore @@ -104,22 +99,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." - echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/runner:latest imagePullPolicy: IfNotPresent @@ -140,6 +135,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: core-1-genesis - name: GENESIS_PORT @@ -157,46 +168,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -232,6 +226,22 @@ spec: value: persistenceCore - name: CHAIN_ID value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: core-1-genesis - name: GENESIS_PORT @@ -247,42 +257,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -364,32 +358,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -397,7 +378,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -410,7 +390,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -455,11 +435,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.persistenceCore name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/config-configmap.yaml deleted file mode 100644 index 5f51804ab..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/config-configmap.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} - core-1.json: '{"chain_name":"persistencecore","assets":[]}' diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/core-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/core-1-configmap.yaml new file mode 100644 index 000000000..0faedaaf5 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/core-1-configmap.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-core-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-core-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "persistencecore", + "status": "live", + "network_type": "devnet", + "chain_id": "core-1", + "pretty_name": "Persistence Devnet", + "bech32_prefix": "persistence", + "daemon_name": "persistenceCore", + "node_home": "/root/.persistenceCore", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uxprt", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uxprt" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/persistenceOne/persistenceCore", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "persistencecore", + "assets": [ + { + "description": "The denom for token uxprt", + "base": "uxprt", + "name": "uxprt", + "display": "uxprt", + "symbol": "UXPRT", + "denom_units": [ + { + "denom": "uxprt", + "exponent": 0 + }, + { + "denom": "uxprt", + "exponent": 6 + } + ], + "coingecko_id": "persistencecore" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/deployment.yaml index f56e9fd2e..7c0ef3e16 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: cosmoshub-4,core-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: cosmoshub,persistencecore - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26657,http://localhost:26658 + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26657,http://localhost:26658 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1317,http://localhost:1318 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 - - name: chain-core-1 + - name: registry-core-1 mountPath: /chains/core-1 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 - - name: chain-core-1 + name: registry-cosmoshub-4 + - name: registry-core-1 configMap: - name: chain-core-1 + name: registry-core-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/relayer/hermes-persistence-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/relayer/hermes-persistence-cosmos-configmap.yaml index 2620d6770..9fda72efb 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/relayer/hermes-persistence-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/relayer/hermes-persistence-cosmos-configmap.yaml @@ -11,311 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-persistence-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "core-1" - type = "CosmosSdk" - key_name = "core-1" - - rpc_addr = "http://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://core-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://core-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "persistence" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uxprt" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "core-1" - type = "CosmosSdk" - key_name = "core-1-cli" - - rpc_addr = "http://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://core-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://core-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "persistence" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uxprt" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/relayer/hermes-persistence-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/relayer/hermes-persistence-cosmos-statefulset.yaml index 97189f1af..71ba41f52 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/build-chain/relayer/hermes-persistence-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/build-chain/relayer/hermes-persistence-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-core-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for core-1 service..." - - wait-for-service - core-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for core-1..." - hermes keys add \ --chain core-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name core-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uxprt" - - RLY_ADDR=$(hermes --json keys list --chain core-1 | tail -1 | jq - -r '.result."core-1".account') - + RLY_ADDR=$(hermes --json keys list --chain core-1 | tail -1 | jq -r '.result."core-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://core-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for core-1-cli..." + hermes keys add \ + --chain core-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name core-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain core-1 | tail -1 | jq -r '.result."core-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://core-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain core-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/eth-lite/ethereum/ethereum-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/eth-lite/ethereum/ethereum-statefulset.yaml index b0a7371f5..96886cdea 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/eth-lite/ethereum/ethereum-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/eth-lite/ethereum/ethereum-statefulset.yaml @@ -79,11 +79,9 @@ spec: - bash - '-c' args: - - >- + - |- echo "Initializing genesis geth" - - geth --datadir /ethereum/execution init - /ethereum/execution/genesis.json + geth --datadir /ethereum/execution init /ethereum/execution/genesis.json resources: requests: cpu: 200m @@ -160,11 +158,7 @@ spec: command: - /bin/bash - '-c' - - >- - curl -s --data - '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' - -H "Content-Type: application/json" -X POST - http://localhost:8545 | grep -q '"result":false' + - 'curl -s --data ''{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'' -H "Content-Type: application/json" -X POST http://localhost:8545 | grep -q ''"result":false''' initialDelaySeconds: 15 periodSeconds: 10 - name: beacon-chain @@ -215,7 +209,7 @@ spec: readinessProbe: httpGet: path: /eth/v1/node/health - port: '3500' + port: 3500 initialDelaySeconds: 15 periodSeconds: 20 - name: validator @@ -262,7 +256,7 @@ spec: readinessProbe: httpGet: path: /metrics - port: '8081' + port: 8081 initialDelaySeconds: 20 periodSeconds: 30 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/eth-lite/ethereum/service-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/eth-lite/ethereum/service-service.yaml index d90c9b843..9564bd7b8 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/eth-lite/ethereum/service-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/eth-lite/ethereum/service-service.yaml @@ -18,14 +18,14 @@ spec: - name: http port: 8545 protocol: TCP - targetPort: '8545' + targetPort: 8545 - name: ws port: 8546 protocol: TCP - targetPort: '8546' + targetPort: 8546 - name: rpc port: 8551 protocol: TCP - targetPort: '8551' + targetPort: 8551 selector: app.kubernetes.io/name: ethereum-1337 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/eth/ethereum/ethereum-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/eth/ethereum/ethereum-statefulset.yaml index 14bbbac47..1ac24070b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/eth/ethereum/ethereum-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/eth/ethereum/ethereum-statefulset.yaml @@ -59,8 +59,12 @@ spec: echo "Copy secrets over" cp /config/jwt.hex /etc/secrets/jwt.hex resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: secrets mountPath: /etc/secrets @@ -75,14 +79,16 @@ spec: - bash - '-c' args: - - >- + - |- echo "Initializing genesis geth" - - geth --datadir /ethereum/execution init - /ethereum/execution/genesis.json + geth --datadir /ethereum/execution init /ethereum/execution/genesis.json resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: secrets mountPath: /etc/secrets @@ -136,8 +142,12 @@ spec: --nat=none \ --log.vmodule=engine=6 resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: ethereum mountPath: /ethereum @@ -148,11 +158,7 @@ spec: command: - /bin/bash - '-c' - - >- - curl -s --data - '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' - -H "Content-Type: application/json" -X POST - http://localhost:8545 | grep -q '"result":false' + - 'curl -s --data ''{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'' -H "Content-Type: application/json" -X POST http://localhost:8545 | grep -q ''"result":false''' initialDelaySeconds: 15 periodSeconds: 10 - name: beacon-chain @@ -189,8 +195,12 @@ spec: --minimum-peers-per-subnet=0 \ --force-clear-db resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: ethereum mountPath: /ethereum @@ -199,7 +209,7 @@ spec: readinessProbe: httpGet: path: /eth/v1/node/health - port: '3500' + port: 3500 initialDelaySeconds: 15 periodSeconds: 20 - name: validator @@ -232,8 +242,12 @@ spec: --monitoring-port=8081 \ --suggested-fee-recipient=0x0C46c2cAFE097b4f7e1BB868B89e5697eE65f934 resources: - requests: {} - limits: {} + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M volumeMounts: - name: ethereum mountPath: /ethereum @@ -242,7 +256,7 @@ spec: readinessProbe: httpGet: path: /metrics - port: '8081' + port: 8081 initialDelaySeconds: 20 periodSeconds: 30 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/eth/ethereum/service-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/eth/ethereum/service-service.yaml index d90c9b843..9564bd7b8 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/eth/ethereum/service-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/eth/ethereum/service-service.yaml @@ -18,14 +18,14 @@ spec: - name: http port: 8545 protocol: TCP - targetPort: '8545' + targetPort: 8545 - name: ws port: 8546 protocol: TCP - targetPort: '8546' + targetPort: 8546 - name: rpc port: 8551 protocol: TCP - targetPort: '8551' + targetPort: 8551 selector: app.kubernetes.io/name: ethereum-1337 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/genesis-statefulset.yaml index 93fff77a3..6ae432684 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/genesis-service.yaml index 2da3fd716..c2243084d 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/genesis-service.yaml @@ -7,7 +7,7 @@ metadata: app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship app.kubernetes.io/component: chain - app.kubernetes.io/name: evmos-9000-1-genesis + app.kubernetes.io/name: evmos_9000-1-genesis app.kubernetes.io/type: evmos_9000-1-service app.kubernetes.io/role: genesis starship.io/chain-name: evmos @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: - app.kubernetes.io/name: evmos-9000-1-genesis + app.kubernetes.io/name: evmos_9000-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/genesis-statefulset.yaml index aad5b1338..c5418e931 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/genesis-statefulset.yaml @@ -9,7 +9,7 @@ metadata: app.kubernetes.io/component: chain app.kubernetes.io/part-of: evmos_9000-1 app.kubernetes.io/id: evmos_9000-1 - app.kubernetes.io/name: evmos-9000-1-genesis + app.kubernetes.io/name: evmos_9000-1-genesis app.kubernetes.io/type: evmos_9000-1-statefulset app.kubernetes.io/role: genesis starship.io/chain-name: evmos @@ -57,6 +57,22 @@ spec: value: evmosd - name: CHAIN_ID value: evmos_9000-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: evmosd - name: CHAIN_ID value: evmos_9000-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.evmosd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/setup-scripts-configmap.yaml index 1927355bc..d2ac20ecf 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: evmos starship.io/chain-id: evmos_9000-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/validator-service.yaml index d60d8afe5..0d28593d8 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/validator-service.yaml @@ -7,7 +7,7 @@ metadata: app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship app.kubernetes.io/component: chain - app.kubernetes.io/name: evmos-9000-1-validator + app.kubernetes.io/name: evmos_9000-1-validator app.kubernetes.io/role: validator app.kubernetes.io/type: evmos_9000-1-service starship.io/chain-name: evmos @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: - app.kubernetes.io/name: evmos-9000-1-validator + app.kubernetes.io/name: evmos_9000-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/validator-statefulset.yaml index b00bf6386..07b7d3aed 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/evmos/validator-statefulset.yaml @@ -9,7 +9,7 @@ metadata: app.kubernetes.io/component: chain app.kubernetes.io/part-of: evmos_9000-1 app.kubernetes.io/id: evmos_9000-1 - app.kubernetes.io/name: evmos-9000-1-validator + app.kubernetes.io/name: evmos_9000-1-validator app.kubernetes.io/type: evmos_9000-1-statefulset app.kubernetes.io/role: validator starship.io/chain-name: evmos @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." - echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/evmos:v13.0.2 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: evmosd - name: CHAIN_ID value: evmos_9000-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: evmos-9000-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: evmosd - name: CHAIN_ID value: evmos_9000-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: evmos-9000-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.evmosd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/config-configmap.yaml deleted file mode 100644 index 8751ade01..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - evmos-9000-1.json: >- - {"chain_name":"evmos","assets":[{"base":"aevmos","description":"The native - EVM, governance and staking token of the Evmos - Hub","denom_units":[{"denom":"aevmos","exponent":0},{"denom":"evmos","exponent":18}],"name":"Evmos","display":"evmos","symbol":"EVMOS","logo_URIs":{"svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.svg","png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png"},"coingecko_id":"evmos"}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/deployment.yaml index 0c13c4748..8c906682f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: evmos_9000-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: evmos,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-evmos-9000-1 + - name: registry-evmos-9000-1 mountPath: /chains/evmos_9000-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-evmos-9000-1 + - name: registry-evmos-9000-1 configMap: - name: chain-evmos-9000-1 - - name: chain-cosmoshub-4 + name: registry-evmos-9000-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/evmos-9000-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/evmos-9000-1-configmap.yaml new file mode 100644 index 000000000..1d42775d9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/evmos-9000-1-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-evmos-9000-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-evmos-9000-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "evmos", + "status": "live", + "network_type": "devnet", + "chain_id": "evmos_9000-1", + "pretty_name": "Evmos Devnet", + "bech32_prefix": "evmos", + "daemon_name": "evmosd", + "node_home": "/root/.evmosd", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "aevmos", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "aevmos" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/evmos/evmos", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "evmos", + "assets": [ + { + "base": "aevmos", + "description": "The native EVM, governance and staking token of the Evmos Hub", + "denom_units": [ + { + "denom": "aevmos", + "exponent": 0 + }, + { + "denom": "evmos", + "exponent": 18 + } + ], + "name": "Evmos", + "display": "evmos", + "symbol": "EVMOS", + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.svg", + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png" + }, + "coingecko_id": "evmos" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/relayer/hermes-evmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/relayer/hermes-evmos-cosmos-configmap.yaml index 223095bbc..8538fffb5 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/relayer/hermes-evmos-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/relayer/hermes-evmos-cosmos-configmap.yaml @@ -11,317 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-evmos-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "evmos_9000-1" - type = "CosmosSdk" - key_name = "evmos_9000-1" - - rpc_addr = - "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = - "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "evmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - - address_type = { derivation = 'ethermint', proto_type = { pk_type = - '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } - + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } gas_price = { price = 2500000, denom = "aevmos" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "evmos_9000-1" - type = "CosmosSdk" - key_name = "evmos_9000-1-cli" - - rpc_addr = - "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = - "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "evmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - - address_type = { derivation = 'ethermint', proto_type = { pk_type = - '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } - + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } gas_price = { price = 2500000, denom = "aevmos" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/evmos/relayer/hermes-evmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/evmos/relayer/hermes-evmos-cosmos-statefulset.yaml index bc781b470..ebed1b3f7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/evmos/relayer/hermes-evmos-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/evmos/relayer/hermes-evmos-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-evmos-9000-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for evmos-9000-1 service..." - - wait-for-service - evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for evmos_9000-1..." - hermes keys add \ --chain evmos_9000-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name evmos_9000-1 \ --hd-path "m/44'/60'/0'/0/0" - DENOM="aevmos" - - RLY_ADDR=$(hermes --json keys list --chain evmos_9000-1 | tail -1 - | jq -r '.result."evmos_9000-1".account') - + RLY_ADDR=$(hermes --json keys list --chain evmos_9000-1 | tail -1 | jq -r '.result."evmos_9000-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for evmos_9000-1-cli..." + hermes keys add \ + --chain evmos_9000-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name evmos_9000-1-cli \ + --hd-path "m/44'/60'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain evmos_9000-1 | tail -1 | jq -r '.result."evmos_9000-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain evmos_9000-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/genesis-service.yaml index c435f039c..34cd998be 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: test-hyperweb-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/genesis-statefulset.yaml index 8732a8a66..8f97afe55 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/genesis-statefulset.yaml @@ -44,8 +44,7 @@ spec: - name: DENOM value: uhyper - name: COINS - value: >- - 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc - name: CHAIN_BIN value: hyperd - name: CHAIN_DIR @@ -58,6 +57,22 @@ spec: value: hyperd - name: CHAIN_ID value: test-hyperweb-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -69,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -128,8 +128,7 @@ spec: - name: DENOM value: uhyper - name: COINS - value: >- - 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc - name: CHAIN_BIN value: hyperd - name: CHAIN_DIR @@ -142,6 +141,22 @@ spec: value: hyperd - name: CHAIN_ID value: test-hyperweb-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -195,8 +210,7 @@ spec: - name: DENOM value: uhyper - name: COINS - value: >- - 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc - name: CHAIN_BIN value: hyperd - name: CHAIN_DIR @@ -249,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: Always env: - name: GENESIS_HOST @@ -280,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.hyperd name: node @@ -303,18 +317,14 @@ spec: - name: FAUCET_CHAIN_ID value: test-hyperweb-1 - name: COINS - value: >- - 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -337,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -369,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/setup-scripts-configmap.yaml index 62e3efa7c..4e8fc6feb 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: hyperweb starship.io/chain-id: test-hyperweb-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/validator-service.yaml index 2d123f294..a3691afd7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: test-hyperweb-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/validator-statefulset.yaml index cefc155c8..293cdc6fc 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/hyperweb/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: test-hyperweb-1. Waiting for it to start..." - echo "Checking: http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: test-hyperweb-1. Waiting for it to start..." + echo "Checking: http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/hyperweb-io/hyperweb:latest imagePullPolicy: Always @@ -73,8 +73,7 @@ spec: - name: DENOM value: uhyper - name: COINS - value: >- - 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc - name: CHAIN_BIN value: hyperd - name: CHAIN_DIR @@ -87,6 +86,22 @@ spec: value: hyperd - name: CHAIN_ID value: test-hyperweb-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: test-hyperweb-1-genesis - name: GENESIS_PORT @@ -104,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -165,8 +164,7 @@ spec: - name: DENOM value: uhyper - name: COINS - value: >- - 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc - name: CHAIN_BIN value: hyperd - name: CHAIN_DIR @@ -179,6 +177,22 @@ spec: value: hyperd - name: CHAIN_ID value: test-hyperweb-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: test-hyperweb-1-genesis - name: GENESIS_PORT @@ -194,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -252,8 +251,7 @@ spec: - name: DENOM value: uhyper - name: COINS - value: >- - 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc - name: CHAIN_BIN value: hyperd - name: CHAIN_DIR @@ -310,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -343,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -356,14 +340,13 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: Always env: - name: DENOM value: uhyper - name: COINS - value: >- - 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc - name: CHAIN_BIN value: hyperd - name: CHAIN_DIR @@ -402,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.hyperd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/config-configmap.yaml deleted file mode 100644 index 2229f53bc..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - test-hyperweb-1.json: >- - {"chain_name":"hyperweb","assets":[{"base":"uhyper","description":"The meme - coin for Hyperweb - chain.","name":"Hyper","display":"hyper","symbol":"HYPR","logo_URIs":{"png":"https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-png.png","svg":"https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-svg.svg"},"denom_units":[{"denom":"uhyper","exponent":0},{"denom":"hyper","exponent":6}],"coingecko_id":"hyper","keywords":["hyper"]}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/deployment.yaml index 7926535f4..8fc5a916c 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/deployment.yaml @@ -13,38 +13,73 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: Always + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: test-hyperweb-1. Waiting for it to start..." + echo "Checking: http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: test-hyperweb-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: hyperweb - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26657 + value: http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-test-hyperweb-1 + - name: registry-test-hyperweb-1 mountPath: /chains/test-hyperweb-1 resources: limits: @@ -54,18 +89,16 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-test-hyperweb-1 + - name: registry-test-hyperweb-1 configMap: - name: chain-test-hyperweb-1 + name: registry-test-hyperweb-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/test-hyperweb-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/test-hyperweb-1-configmap.yaml new file mode 100644 index 000000000..a701ea716 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/hyperweb/registry/test-hyperweb-1-configmap.yaml @@ -0,0 +1,95 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-test-hyperweb-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-test-hyperweb-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "hyperweb", + "status": "live", + "network_type": "devnet", + "chain_id": "test-hyperweb-1", + "pretty_name": "Hyperweb Devnet", + "bech32_prefix": "hyper", + "daemon_name": "hyperd", + "node_home": "/root/.hyperd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uhyper", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uhyper" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/hyperweb-io/hyperweb", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "hyperweb", + "assets": [ + { + "base": "uhyper", + "description": "The meme coin for Hyperweb chain.", + "name": "Hyper", + "display": "hyper", + "symbol": "HYPR", + "logo_URIs": { + "png": "https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-png.png", + "svg": "https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-svg.svg" + }, + "denom_units": [ + { + "denom": "uhyper", + "exponent": 0 + }, + { + "denom": "hyper", + "exponent": 6 + } + ], + "coingecko_id": "hyper", + "keywords": [ + "hyper" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/configmaps/setup-scripts.yaml index 2b6dcb405..59b5d87d7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/genesis-service.yaml index cd07dda33..1fd2526fb 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/genesis-statefulset.yaml index 8f7a9409c..672b562b4 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '1' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/setup-scripts-configmap.yaml index 78044f59d..a26cd875d 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/validator-service.yaml index ac806a770..96a804661 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/validator-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/validator-statefulset.yaml index 9c2bc3ff0..70ea3b3f4 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/configmap.yaml index d3e9afa1e..992c805f4 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/configmap.yaml @@ -10,7 +10,5 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: explorer data: - osmosis-1.json: >- - {"chain_name":"osmosis-1","coingecko":"osmosis","api":"https://rest.osmosis-1-genesis.starship-test.io:443","rpc":["https://rpc.osmosis-1-genesis.starship-test.io:443"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub-4","coingecko":"cosmoshub","api":"https://rest.cosmoshub-4-genesis.starship-test.io:443","rpc":["https://rpc.cosmoshub-4-genesis.starship-test.io:443"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"cosmos","logo":"","assets":[{"base":"uatom","symbol":"COSMOS","exponent":"6","coingecko_id":"cosmoshub-4","logo":""}]} + osmosis-1.json: '{"chain_name":"osmosis-1","coingecko":"osmosis","api":"https://rest.osmosis-1-genesis.starship-test.io:443","rpc":["https://rpc.osmosis-1-genesis.starship-test.io:443"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]}' + cosmoshub-4.json: '{"chain_name":"cosmoshub-4","coingecko":"cosmoshub","api":"https://rest.cosmoshub-4-genesis.starship-test.io:443","rpc":["https://rpc.cosmoshub-4-genesis.starship-test.io:443"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"cosmos","logo":"","assets":[{"base":"uatom","symbol":"COSMOS","exponent":"6","coingecko_id":"cosmoshub-4","logo":""}]}' diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/deployment.yaml index cbde30dd1..5d33c5094 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/deployment.yaml @@ -32,8 +32,7 @@ spec: spec: containers: - name: explorer - image: >- - ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db + image: ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db imagePullPolicy: IfNotPresent env: - name: CHAINS_CONFIG_PATH diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/service.yaml index 5a97b91df..c54de8070 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/explorer/service.yaml @@ -15,6 +15,6 @@ spec: - name: http port: 8080 protocol: TCP - targetPort: '8080' + targetPort: 8080 selector: app.kubernetes.io/name: explorer diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/monitoring/prometheus-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/monitoring/prometheus-service.yaml index cb2e5762d..60d27adbd 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/monitoring/prometheus-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/monitoring/prometheus-service.yaml @@ -18,6 +18,6 @@ spec: - name: http port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 selector: app.kubernetes.io/name: prometheus diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/genesis-service.yaml index 68ec07a32..bf04aa23b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/genesis-statefulset.yaml index 6411f88af..115489f98 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '1' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/setup-scripts-configmap.yaml index 0e72fa30a..6e4db84e3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/validator-service.yaml index dde7c1b94..3e736fa3b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/validator-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/validator-statefulset.yaml index b20bf5a28..bc0246878 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/config-configmap.yaml deleted file mode 100644 index 548290cc9..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests-full-stack - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..36ef909e9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests-full-stack + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/deployment.yaml index cfefeed71..86cb9281f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests-full-stack app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - https://grpc.osmosis-1-genesis.starship-test.io,https://grpc.cosmoshub-4-genesis.starship-test.io + value: https://grpc.osmosis-1-genesis.starship-test.io,https://grpc.cosmoshub-4-genesis.starship-test.io - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 - - name: chain-cosmoshub-4 + name: registry-osmosis-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..61548f941 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/osmosis-1-configmap.yaml @@ -0,0 +1,126 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests-full-stack + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/service.yaml index 4cc53d07f..1fa952cdb 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/relayer/hermes-osmos-cosmos-configmap.yaml index d96d5f45f..c43f59e65 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/relayer/hermes-osmos-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/relayer/hermes-osmos-cosmos-configmap.yaml @@ -11,311 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-osmos-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1-cli" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/relayer/hermes-osmos-cosmos-statefulset.yaml index 82f825e03..209058dd6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/relayer/hermes-osmos-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-monitoring-full/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for osmosis-1..." - hermes keys add \ --chain osmosis-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name osmosis-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" - - RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | - jq -r '.result."osmosis-1".account') - + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.5' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/configmaps/setup-scripts.yaml index 76295acba..803183602 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/configmap.yaml index f91937228..36a95d3d3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/configmap.yaml @@ -10,5 +10,4 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: explorer data: - osmosis-1.json: >- - {"chain_name":"osmosis-1","coingecko":"osmosis","api":"https://rest.osmosis-1-genesis.example.com:443","rpc":["https://rpc.osmosis-1-genesis.example.com:443"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]} + osmosis-1.json: '{"chain_name":"osmosis-1","coingecko":"osmosis","api":"https://rest.osmosis-1-genesis.example.com:443","rpc":["https://rpc.osmosis-1-genesis.example.com:443"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]}' diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/deployment.yaml index 2346209b8..51f2551e1 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/deployment.yaml @@ -32,8 +32,7 @@ spec: spec: containers: - name: explorer - image: >- - ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db + image: ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db imagePullPolicy: IfNotPresent env: - name: CHAINS_CONFIG_PATH diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/service.yaml index 832cc1dcc..1b4c17402 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/explorer/service.yaml @@ -15,6 +15,6 @@ spec: - name: http port: 8080 protocol: TCP - targetPort: '8080' + targetPort: 8080 selector: app.kubernetes.io/name: explorer diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/genesis-service.yaml index fafe271e9..1f0fb3f39 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/genesis-statefulset.yaml index c8f103074..5225b3004 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/setup-scripts-configmap.yaml index c4437bca0..9593c358b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/config-configmap.yaml deleted file mode 100644 index 039c53159..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-ingress-test - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/deployment.yaml index 7b20c0dda..b540cf323 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-ingress-test app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..6ecddef53 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/osmosis-1-configmap.yaml @@ -0,0 +1,126 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-ingress-test + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/service.yaml index f0ec815f6..6a78d7875 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/ingress-only/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/genesis-statefulset.yaml index 93fff77a3..6ae432684 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/genesis-service.yaml index 1e43b9d0e..98a1ff563 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: injective-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/genesis-statefulset.yaml index 40784a070..66a7f3ed5 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: injectived - name: CHAIN_ID value: injective-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: injectived - name: CHAIN_ID value: injective-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.injectived name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/setup-scripts-configmap.yaml index cff951fe7..a9a6f232b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/setup-scripts-configmap.yaml @@ -13,580 +13,260 @@ metadata: starship.io/chain-name: injective starship.io/chain-id: injective-1 data: - createGenesis.sh: > + createGenesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000inj}" - CHAIN_ID="${CHAIN_ID:=injective}" - CHAIN_BIN="${CHAIN_BIN:=injectived}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.injectived}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - FEEDADMIN="inj1k2z3chspuk9wsufle69svmtmnlc07rvw9djya7" - set -eu + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - # check if the binary has genesis subcommand or not, if not, set - CHAIN_GENESIS_CMD to empty - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_ID --recover WASM_KEY="wasm" - - WASM_MNEMONIC="juice dog over thing anger search film document sight fork - enrich jungle vacuum grab more sunset winner diesel flock smooth route - impulse cheap toward" - + WASM_MNEMONIC="juice dog over thing anger search film document sight fork enrich jungle vacuum grab more sunset winner diesel flock smooth route impulse cheap toward" VAL_KEY="localkey" - - VAL_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" - + VAL_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" USER1_KEY="user1" - - USER1_MNEMONIC="copper push brief egg scan entry inform record adjust fossil - boss egg comic alien upon aspect dry avoid interest fury window hint race - symptom" - + USER1_MNEMONIC="copper push brief egg scan entry inform record adjust fossil boss egg comic alien upon aspect dry avoid interest fury window hint race symptom" USER2_KEY="user2" - - USER2_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" - + USER2_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" USER3_KEY="user3" - - USER3_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" - + USER3_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" USER4_KEY="user4" - - USER4_MNEMONIC="pony glide frown crisp unfold lawn cup loan trial govern - usual matrix theory wash fresh address pioneer between meadow visa buffalo - keep gallery swear" - + USER4_MNEMONIC="pony glide frown crisp unfold lawn cup loan trial govern usual matrix theory wash fresh address pioneer between meadow visa buffalo keep gallery swear" USER5_KEY="ocrfeedadmin" - - USER5_MNEMONIC="earn front swamp dune level clip shell aware apple spare - faith upset flip local regret loud suspect view heavy raccoon satisfy - cupboard harbor basic" - + USER5_MNEMONIC="earn front swamp dune level clip shell aware apple spare faith upset flip local regret loud suspect view heavy raccoon satisfy cupboard harbor basic" USER6_KEY="signer1" - - USER6_MNEMONIC="output arrange offer advance egg point office silent diamond - fame heart hotel rocket sheriff resemble couple race crouch kit laptop - document grape drastic lumber" - + USER6_MNEMONIC="output arrange offer advance egg point office silent diamond fame heart hotel rocket sheriff resemble couple race crouch kit laptop document grape drastic lumber" USER7_KEY="signer2" - - USER7_MNEMONIC="velvet gesture rule caution injury stick property decorate - raccoon physical narrow tuition address drum shoot pyramid record sport - include rich actress sadness crater seek" - + USER7_MNEMONIC="velvet gesture rule caution injury stick property decorate raccoon physical narrow tuition address drum shoot pyramid record sport include rich actress sadness crater seek" USER8_KEY="signer3" - - USER8_MNEMONIC="guitar parrot nuclear sun blue marble amazing extend solar - device address better chalk shock street absent follow notice female picnic - into trade brass couch" - + USER8_MNEMONIC="guitar parrot nuclear sun blue marble amazing extend solar device address better chalk shock street absent follow notice female picnic into trade brass couch" USER9_KEY="signer4" - - USER9_MNEMONIC="rotate fame stamp size inform hurdle match stick brain - shrimp fancy clinic soccer fortune photo gloom wear punch shed diet celery - blossom tide bulk" - + USER9_MNEMONIC="rotate fame stamp size inform hurdle match stick brain shrimp fancy clinic soccer fortune photo gloom wear punch shed diet celery blossom tide bulk" USER10_KEY="signer5" - - USER10_MNEMONIC="apart acid night more advance december weather expect pause - taxi reunion eternal crater crew lady chaos visual dynamic friend match glow - flash couple tumble" - + USER10_MNEMONIC="apart acid night more advance december weather expect pause taxi reunion eternal crater crew lady chaos visual dynamic friend match glow flash couple tumble" NEWLINE=$'\n' - # Import keys from mnemonics - - echo "$WASM_MNEMONIC" | $CHAIN_BIN keys add $WASM_KEY --recover - --keyring-backend="test" - - yes "$VAL_MNEMONIC" | $CHAIN_BIN keys add $VAL_KEY --recover - --keyring-backend="test" - - yes "$USER1_MNEMONIC" | $CHAIN_BIN keys add $USER1_KEY --recover - --keyring-backend="test" - - yes "$USER2_MNEMONIC" | $CHAIN_BIN keys add $USER2_KEY --recover - --keyring-backend="test" - - yes "$USER3_MNEMONIC" | $CHAIN_BIN keys add $USER3_KEY --recover - --keyring-backend="test" - - yes "$USER4_MNEMONIC" | $CHAIN_BIN keys add $USER4_KEY --recover - --keyring-backend="test" - - yes "$USER5_MNEMONIC" | $CHAIN_BIN keys add $USER5_KEY --recover - --keyring-backend="test" - - yes "$USER6_MNEMONIC" | $CHAIN_BIN keys add $USER6_KEY --recover - --keyring-backend="test" - - yes "$USER7_MNEMONIC" | $CHAIN_BIN keys add $USER7_KEY --recover - --keyring-backend="test" - - yes "$USER8_MNEMONIC" | $CHAIN_BIN keys add $USER8_KEY --recover - --keyring-backend="test" - - yes "$USER9_MNEMONIC" | $CHAIN_BIN keys add $USER9_KEY --recover - --keyring-backend="test" - - yes "$USER10_MNEMONIC" | $CHAIN_BIN keys add $USER10_KEY --recover - --keyring-backend="test" - + echo "$WASM_MNEMONIC" | $CHAIN_BIN keys add $WASM_KEY --recover --keyring-backend="test" + yes "$VAL_MNEMONIC" | $CHAIN_BIN keys add $VAL_KEY --recover --keyring-backend="test" + yes "$USER1_MNEMONIC" | $CHAIN_BIN keys add $USER1_KEY --recover --keyring-backend="test" + yes "$USER2_MNEMONIC" | $CHAIN_BIN keys add $USER2_KEY --recover --keyring-backend="test" + yes "$USER3_MNEMONIC" | $CHAIN_BIN keys add $USER3_KEY --recover --keyring-backend="test" + yes "$USER4_MNEMONIC" | $CHAIN_BIN keys add $USER4_KEY --recover --keyring-backend="test" + yes "$USER5_MNEMONIC" | $CHAIN_BIN keys add $USER5_KEY --recover --keyring-backend="test" + yes "$USER6_MNEMONIC" | $CHAIN_BIN keys add $USER6_KEY --recover --keyring-backend="test" + yes "$USER7_MNEMONIC" | $CHAIN_BIN keys add $USER7_KEY --recover --keyring-backend="test" + yes "$USER8_MNEMONIC" | $CHAIN_BIN keys add $USER8_KEY --recover --keyring-backend="test" + yes "$USER9_MNEMONIC" | $CHAIN_BIN keys add $USER9_KEY --recover --keyring-backend="test" + yes "$USER10_MNEMONIC" | $CHAIN_BIN keys add $USER10_KEY --recover --keyring-backend="test" # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID - $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) - --keyring-backend="test") - 1000000000000000000000000inj,1000000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") 1000000000000000000000000inj,1000000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend="test" # Add relayer keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".relayers[0].name" $KEYS_CONFIG) - - jq -r ".relayers[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".relayers[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID - $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) - --keyring-backend="test") 1000000000000000000000000inj - --keyring-backend="test" - + jq -r ".relayers[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".relayers[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend="test") 1000000000000000000000000inj --keyring-backend="test" # Add faucet keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID - $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) - --keyring-backend="test") 1000000000000000000000000inj - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") 1000000000000000000000000inj --keyring-backend="test" # zero address account - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID - inj1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqe2hm49 1inj - + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID inj1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqe2hm49 1inj # Allocate genesis accounts (cosmos formatted addresses) - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $WASM_KEY -a --keyring-backend="test") 1000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $VAL_KEY -a --keyring-backend="test") 1000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER1_KEY -a --keyring-backend="test") - 1000000000000000000000inj,1000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER2_KEY -a --keyring-backend="test") - 1000000000000000000000inj,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER3_KEY -a --keyring-backend="test") 1000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER4_KEY -a --keyring-backend="test") 1000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER5_KEY -a --keyring-backend="test") 100000000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER6_KEY -a --keyring-backend="test") 100000000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER7_KEY -a --keyring-backend="test") 100000000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER8_KEY -a --keyring-backend="test") 100000000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER9_KEY -a --keyring-backend="test") 100000000000000000000000000inj - --keyring-backend="test" - - $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show - $USER10_KEY -a --keyring-backend="test") 100000000000000000000000000inj - --keyring-backend="test" - + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $WASM_KEY -a --keyring-backend="test") 1000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $VAL_KEY -a --keyring-backend="test") 1000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER1_KEY -a --keyring-backend="test") 1000000000000000000000inj,1000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER2_KEY -a --keyring-backend="test") 1000000000000000000000inj,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER3_KEY -a --keyring-backend="test") 1000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER4_KEY -a --keyring-backend="test") 1000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER5_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER6_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER7_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER8_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER9_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER10_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" echo "Creating gentx..." - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - 1000000000000000000000inj --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) 1000000000000000000000inj --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - echo "Validate genesis" - $CHAIN_BIN validate-genesis - ls $CHAIN_DIR/config - updateGenesis.sh: > + updateGenesis.sh: | #!/bin/bash - DENOM="${DENOM:=inj}" - CHAIN_BIN="${CHAIN_BIN:=injectived}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.injectived}" - set -eu - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 "NOTE: Setting unbolding time to 300s to as to be able to set trusttime - on relayers correctly" - - 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 |= "6s"' - $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.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["staking"]["params"]["bond_denom"] |= "inj"' - $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json - $CHAIN_DIR/config/genesis.json - - jq -r '.app_state["crisis"]["constant_fee"]["denom"] |= "inj"' - $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]["denom"] |= - "inj"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv - /tmp/genesis.json $CHAIN_DIR/config/genesis.json - + sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" $CHAIN_DIR/config/genesis.json + + echo "NOTE: Setting unbolding time to 300s to as to be able to set trusttime on relayers correctly" + 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 |= "6s"' $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.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["staking"]["params"]["bond_denom"] |= "inj"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["crisis"]["constant_fee"]["denom"] |= "inj"' $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]["denom"] |= "inj"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json echo "NOTE: Setting Governance Voting Period to 10 seconds for easy testing" - - jq -r '.app_state["gov"]["voting_params"]["voting_period"] |= "10s"' - $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json - $CHAIN_DIR/config/genesis.json - - jq -r '.app_state["mint"]["params"]["mint_denom"] |= "inj"' - $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json - $CHAIN_DIR/config/genesis.json - - jq -r '.app_state["auction"]["params"]["auction_period"] |= "10"' - $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json - $CHAIN_DIR/config/genesis.json - - jq -r '.app_state["ocr"]["params"]["module_admin"] |= "'$FEEDADMIN'"' - $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json - $CHAIN_DIR/config/genesis.json - - jq -r '.app_state["ocr"]["params"]["payout_block_interval"] |= "5"' - $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"] |= "10s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["mint"]["params"]["mint_denom"] |= "inj"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["auction"]["params"]["auction_period"] |= "10"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["ocr"]["params"]["module_admin"] |= "'$FEEDADMIN'"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["ocr"]["params"]["payout_block_interval"] |= "5"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json INJ='{"denom":"inj","decimals":18}' - USDT='{"denom":"peggy0xdAC17F958D2ee523a2206206994597C13D831ec7","decimals":6}' - USDC='{"denom":"peggy0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","decimals":6}' - ONEINCH='{"denom":"peggy0x111111111117dc0aa78b770fa6a738034120c302","decimals":18}' - AAVE='{"denom":"peggy0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9","decimals":18}' - AXS='{"denom":"peggy0xBB0E17EF65F82Ab018d8EDd776e8DD940327B28b","decimals":18}' - BAT='{"denom":"peggy0x0D8775F648430679A709E98d2b0Cb6250d2887EF","decimals":18}' - BNB='{"denom":"peggy0xB8c77482e45F1F44dE1745F52C74426C631bDD52","decimals":18}' - WBTC='{"denom":"peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599","decimals":8}' - BUSD='{"denom":"peggy0x4Fabb145d64652a948d72533023f6E7A623C7C53","decimals":18}' - CEL='{"denom":"peggy0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d","decimals":4}' - CELL='{"denom":"peggy0x26c8AFBBFE1EBaca03C2bB082E69D0476Bffe099","decimals":18}' - CHZ='{"denom":"peggy0x3506424F91fD33084466F402d5D97f05F8e3b4AF","decimals":18}' - COMP='{"denom":"peggy0xc00e94Cb662C3520282E6f5717214004A7f26888","decimals":18}' - DAI='{"denom":"peggy0x6B175474E89094C44Da98b954EedeAC495271d0F","decimals":18}' - DEFI5='{"denom":"peggy0xfa6de2697D59E88Ed7Fc4dFE5A33daC43565ea41","decimals":18}' - ENJ='{"denom":"peggy0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c","decimals":18}' - WETH='{"denom":"peggy0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","decimals":18}' - EVAI='{"denom":"peggy0x50f09629d0afDF40398a3F317cc676cA9132055c","decimals":8}' - FTM='{"denom":"peggy0x4E15361FD6b4BB609Fa63C81A2be19d873717870","decimals":18}' - GF='{"denom":"peggy0xAaEf88cEa01475125522e117BFe45cF32044E238","decimals":18}' - GRT='{"denom":"peggy0xc944E90C64B2c07662A292be6244BDf05Cda44a7","decimals":18}' - HT='{"denom":"peggy0x6f259637dcD74C767781E37Bc6133cd6A68aa161","decimals":18}' - LINK='{"denom":"peggy0x514910771AF9Ca656af840dff83E8264EcF986CA","decimals":18}' - MATIC='{"denom":"peggy0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0","decimals":18}' - NEXO='{"denom":"peggy0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206","decimals":18}' - NOIA='{"denom":"peggy0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca","decimals":18}' - OCEAN='{"denom":"peggy0x967da4048cD07aB37855c090aAF366e4ce1b9F48","decimals":18}' - PAXG='{"denom":"peggy0x45804880De22913dAFE09f4980848ECE6EcbAf78","decimals":18}' - POOL='{"denom":"peggy0x0cEC1A9154Ff802e7934Fc916Ed7Ca50bDE6844e","decimals":18}' - QNT='{"denom":"peggy0x4a220E6096B25EADb88358cb44068A3248254675","decimals":18}' - RUNE='{"denom":"peggy0x3155BA85D5F96b2d030a4966AF206230e46849cb","decimals":18}' - SHIB='{"denom":"peggy0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE","decimals":18}' - SNX='{"denom":"peggy0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F","decimals":18}' - STARS='{"denom":"peggy0xc55c2175E90A46602fD42e931f62B3Acc1A013Ca","decimals":18}' - STT='{"denom":"peggy0xaC9Bb427953aC7FDDC562ADcA86CF42D988047Fd","decimals":18}' - SUSHI='{"denom":"peggy0x6B3595068778DD592e39A122f4f5a5cF09C90fE2","decimals":18}' - SWAP='{"denom":"peggy0xCC4304A31d09258b0029eA7FE63d032f52e44EFe","decimals":18}' - UMA='{"denom":"peggy0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828","decimals":18}' - UNI='{"denom":"peggy0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984","decimals":18}' - UTK='{"denom":"peggy0xdc9Ac3C20D1ed0B540dF9b1feDC10039Df13F99c","decimals":18}' - YFI='{"denom":"peggy0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e","decimals":18}' - ZRX='{"denom":"peggy0xE41d2489571d322189246DaFA5ebDe1F4699F498","decimals":18}' - ATOM='{"denom":"ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9","decimals":6}' - USTC='{"denom":"ibc/B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C","decimals":6}' - AXL='{"denom":"ibc/C49B72C4E85AE5361C3E0F0587B24F509CB16ECEB8970B6F917D697036AF49BE","decimals":6}' - XPRT='{"denom":"ibc/B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB","decimals":6}' - SCRT='{"denom":"ibc/3C38B741DF7CD6CAC484343A4994CFC74BC002D1840AAFD5416D9DAC61E37F10","decimals":6}' - OSMO='{"denom":"ibc/92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333","decimals":6}' - LUNC='{"denom":"ibc/B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395","decimals":6}' - HUAHUA='{"denom":"ibc/E7807A46C0B7B44B350DA58F51F278881B863EC4DCA94635DAB39E52C30766CB","decimals":6}' - EVMOS='{"denom":"ibc/16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821","decimals":18}' - DOT='{"denom":"ibc/624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4","decimals":10}' - PEGGY_DENOM_DECIMALS="${USDT},${USDC},${ONEINCH},${AXS},${BAT},${BNB},${WBTC},${BUSD},${CEL},${CELL},${CHZ},${COMP},${DAI},${DEFI5},${ENJ},${WETH},${EVAI},${FTM},${GF},${GRT},${HT},${LINK},${MATIC},${NEXO},${NOIA},${OCEAN},${PAXG},${POOL},${QNT},${RUNE},${SHIB},${SNX},${STARS},${STT},${SUSHI},${SWAP},${UMA},${UNI},${UTK},${YFI},${ZRX}" - IBC_DENOM_DECIMALS="${ATOM},${USTC},${AXL},${XPRT},${SCRT},${OSMO},${LUNC},${HUAHUA},${EVMOS},${DOT}" - DENOM_DECIMALS='['${INJ},${PEGGY_DENOM_DECIMALS},${IBC_DENOM_DECIMALS}']' - - jq -r '.app_state["exchange"]["denom_decimals"]='${DENOM_DECIMALS} - $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json - $CHAIN_DIR/config/genesis.json - + jq -r '.app_state["exchange"]["denom_decimals"]='${DENOM_DECIMALS} $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json $CHAIN_BIN tendermint show-node-id - echo "Validate genesis" - $CHAIN_BIN validate-genesis - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -594,27 +274,14 @@ data: 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 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 + 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 @@ -623,29 +290,14 @@ data: 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 + 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 createValidator.sh: | #!/bin/bash @@ -725,23 +377,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -766,14 +412,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -781,17 +422,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -800,53 +435,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/validator-service.yaml index 362255d88..08aa2630a 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: injective-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/validator-statefulset.yaml index 4aaadb696..2ee2d0bd5 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/injective/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." - echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/injective:v1.11.6 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: injectived - name: CHAIN_ID value: injective-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: injective-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: injectived - name: CHAIN_ID value: injective-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: injective-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.injectived name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/config-configmap.yaml deleted file mode 100644 index ab01d1046..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - injective-1.json: >- - {"chain_name":"injective","assets":[{"base":"inj","description":"The INJ - token is the native governance token for the Injective - chain.","denom_units":[{"denom":"inj","exponent":0},{"denom":"INJ","exponent":18}],"name":"Injective","display":"INJ","symbol":"INJ","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.svg"},"coingecko_id":"injective-protocol"}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/deployment.yaml index e79185371..026106f3a 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: injective-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: injective,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-injective-1 + - name: registry-injective-1 mountPath: /chains/injective-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-injective-1 + - name: registry-injective-1 configMap: - name: chain-injective-1 - - name: chain-cosmoshub-4 + name: registry-injective-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/injective-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/injective-1-configmap.yaml new file mode 100644 index 000000000..d640afe3e --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/injective-1-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-injective-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-injective-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "injective", + "status": "live", + "network_type": "devnet", + "chain_id": "injective-1", + "pretty_name": "Injective Devnet", + "bech32_prefix": "inj", + "daemon_name": "injectived", + "node_home": "/root/.injectived", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "inj", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "inj" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/InjectiveLabs/injective-chain-releases", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "injective", + "assets": [ + { + "base": "inj", + "description": "The INJ token is the native governance token for the Injective chain.", + "denom_units": [ + { + "denom": "inj", + "exponent": 0 + }, + { + "denom": "INJ", + "exponent": 18 + } + ], + "name": "Injective", + "display": "INJ", + "symbol": "INJ", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.svg" + }, + "coingecko_id": "injective-protocol" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/relayer/hermes-injective-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/relayer/hermes-injective-cosmos-configmap.yaml index 9e0346997..fa6b8b4f9 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/relayer/hermes-injective-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/relayer/hermes-injective-cosmos-configmap.yaml @@ -11,313 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-injective-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "injective-1" - type = "CosmosSdk" - key_name = "injective-1" - - rpc_addr = "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "inj" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - - address_type = { derivation = 'ethermint', proto_type = { pk_type = - '/injective.crypto.v1beta1.ethsecp256k1.PubKey' } } - + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/injective.crypto.v1beta1.ethsecp256k1.PubKey' } } gas_price = { price = 2500000, denom = "inj" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "injective-1" - type = "CosmosSdk" - key_name = "injective-1-cli" - - rpc_addr = "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "inj" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - - address_type = { derivation = 'ethermint', proto_type = { pk_type = - '/injective.crypto.v1beta1.ethsecp256k1.PubKey' } } - + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/injective.crypto.v1beta1.ethsecp256k1.PubKey' } } gas_price = { price = 2500000, denom = "inj" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/injective/relayer/hermes-injective-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/injective/relayer/hermes-injective-cosmos-statefulset.yaml index cc08b7832..fcd2e8994 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/injective/relayer/hermes-injective-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/injective/relayer/hermes-injective-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-injective-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for injective-1 service..." - - wait-for-service - injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for injective-1..." - hermes keys add \ --chain injective-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name injective-1 \ --hd-path "m/44'/60'/0'/0/0" - DENOM="inj" - - RLY_ADDR=$(hermes --json keys list --chain injective-1 | tail -1 | - jq -r '.result."injective-1".account') - + RLY_ADDR=$(hermes --json keys list --chain injective-1 | tail -1 | jq -r '.result."injective-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://injective-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for injective-1-cli..." + hermes keys add \ + --chain injective-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name injective-1-cli \ + --hd-path "m/44'/60'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain injective-1 | tail -1 | jq -r '.result."injective-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://injective-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain injective-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/genesis-statefulset.yaml index 9259cb418..bd7ebc369 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/genesis-service.yaml index 4990cdb2d..49d3de57a 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: juno-2-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/genesis-statefulset.yaml index 6b655991a..64b477bf6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: junod - name: CHAIN_ID value: juno-2 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: junod - name: CHAIN_ID value: juno-2 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.juno name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/setup-scripts-configmap.yaml index 1ffdb70b1..46a6198bc 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/juno/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: juno starship.io/chain-id: juno-2 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/genesis-statefulset.yaml index 2ef41081f..b68e7e2de 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/config-configmap.yaml deleted file mode 100644 index 8912d3dca..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/config-configmap.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} - juno-2.json: >- - {"chain_name":"juno","assets":[{"base":"ujuno","description":"The native - token of JUNO - Chain","name":"Juno","display":"juno","symbol":"JUNO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg"},"denom_units":[{"denom":"ujuno","exponent":0},{"denom":"juno","exponent":6}],"coingecko_id":"juno-network"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/deployment.yaml index b2e128262..1e6ff01e9 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/deployment.yaml @@ -13,45 +13,89 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4,juno-2 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub,juno - name: REGISTRY_CHAIN_CLIENT_RPCS - value: >- - http://localhost:26653,http://localhost:26657,http://localhost:26658 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS - value: >- - http://localhost:26653,http://localhost:26657,http://localhost:26658 + value: http://localhost:26653,http://localhost:26657,http://localhost:26658 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS - value: >- - http://localhost:1313,http://localhost:1317,http://localhost:1318 + value: http://localhost:1313,http://localhost:1317,http://localhost:1318 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 - - name: chain-juno-2 + - name: registry-juno-2 mountPath: /chains/juno-2 resources: limits: @@ -61,24 +105,22 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 - - name: chain-cosmoshub-4 + name: registry-osmosis-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 - - name: chain-juno-2 + name: registry-cosmoshub-4 + - name: registry-juno-2 configMap: - name: chain-juno-2 + name: registry-juno-2 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/juno-2-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/juno-2-configmap.yaml new file mode 100644 index 000000000..23586e466 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/juno-2-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-juno-2 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-juno-2 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "juno", + "status": "live", + "network_type": "devnet", + "chain_id": "juno-2", + "pretty_name": "Juno Devnet", + "bech32_prefix": "juno", + "daemon_name": "junod", + "node_home": "/root/.juno", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "ujuno", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ujuno" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/CosmosContracts/juno", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "juno", + "assets": [ + { + "base": "ujuno", + "description": "The native token of JUNO Chain", + "name": "Juno", + "display": "juno", + "symbol": "JUNO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg" + }, + "denom_units": [ + { + "denom": "ujuno", + "exponent": 0 + }, + { + "denom": "juno", + "exponent": 6 + } + ], + "coingecko_id": "juno-network" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-juno-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-juno-cosmos-configmap.yaml index e00a7aff1..6416d8629 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-juno-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-juno-cosmos-configmap.yaml @@ -11,311 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-juno-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "juno-2" - type = "CosmosSdk" - key_name = "juno-2" - - rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "juno" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "ujuno" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "juno-2" - type = "CosmosSdk" - key_name = "juno-2-cli" - - rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "juno" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "ujuno" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-juno-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-juno-cosmos-statefulset.yaml index f354bb3c6..bc998cb58 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-juno-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-juno-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-juno-2 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for juno-2 service..." - - wait-for-service - juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for juno-2..." - hermes keys add \ --chain juno-2 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name juno-2 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="ujuno" - - RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq - -r '.result."juno-2".account') - + RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for juno-2-cli..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name juno-2-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain juno-2 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmos-cosmos-configmap.yaml index c7f9c8f85..2fcda86a9 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmos-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmos-cosmos-configmap.yaml @@ -11,311 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-osmos-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1-cli" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmos-cosmos-statefulset.yaml index a68a6bf2a..c249bf90b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmos-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for osmosis-1..." - hermes keys add \ --chain osmosis-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name osmosis-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" - - RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | - jq -r '.result."osmosis-1".account') - + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmosis-juno-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmosis-juno-configmap.yaml index 7e9549ad6..d87c61c49 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmosis-juno-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmosis-juno-configmap.yaml @@ -11,311 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-osmosis-juno data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "juno-2" - type = "CosmosSdk" - key_name = "juno-2" - - rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "juno" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "ujuno" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1-cli" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "juno-2" - type = "CosmosSdk" - key_name = "juno-2-cli" - - rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "juno" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "ujuno" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmosis-juno-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmosis-juno-statefulset.yaml index 2e219fcfb..9f8636ba2 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmosis-juno-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-relayer/relayer/hermes-osmosis-juno-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-juno-2 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for juno-2 service..." + - |- - wait-for-service - juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for osmosis-1..." - hermes keys add \ --chain osmosis-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name osmosis-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" - - RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | - jq -r '.result."osmosis-1".account') - + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true - echo "Creating key for juno-2..." + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + echo "Creating key for juno-2..." hermes keys add \ --chain juno-2 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name juno-2 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="ujuno" - - RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq - -r '.result."juno-2".account') - + RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true + + echo "Creating key for juno-2-cli..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name juno-2-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain juno-2 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/genesis-statefulset.yaml index 414e8e5a6..a98cc9599 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,45 +84,30 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") - resources: &ref_0 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: limits: cpu: '0.4' memory: 1Gi @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -154,7 +171,13 @@ spec: echo "Running setup config script..." bash -e /scripts/update-config.sh - resources: *ref_0 + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -169,7 +192,13 @@ spec: - bash - '-c' - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet - resources: *ref_0 + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M volumeMounts: - mountPath: /faucet name: faucet @@ -209,7 +238,13 @@ spec: $CHAIN_BIN start $START_ARGS - resources: *ref_0 + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -286,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -315,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -347,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/validator-service.yaml index 82a7dfb81..4269dc589 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/validator-statefulset.yaml index 500d7a3ad..c13867027 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/osmosis/validator-statefulset.yaml @@ -50,13 +50,13 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,47 +119,31 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - resources: &ref_0 + resources: limits: cpu: '0.4' memory: 1Gi @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,43 +208,34 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml - resources: *ref_0 + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -280,7 +287,13 @@ spec: # Starting the chain $CHAIN_BIN start $START_ARGS - resources: *ref_0 + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -295,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -328,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/config-configmap.yaml deleted file mode 100644 index a40ed5f6b..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/deployment.yaml index cd638e273..629f5f5be 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator-starship-faucet/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/genesis-statefulset.yaml index 937321130..01b5b30ba 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.3' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/validator-service.yaml index 82a7dfb81..4269dc589 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/validator-statefulset.yaml index e261e4077..07c334d71 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/osmosis/validator-statefulset.yaml @@ -50,13 +50,13 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/config-configmap.yaml deleted file mode 100644 index a40ed5f6b..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/deployment.yaml index cd638e273..629f5f5be 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/multi-validator/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/genesis-statefulset.yaml index b8718839a..42fe7ad06 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/genesis-service.yaml index dadfea71c..7a3d9fc86 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: neutron-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/genesis-statefulset.yaml index 30a50b0ea..32350bf6b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: neutrond - name: CHAIN_ID value: neutron-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: neutrond - name: CHAIN_ID value: neutron-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -181,22 +198,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-ics image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -226,30 +243,18 @@ spec: command: - bash - '-c' - - >- + - |- export - echo "Fetching priv keys from provider exposer" - - curl -s - http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8081/priv_keys - | jq > $CHAIN_DIR/config/provider_priv_validator_key.json - + curl -s http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8081/priv_keys | jq > $CHAIN_DIR/config/provider_priv_validator_key.json cat $CHAIN_DIR/config/provider_priv_validator_key.json - echo "Replace provider priv validator key with provider keys" - - mv $CHAIN_DIR/config/priv_validator_key.json - $CHAIN_DIR/config/previous_priv_validator_key.json - - mv $CHAIN_DIR/config/provider_priv_validator_key.json - $CHAIN_DIR/config/priv_validator_key.json - + mv $CHAIN_DIR/config/priv_validator_key.json $CHAIN_DIR/config/previous_priv_validator_key.json + mv $CHAIN_DIR/config/provider_priv_validator_key.json $CHAIN_DIR/config/priv_validator_key.json echo "Create consumer addition proposal" - DENOM=uatom \ CHAIN_ID=cosmoshub-4 \ CHAIN_BIN=gaiad \ @@ -258,24 +263,15 @@ spec: bash -e /scripts/create-ics.sh echo "create ccv state file" - gaiad query provider consumer-genesis neutron-1 \ --node http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657 \ -o json > $CHAIN_DIR/config/ccv-state.json cat $CHAIN_DIR/config/ccv-state.json | jq - echo "Update genesis file with ccv state" - - jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' - $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/ccv-state.json > - $CHAIN_DIR/config/genesis-ccv.json - - mv $CHAIN_DIR/config/genesis.json - $CHAIN_DIR/config/genesis-no-ccv.json - - mv $CHAIN_DIR/config/genesis-ccv.json - $CHAIN_DIR/config/genesis.json + jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/ccv-state.json > $CHAIN_DIR/config/genesis-ccv.json + mv $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/genesis-no-ccv.json + mv $CHAIN_DIR/config/genesis-ccv.json $CHAIN_DIR/config/genesis.json resources: limits: cpu: '0.5' @@ -353,7 +349,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -384,11 +380,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.neutrond name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/setup-scripts-configmap.yaml index 8979cdbcc..335df88f2 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/neutron/setup-scripts-configmap.yaml @@ -13,83 +13,51 @@ metadata: starship.io/chain-name: neutron starship.io/chain-id: neutron-1 data: - createGenesis.sh: > + createGenesis.sh: | #!/bin/bash - DENOM="${DENOM:=untrn}" - STAKEDENOM=${DENOM:-untrn} - COINS="${COINS:=100000000000000000untrn}" - CHAIN_ID="${CHAIN_ID:=neutron-1}" - BINARY="${CHAIN_BIN:=neutrond}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.neutrond}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - BRANCH="${BRANCH:=v3.0.5}" - FAUCET_ENABLED="${FAUCET_ENABLED:=true}" - NUM_VALIDATORS="${NUM_VALIDATORS:=1}" - NUM_RELAYERS="${NUM_RELAYERS:=0}" - GENESIS_PATH="$CHAIN_DIR/config/genesis.json" - CONTRACTS_BINARIES_DIR=${CONTRACTS_BINARIES_DIR:-./contracts} - THIRD_PARTY_CONTRACTS_DIR=${THIRD_PARTY_CONTRACTS_DIR:-./contracts_thirdparty} - set -euxo pipefail - mkdir -p $CONTRACTS_BINARIES_DIR $THIRD_PARTY_CONTRACTS_DIR - function download_contract() { CONTRACT_NAME="$1" # / CONTRACT_URI=${CONTRACT_NAME#"./"} curl https://github.com/neutron-org/neutron/raw/$BRANCH/$CONTRACT_URI -L -o $CONTRACT_NAME } - $BINARY init $CHAIN_ID --chain-id $CHAIN_ID - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .genesis[0].name - $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .faucet[0].name - $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --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); @@ -102,340 +70,174 @@ data: done fi - # Add test addresses, admin address - echo "Adding key.... demowallet1" - - jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet1 - --index 1 --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a demowallet1 - --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet1 --index 1 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet1 --keyring-backend="test") $COINS --keyring-backend="test" # Add test addresses, second multisig address - echo "Adding key.... demowallet2" - - jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet2 - --index 2 --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a demowallet2 - --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet2 --index 2 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet2 --keyring-backend="test") $COINS --keyring-backend="test" # Add test addresses, second multisig address - echo "Adding key.... demowallet2" - - jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet3 - --index 3 --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a demowallet3 - --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet3 --index 3 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet3 --keyring-backend="test") $COINS --keyring-backend="test" echo "Update genesis.json file with updated local params" - - sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" - $CHAIN_DIR/config/genesis.json - + sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" $CHAIN_DIR/config/genesis.json sed -i -e "s/\"denom\": \"stake\",/\"denom\": \"$DENOM\",/g" "$GENESIS_PATH" + sed -i -e "s/\"mint_denom\": \"stake\",/\"mint_denom\": \"$DENOM\",/g" "$GENESIS_PATH" + sed -i -e "s/\"bond_denom\": \"stake\"/\"bond_denom\": \"$DENOM\"/g" "$GENESIS_PATH" - sed -i -e "s/\"mint_denom\": \"stake\",/\"mint_denom\": \"$DENOM\",/g" - "$GENESIS_PATH" - - sed -i -e "s/\"bond_denom\": \"stake\"/\"bond_denom\": \"$DENOM\"/g" - "$GENESIS_PATH" - - - # IMPORTANT! minimum_gas_prices should always contain at least one record, - otherwise the chain will not start or halt - + # IMPORTANT! minimum_gas_prices should always contain at least one record, otherwise the chain will not start or halt MIN_GAS_PRICES_DEFAULT='[{"denom":"untrn","amount":"0"}]' - MIN_GAS_PRICES=${MIN_GAS_PRICES:-"$MIN_GAS_PRICES_DEFAULT"} - - BYPASS_MIN_FEE_MSG_TYPES_DEFAULT='["/ibc.core.channel.v1.Msg/RecvPacket", - "/ibc.core.channel.v1.Msg/Acknowledgement", - "/ibc.core.client.v1.Msg/UpdateClient"]' - + BYPASS_MIN_FEE_MSG_TYPES_DEFAULT='["/ibc.core.channel.v1.Msg/RecvPacket", "/ibc.core.channel.v1.Msg/Acknowledgement", "/ibc.core.client.v1.Msg/UpdateClient"]' BYPASS_MIN_FEE_MSG_TYPES=${BYPASS_MIN_FEE_MSG_TYPES:-"$BYPASS_MIN_FEE_MSG_TYPES_DEFAULT"} - MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE_DEFAULT=1000000 - MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE=${MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE:-"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE_DEFAULT"} - ADMIN_ADDRESS=$($BINARY keys show demowallet1 -a --keyring-backend="test") - - SECOND_MULTISIG_ADDRESS=$($BINARY keys show demowallet2 -a - --keyring-backend="test") - + SECOND_MULTISIG_ADDRESS=$($BINARY keys show demowallet2 -a --keyring-backend="test") ls $CHAIN_DIR/config - # MAIN_DAO - DAO_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_core.wasm - download_contract $DAO_CONTRACT - PRE_PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_single.wasm - download_contract $PRE_PROPOSAL_CONTRACT - PRE_PROPOSAL_MULTIPLE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_multiple.wasm - download_contract $PRE_PROPOSAL_MULTIPLE_CONTRACT - PRE_PROPOSAL_OVERRULE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_overrule.wasm - download_contract $PRE_PROPOSAL_OVERRULE_CONTRACT - PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_proposal_single.wasm - download_contract $PROPOSAL_CONTRACT - PROPOSAL_MULTIPLE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_proposal_multiple.wasm - download_contract $PROPOSAL_MULTIPLE_CONTRACT - VOTING_REGISTRY_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_voting_registry.wasm - download_contract $VOTING_REGISTRY_CONTRACT - # VAULTS - NEUTRON_VAULT_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_vault.wasm - download_contract $NEUTRON_VAULT_CONTRACT - NEUTRON_INVESTORS_VAULT=$CONTRACTS_BINARIES_DIR/investors_vesting_vault.wasm - download_contract $NEUTRON_INVESTORS_VAULT - # VESTING - NEUTRON_VESTING_INVESTORS=$CONTRACTS_BINARIES_DIR/vesting_investors.wasm - download_contract $NEUTRON_VESTING_INVESTORS - # RESERVE - RESERVE_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_reserve.wasm - download_contract $RESERVE_CONTRACT - DISTRIBUTION_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_distribution.wasm - download_contract $DISTRIBUTION_CONTRACT - # SUBDAOS - SUBDAO_CORE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_core.wasm - download_contract $SUBDAO_CORE_CONTRACT - SUBDAO_TIMELOCK_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_timelock_single.wasm - download_contract $SUBDAO_TIMELOCK_CONTRACT - SUBDAO_PRE_PROPOSE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_pre_propose_single.wasm - download_contract $SUBDAO_PRE_PROPOSE_CONTRACT - SUBDAO_PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_proposal_single.wasm - download_contract $SUBDAO_PROPOSAL_CONTRACT - CW4_VOTING_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_voting.wasm - download_contract $CW4_VOTING_CONTRACT - CW4_GROUP_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_group.wasm - download_contract $CW4_GROUP_CONTRACT - echo "Add consumer section..." - $BINARY add-consumer-section --home "$CHAIN_DIR" - ### PARAMETERS SECTION - ## slashing params - SLASHING_SIGNED_BLOCKS_WINDOW=140000 - SLASHING_MIN_SIGNED=0.050000000000000000 - SLASHING_FRACTION_DOUBLE_SIGN=0.010000000000000000 - SLASHING_FRACTION_DOWNTIME=0.000100000000000000 - ##pre propose single parameters - PRE_PROPOSAL_SINGLE_AMOUNT=1000 - PRE_PROPOSAL_SINGLE_REFUND_POLICY="only_passed" - PRE_PROPOSAL_SINGLE_OPEN_PROPOSAL_SUBMISSION=false - ## proposal singe params - PROPOSAL_ALLOW_REVOTING=false # should be true for non-testing env - PROPOSAL_SINGLE_ONLY_MEMBERS_EXECUTE=false - - PROPOSAL_SINGLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in - production - + PROPOSAL_SINGLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in production PROPOSAL_SINGLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false - - PROPOSAL_SINGLE_QUORUM=0.05 # quorum to consider proposal's result viable - [float] < 1 - - PROPOSAL_SINGLE_THRESHOLD=0.5 # % of votes should vote for the proposal to - pass [float] <1 - + PROPOSAL_SINGLE_QUORUM=0.05 # quorum to consider proposal's result viable [float] < 1 + PROPOSAL_SINGLE_THRESHOLD=0.5 # % of votes should vote for the proposal to pass [float] <1 PROPOSAL_SINGLE_LABEL="neutron.proposals.single" - PRE_PROPOSAL_SINGLE_LABEL="neutron.proposals.single.pre_propose" - ## propose multiple params - PROPOSAL_MULTIPLE_ALLOW_REVOTING=false # should be true for non-testing env - PROPOSAL_MULTIPLE_ONLY_MEMBERS_EXECUTE=false - - PROPOSAL_MULTIPLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks - in production - + PROPOSAL_MULTIPLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in production PROPOSAL_MULTIPLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false - - PROPOSAL_MULTIPLE_QUORUM=0.05 # quorum to consider proposal's result viable - [float] < 1 - + PROPOSAL_MULTIPLE_QUORUM=0.05 # quorum to consider proposal's result viable [float] < 1 PROPOSAL_MULTIPLE_LABEL="neutron.proposals.multiple" - PRE_PROPOSAL_MULTIPLE_LABEL="neutron.proposals.multiple.pre_propose" - ## Propose overrule params - PROPOSAL_OVERRULE_ALLOW_REVOTING=false - PROPOSAL_OVERRULE_ONLY_MEMBERS_EXECUTE=false - - PROPOSAL_OVERRULE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 3 days in - production - + PROPOSAL_OVERRULE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 3 days in production PROPOSAL_OVERRULE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false - - PROPOSAL_OVERRULE_THRESHOLD=0.005 # around 10 times lower than for regular - proposals - + PROPOSAL_OVERRULE_THRESHOLD=0.005 # around 10 times lower than for regular proposals PROPOSAL_OVERRULE_LABEL="neutron.proposals.overrule" - PRE_PROPOSE_OVERRULE_LABEL="neutron.proposals.overrule.pre_propose" - ## Voting registry - VOTING_REGISTRY_LABEL="neutron.voting" - ## DAO - DAO_NAME="Neutron DAO" - DAO_DESCRIPTION="Neutron DAO is a DAO DAO-based governance of Neutron chain" - DAO_CORE_LABEL="neutron.core" - ## Neutron vault - NEUTRON_VAULT_NAME="Neutron Vault" - NEUTRON_VAULT_DESCRIPTION="Vault to put NTRN tokens to get voting power" - NEUTRON_VAULT_LABEL="neutron.voting.vaults.neutron" - NEUTRON_INVESTORS_VAULT_NAME="Neutron Investors Vault" - - NEUTRON_INVESTORS_VAULT_DESCRIPTION="Vault sourcing voting power form - investors vesting" - + NEUTRON_INVESTORS_VAULT_DESCRIPTION="Vault sourcing voting power form investors vesting" NEUTRON_INVESTORS_VAULT_LABEL="neutron.voting.vaults.investors" - # VESTING (for tests purposes) - NEUTRON_VESTING_INVESTORS_LABEL="neutron.vesting.investors" - ## Reserve - RESERVE_DISTRIBUTION_RATE=0 - RESERVE_MIN_PERIOD=10 - RESERVE_VESTING_DENOMINATOR=1 - RESERVE_LABEL="reserve" - DISTRIBUTION_LABEL="distribution" - ## Grants subdao - GRANTS_SUBDAO_CORE_NAME="Grants SubDAO" - GRANTS_SUBDAO_CORE_DESCRIPTION="SubDAO to distribute grants to projects" - GRANTS_SUBDAO_CORE_LABEL="neutron.subdaos.grants.core" - GRANTS_SUBDAO_PROPOSAL_LABEL="neutron.subdaos.grants.proposals.single" - GRANTS_SUBDAO_PRE_PROPOSE_LABEL="neutron.subdaos.grants.proposals.single.pre_propose" - GRANTS_SUBDAO_VOTING_MODULE_LABEL="neutron.subdaos.grants.voting" - ## Timelock - GRANTS_SUBDAO_TIMELOCK_LABEL="neutron.subdaos.grants.proposals.single.pre_propose.timelock" - ## Security subdao - SECURITY_SUBDAO_CORE_NAME="Security SubDAO" - - SECURITY_SUBDAO_CORE_DESCRIPTION="SubDAO with power to pause specific - Neutron DAO modules" - + SECURITY_SUBDAO_CORE_DESCRIPTION="SubDAO with power to pause specific Neutron DAO modules" SECURITY_SUBDAO_CORE_LABEL="neutron.subdaos.security.core" - SECURITY_SUBDAO_PROPOSAL_LABEL="neutron.subdaos.security.proposals.single" - SECURITY_SUBDAO_PRE_PROPOSE_LABEL="neutron.subdaos.security.proposals.single.pre_propose" - SECURITY_SUBDAO_VOTE_LABEL="neutron.subdaos.security.voting" - echo "Initializing dao contract in genesis..." - function store_binary() { CONTRACT_BINARY_PATH=$1 $BINARY add-wasm-message store "$CONTRACT_BINARY_PATH" \ @@ -444,89 +246,38 @@ data: echo "$BINARY_ID" } - # Upload the dao contracts - # MAIN_DAO - DAO_CONTRACT_BINARY_ID=$(store_binary "$DAO_CONTRACT") - - PRE_PROPOSAL_CONTRACT_BINARY_ID=$(store_binary - "$PRE_PROPOSAL_CONTRACT") - - PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary - "$PRE_PROPOSAL_MULTIPLE_CONTRACT") - - PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID=$(store_binary - "$PRE_PROPOSAL_OVERRULE_CONTRACT") - - PROPOSAL_CONTRACT_BINARY_ID=$(store_binary - "$PROPOSAL_CONTRACT") - - PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary - "$PROPOSAL_MULTIPLE_CONTRACT") - - VOTING_REGISTRY_CONTRACT_BINARY_ID=$(store_binary - "$VOTING_REGISTRY_CONTRACT") - + PRE_PROPOSAL_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_CONTRACT") + PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_MULTIPLE_CONTRACT") + PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_OVERRULE_CONTRACT") + PROPOSAL_CONTRACT_BINARY_ID=$(store_binary "$PROPOSAL_CONTRACT") + PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary "$PROPOSAL_MULTIPLE_CONTRACT") + VOTING_REGISTRY_CONTRACT_BINARY_ID=$(store_binary "$VOTING_REGISTRY_CONTRACT") # VAULTS - - NEUTRON_VAULT_CONTRACT_BINARY_ID=$(store_binary - "$NEUTRON_VAULT_CONTRACT") - - NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID=$(store_binary - "$NEUTRON_INVESTORS_VAULT") - + NEUTRON_VAULT_CONTRACT_BINARY_ID=$(store_binary "$NEUTRON_VAULT_CONTRACT") + NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID=$(store_binary "$NEUTRON_INVESTORS_VAULT") # VESTING - - NEUTRON_VESTING_INVESTORS_BINARY_ID=$(store_binary - "$NEUTRON_VESTING_INVESTORS") - + NEUTRON_VESTING_INVESTORS_BINARY_ID=$(store_binary "$NEUTRON_VESTING_INVESTORS") # RESERVE - - DISTRIBUTION_CONTRACT_BINARY_ID=$(store_binary - "$DISTRIBUTION_CONTRACT") - + DISTRIBUTION_CONTRACT_BINARY_ID=$(store_binary "$DISTRIBUTION_CONTRACT") RESERVE_CONTRACT_BINARY_ID=$(store_binary "$RESERVE_CONTRACT") - # SUBDAOS - - SUBDAO_CORE_BINARY_ID=$(store_binary - "$SUBDAO_CORE_CONTRACT") - - SUBDAO_TIMELOCK_BINARY_ID=$(store_binary - "$SUBDAO_TIMELOCK_CONTRACT") - - SUBDAO_PRE_PROPOSE_BINARY_ID=$(store_binary - "$SUBDAO_PRE_PROPOSE_CONTRACT") - - SUBDAO_PROPOSAL_BINARY_ID=$(store_binary - "$SUBDAO_PROPOSAL_CONTRACT") - - CW4_VOTING_CONTRACT_BINARY_ID=$(store_binary - "$CW4_VOTING_CONTRACT") - - CW4_GROUP_CONTRACT_BINARY_ID=$(store_binary - "$CW4_GROUP_CONTRACT") - + SUBDAO_CORE_BINARY_ID=$(store_binary "$SUBDAO_CORE_CONTRACT") + SUBDAO_TIMELOCK_BINARY_ID=$(store_binary "$SUBDAO_TIMELOCK_CONTRACT") + SUBDAO_PRE_PROPOSE_BINARY_ID=$(store_binary "$SUBDAO_PRE_PROPOSE_CONTRACT") + SUBDAO_PROPOSAL_BINARY_ID=$(store_binary "$SUBDAO_PROPOSAL_CONTRACT") + CW4_VOTING_CONTRACT_BINARY_ID=$(store_binary "$CW4_VOTING_CONTRACT") + CW4_GROUP_CONTRACT_BINARY_ID=$(store_binary "$CW4_GROUP_CONTRACT") # WARNING! - # The following code is needed to pre-generate the contract addresses - # Those addresses depend on the ORDER OF CONTRACTS INITIALIZATION - - # Thus, this code section depends a lot on the order and content of the - instantiate-contract commands at the end script - - # It also depends on the implicitly initialized contracts (e.g. DAO core - instantiation also instantiate proposals and stuff) - + # Thus, this code section depends a lot on the order and content of the instantiate-contract commands at the end script + # It also depends on the implicitly initialized contracts (e.g. DAO core instantiation also instantiate proposals and stuff) # If you're to do any changes, please do it consistently in both sections - - # If you're to do add any implicitly initialized contracts in init messages, - please reflect changes here - + # If you're to do add any implicitly initialized contracts in init messages, please reflect changes here function genaddr() { CODE_ID=$1 @@ -534,96 +285,40 @@ data: echo "$CONTRACT_ADDRESS" } - INSTANCE_ID_COUNTER=1 - # VAULTS - - NEUTRON_VAULT_CONTRACT_ADDRESS=$(genaddr - "$NEUTRON_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS=$(genaddr - "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ - )) - + NEUTRON_VAULT_CONTRACT_ADDRESS=$(genaddr "$NEUTRON_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS=$(genaddr "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) # VESTING - - NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES=$(genaddr - "$NEUTRON_VESTING_INVESTORS_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - + NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES=$(genaddr "$NEUTRON_VESTING_INVESTORS_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) # MAIN_DAO - - DAO_CONTRACT_ADDRESS=$(genaddr - "$DAO_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - VOTING_REGISTRY_CONTRACT_ADDRESS=$(genaddr - "$VOTING_REGISTRY_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PROPOSAL_SINGLE_CONTRACT_ADDRESS=$(genaddr - "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PRE_PROPOSAL_CONTRACT_ADDRESS=$(genaddr - "$PRE_PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr - "$PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PRE_PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr - "$PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr - "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr - "$PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - + DAO_CONTRACT_ADDRESS=$(genaddr "$DAO_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + VOTING_REGISTRY_CONTRACT_ADDRESS=$(genaddr "$VOTING_REGISTRY_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_SINGLE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) # RESERVE - - RESERVE_CONTRACT_ADDRESS=$(genaddr - "$RESERVE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - DISTRIBUTION_CONTRACT_ADDRESS=$(genaddr - "$DISTRIBUTION_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - + RESERVE_CONTRACT_ADDRESS=$(genaddr "$RESERVE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + DISTRIBUTION_CONTRACT_ADDRESS=$(genaddr "$DISTRIBUTION_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) # SUBDAOS - - SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - SECURITY_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr - "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - SECURITY_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr - "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - SECURITY_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - SECURITY_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr - "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_PRE_PROPOSE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_TIMELOCK_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_TIMELOCK_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr - "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - + SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PRE_PROPOSE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_TIMELOCK_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_TIMELOCK_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) function check_json() { MSG=$1 @@ -633,17 +328,13 @@ data: fi } - function json_to_base64() { MSG=$1 check_json "$MSG" echo "$MSG" | base64 | tr -d "\n" } - - # PRE_PROPOSE_INIT_MSG will be put into the PROPOSAL_SINGLE_INIT_MSG and - PROPOSAL_MULTIPLE_INIT_MSG - + # PRE_PROPOSE_INIT_MSG will be put into the PROPOSAL_SINGLE_INIT_MSG and PROPOSAL_MULTIPLE_INIT_MSG PRE_PROPOSE_INIT_MSG='{ "deposit_info":{ "denom":{ @@ -658,13 +349,10 @@ data: }, "open_proposal_submission": '"$PRE_PROPOSAL_SINGLE_OPEN_PROPOSAL_SUBMISSION"' }' - PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$PRE_PROPOSE_INIT_MSG") - # -------------------- PROPOSE-SINGLE { PRE-PROPOSE } -------------------- - PROPOSAL_SINGLE_INIT_MSG='{ "allow_revoting":'"$PROPOSAL_ALLOW_REVOTING"', "pre_propose_info":{ @@ -695,14 +383,10 @@ data: } } }' - - PROPOSAL_SINGLE_INIT_MSG_BASE64=$(json_to_base64 - "$PROPOSAL_SINGLE_INIT_MSG") - + PROPOSAL_SINGLE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_SINGLE_INIT_MSG") # -------------------- PROPOSE-MULTIPLE { PRE-PROPOSE } -------------------- - PROPOSAL_MULTIPLE_INIT_MSG='{ "allow_revoting":'"$PROPOSAL_MULTIPLE_ALLOW_REVOTING"', "pre_propose_info":{ @@ -730,24 +414,14 @@ data: } } }' + PROPOSAL_MULTIPLE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_MULTIPLE_INIT_MSG") - PROPOSAL_MULTIPLE_INIT_MSG_BASE64=$(json_to_base64 - "$PROPOSAL_MULTIPLE_INIT_MSG") - - - # PRE_PROPOSE_OVERRULE_INIT_MSG will be put into the - PROPOSAL_OVERRULE_INIT_MSG - + # PRE_PROPOSE_OVERRULE_INIT_MSG will be put into the PROPOSAL_OVERRULE_INIT_MSG PRE_PROPOSE_OVERRULE_INIT_MSG='{}' - - PRE_PROPOSE_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 - "$PRE_PROPOSE_OVERRULE_INIT_MSG") - + PRE_PROPOSE_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 "$PRE_PROPOSE_OVERRULE_INIT_MSG") - # -------------------- PROPOSE-OVERRULE { PRE-PROPOSE-OVERRULE } - -------------------- - + # -------------------- PROPOSE-OVERRULE { PRE-PROPOSE-OVERRULE } -------------------- PROPOSAL_OVERRULE_INIT_MSG='{ "allow_revoting":'"$PROPOSAL_OVERRULE_ALLOW_REVOTING"', @@ -776,10 +450,7 @@ data: } } }' - - PROPOSAL_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 - "$PROPOSAL_OVERRULE_INIT_MSG") - + PROPOSAL_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_OVERRULE_INIT_MSG") VOTING_REGISTRY_INIT_MSG='{ "owner": "'"$DAO_CONTRACT_ADDRESS"'", @@ -788,10 +459,7 @@ data: "'"$NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS"'" ] }' - - VOTING_REGISTRY_INIT_MSG_BASE64=$(json_to_base64 - "$VOTING_REGISTRY_INIT_MSG") - + VOTING_REGISTRY_INIT_MSG_BASE64=$(json_to_base64 "$VOTING_REGISTRY_INIT_MSG") DAO_INIT='{ "description": "'"$DAO_DESCRIPTION"'", @@ -832,9 +500,7 @@ data: } }' - # RESERVE - RESERVE_INIT='{ "main_dao_address": "'"$DAO_CONTRACT_ADDRESS"'", "security_dao_address": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'", @@ -846,17 +512,14 @@ data: "vesting_denominator": "'"$RESERVE_VESTING_DENOMINATOR"'" }' - DISTRIBUTION_INIT='{ "main_dao_address": "'"$DAO_CONTRACT_ADDRESS"'", "security_dao_address": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'", "denom": "'"$STAKEDENOM"'" }' - # VAULTS - NEUTRON_VAULT_INIT='{ "owner": "'"$DAO_CONTRACT_ADDRESS"'", "name": "'"$NEUTRON_VAULT_NAME"'", @@ -864,7 +527,6 @@ data: "description": "'"$NEUTRON_VAULT_DESCRIPTION"'" }' - NEUTRON_INVESTORS_VAULT_INIT='{ "vesting_contract_address": "'"$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES"'", "owner": "'"$DAO_CONTRACT_ADDRESS"'", @@ -872,18 +534,14 @@ data: "name": "'"$NEUTRON_INVESTORS_VAULT_NAME"'" }' - # VESTING - NEUTRON_VESTING_INVESTORS_INIT='{ "owner": "'"$ADMIN_ADDRESS"'", "token_info_manager": "'"$ADMIN_ADDRESS"'" }' - # CW4 MODULES FOR SUBDAOS - CW4_VOTE_INIT_MSG='{ "cw4_group_code_id": '"$CW4_GROUP_CONTRACT_BINARY_ID"', "initial_members": [ @@ -897,23 +555,15 @@ data: } ] }' - CW4_VOTE_INIT_MSG_BASE64=$(json_to_base64 "$CW4_VOTE_INIT_MSG") - # SECURITY_SUBDAO - - # SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG will be put into the - SECURITY_SUBDAO_PROPOSAL_INIT_MSG - + # SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG will be put into the SECURITY_SUBDAO_PROPOSAL_INIT_MSG SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG='{ "open_proposal_submission": false }' - - SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 - "$SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG") - + SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG") SECURITY_SUBDAO_PROPOSAL_INIT_MSG='{ "allow_revoting": false, @@ -942,10 +592,7 @@ data: } } }' - - SECURITY_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 - "$SECURITY_SUBDAO_PROPOSAL_INIT_MSG") - + SECURITY_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 "$SECURITY_SUBDAO_PROPOSAL_INIT_MSG") SECURITY_SUBDAO_CORE_INIT_MSG='{ "name": "'"$SECURITY_SUBDAO_CORE_NAME"'", @@ -976,17 +623,12 @@ data: "security_dao": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" }' - # GRANTS_SUBDAO - GRANTS_SUBDAO_TIMELOCK_INIT_MSG='{ "overrule_pre_propose": "'"$PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS"'" }' - - GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64=$(json_to_base64 - "$GRANTS_SUBDAO_TIMELOCK_INIT_MSG") - + GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_TIMELOCK_INIT_MSG") GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG='{ "open_proposal_submission": false, @@ -1001,10 +643,7 @@ data: "msg": "'"$GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64"'" } }' - - GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 - "$GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG") - + GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG") GRANTS_SUBDAO_PROPOSAL_INIT_MSG='{ "allow_revoting": false, @@ -1033,10 +672,7 @@ data: } } }' - - GRANTS_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 - "$GRANTS_SUBDAO_PROPOSAL_INIT_MSG") - + GRANTS_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_PROPOSAL_INIT_MSG") GRANTS_SUBDAO_CORE_INIT_MSG='{ "name": "'"$GRANTS_SUBDAO_CORE_NAME"'", @@ -1067,10 +703,8 @@ data: "security_dao": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" }' - echo "Instantiate contracts" - function init_contract() { BINARY_ID=$1 INIT_MSG=$2 @@ -1080,40 +714,18 @@ data: --run-as "$DAO_CONTRACT_ADDRESS" --admin "$DAO_CONTRACT_ADDRESS" --home "$CHAIN_DIR" } - # WARNING! - # The following code is to add contracts instantiations messages to genesis - - # It affects the section of predicting contracts addresses at the beginning - of the script - + # It affects the section of predicting contracts addresses at the beginning of the script # If you're to do any changes, please do it consistently in both sections - - init_contract "$NEUTRON_VAULT_CONTRACT_BINARY_ID" - "$NEUTRON_VAULT_INIT" "$NEUTRON_VAULT_LABEL" - - init_contract "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID" - "$NEUTRON_INVESTORS_VAULT_INIT" "$NEUTRON_INVESTORS_VAULT_LABEL" - - init_contract "$NEUTRON_VESTING_INVESTORS_BINARY_ID" - "$NEUTRON_VESTING_INVESTORS_INIT" "$NEUTRON_VESTING_INVESTORS_LABEL" - - init_contract "$DAO_CONTRACT_BINARY_ID" - "$DAO_INIT" "$DAO_CORE_LABEL" - - init_contract "$RESERVE_CONTRACT_BINARY_ID" - "$RESERVE_INIT" "$RESERVE_LABEL" - - init_contract "$DISTRIBUTION_CONTRACT_BINARY_ID" - "$DISTRIBUTION_INIT" "$DISTRIBUTION_LABEL" - - init_contract "$SUBDAO_CORE_BINARY_ID" - "$SECURITY_SUBDAO_CORE_INIT_MSG" "$SECURITY_SUBDAO_CORE_LABEL" - - init_contract "$SUBDAO_CORE_BINARY_ID" - "$GRANTS_SUBDAO_CORE_INIT_MSG" "$GRANTS_SUBDAO_CORE_LABEL" - + init_contract "$NEUTRON_VAULT_CONTRACT_BINARY_ID" "$NEUTRON_VAULT_INIT" "$NEUTRON_VAULT_LABEL" + init_contract "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID" "$NEUTRON_INVESTORS_VAULT_INIT" "$NEUTRON_INVESTORS_VAULT_LABEL" + init_contract "$NEUTRON_VESTING_INVESTORS_BINARY_ID" "$NEUTRON_VESTING_INVESTORS_INIT" "$NEUTRON_VESTING_INVESTORS_LABEL" + init_contract "$DAO_CONTRACT_BINARY_ID" "$DAO_INIT" "$DAO_CORE_LABEL" + init_contract "$RESERVE_CONTRACT_BINARY_ID" "$RESERVE_INIT" "$RESERVE_LABEL" + init_contract "$DISTRIBUTION_CONTRACT_BINARY_ID" "$DISTRIBUTION_INIT" "$DISTRIBUTION_LABEL" + init_contract "$SUBDAO_CORE_BINARY_ID" "$SECURITY_SUBDAO_CORE_INIT_MSG" "$SECURITY_SUBDAO_CORE_LABEL" + init_contract "$SUBDAO_CORE_BINARY_ID" "$GRANTS_SUBDAO_CORE_INIT_MSG" "$GRANTS_SUBDAO_CORE_LABEL" ADD_SUBDAOS_MSG='{ "update_sub_daos": { @@ -1128,10 +740,8 @@ data: "to_remove": [] } }' - check_json "$ADD_SUBDAOS_MSG" - SET_VESTING_TOKEN_MSG='{ "set_vesting_token": { "vesting_token": { @@ -1142,7 +752,6 @@ data: } }' - REGISTER_VESTING_ACCOUNTS_MSG='{ "register_vesting_accounts": { "vesting_accounts": [ @@ -1165,18 +774,13 @@ data: } }' - - $BINARY add-wasm-message execute "$DAO_CONTRACT_ADDRESS" "$ADD_SUBDAOS_MSG" - \ + $BINARY add-wasm-message execute "$DAO_CONTRACT_ADDRESS" "$ADD_SUBDAOS_MSG" \ --run-as "$DAO_CONTRACT_ADDRESS" --home "$CHAIN_DIR" - $BINARY add-wasm-message execute - "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$SET_VESTING_TOKEN_MSG" \ + $BINARY add-wasm-message execute "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$SET_VESTING_TOKEN_MSG" \ --run-as "$ADMIN_ADDRESS" --home "$CHAIN_DIR" - $BINARY add-wasm-message execute - "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" - "$REGISTER_VESTING_ACCOUNTS_MSG" \ + $BINARY add-wasm-message execute "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$REGISTER_VESTING_ACCOUNTS_MSG" \ --amount 1000untrn --run-as "$ADMIN_ADDRESS" --home "$CHAIN_DIR" function set_genesis_param() { @@ -1185,82 +789,41 @@ data: sed -i -e "s;\"$param_name\":.*;\"$param_name\": $param_value;g" "$GENESIS_PATH" } - function set_genesis_param_jq() { param_path=$1 param_value=$2 jq "${param_path} = ${param_value}" > tmp_genesis_file.json < "$GENESIS_PATH" && mv tmp_genesis_file.json "$GENESIS_PATH" } - function convert_bech32_base64_esc() { $BINARY keys parse $1 --output json | jq .bytes | xxd -r -p | base64 | sed -e 's/\//\\\//g' } - - DAO_CONTRACT_ADDRESS_B64=$(convert_bech32_base64_esc - "$DAO_CONTRACT_ADDRESS") - + DAO_CONTRACT_ADDRESS_B64=$(convert_bech32_base64_esc "$DAO_CONTRACT_ADDRESS") echo $DAO_CONTRACT_ADDRESS_B64 - - set_genesis_param admins - "[\"$DAO_CONTRACT_ADDRESS\"]" # admin module - - set_genesis_param treasury_address - "\"$DAO_CONTRACT_ADDRESS\"" # feeburner - - set_genesis_param fee_collector_address - "\"$DAO_CONTRACT_ADDRESS\"" # tokenfactory - - set_genesis_param security_address - "\"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS\"," # cron - - set_genesis_param limit - 5 # cron - - #set_genesis_param allow_messages - "[\"*\"]" # interchainaccounts - - set_genesis_param signed_blocks_window - "\"$SLASHING_SIGNED_BLOCKS_WINDOW\"," # slashing - - set_genesis_param min_signed_per_window - "\"$SLASHING_MIN_SIGNED\"," # slashing - - set_genesis_param slash_fraction_double_sign - "\"$SLASHING_FRACTION_DOUBLE_SIGN\"," # slashing - - set_genesis_param slash_fraction_downtime - "\"$SLASHING_FRACTION_DOWNTIME\"" # slashing - - set_genesis_param minimum_gas_prices - "$MIN_GAS_PRICES," # globalfee - - set_genesis_param max_total_bypass_min_fee_msg_gas_usage - "\"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE\"" # globalfee - - set_genesis_param_jq ".app_state.globalfee.params.bypass_min_fee_msg_types" - "$BYPASS_MIN_FEE_MSG_TYPES" # globalfee - - set_genesis_param proposer_fee - "\"0.25\"" # builder(POB) - - set_genesis_param escrow_account_address - "\"$DAO_CONTRACT_ADDRESS_B64\"," # builder(POB) - - set_genesis_param sudo_call_gas_limit - "\"1000000\"" # contractmanager - - set_genesis_param max_gas - "\"1000000000\"" # consensus_params - + set_genesis_param admins "[\"$DAO_CONTRACT_ADDRESS\"]" # admin module + set_genesis_param treasury_address "\"$DAO_CONTRACT_ADDRESS\"" # feeburner + set_genesis_param fee_collector_address "\"$DAO_CONTRACT_ADDRESS\"" # tokenfactory + set_genesis_param security_address "\"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS\"," # cron + set_genesis_param limit 5 # cron + #set_genesis_param allow_messages "[\"*\"]" # interchainaccounts + set_genesis_param signed_blocks_window "\"$SLASHING_SIGNED_BLOCKS_WINDOW\"," # slashing + set_genesis_param min_signed_per_window "\"$SLASHING_MIN_SIGNED\"," # slashing + set_genesis_param slash_fraction_double_sign "\"$SLASHING_FRACTION_DOUBLE_SIGN\"," # slashing + set_genesis_param slash_fraction_downtime "\"$SLASHING_FRACTION_DOWNTIME\"" # slashing + set_genesis_param minimum_gas_prices "$MIN_GAS_PRICES," # globalfee + set_genesis_param max_total_bypass_min_fee_msg_gas_usage "\"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE\"" # globalfee + set_genesis_param_jq ".app_state.globalfee.params.bypass_min_fee_msg_types" "$BYPASS_MIN_FEE_MSG_TYPES" # globalfee + set_genesis_param proposer_fee "\"0.25\"" # builder(POB) + set_genesis_param escrow_account_address "\"$DAO_CONTRACT_ADDRESS_B64\"," # builder(POB) + set_genesis_param sudo_call_gas_limit "\"1000000\"" # contractmanager + set_genesis_param max_gas "\"1000000000\"" # consensus_params if ! jq -e . "$GENESIS_PATH" >/dev/null 2>&1; then echo "genesis appears to become incorrect json" >&2 exit 1 fi - echo "DAO $DAO_CONTRACT_ADDRESS" updateGenesis.sh: | #!/bin/bash @@ -1274,117 +837,61 @@ data: ls $CHAIN_DIR/config $CHAIN_BIN tendermint show-node-id - updateConfig.sh: > + updateConfig.sh: | #!/bin/bash - STAKEDENOM=${DENOM:-untrn} - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - P2PPORT=${P2PPORT:-26656} - RPCPORT=${RPCPORT:-26657} - RESTPORT=${RESTPORT:-1317} - ROSETTA=${ROSETTA:-8080} - set -eux - ls $CHAIN_DIR - - sed -i -e 's/timeout_commit = "5s"/timeout_commit = "1s"/g' - "$CHAIN_DIR/config/config.toml" - - sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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/timeout_commit = "5s"/timeout_commit = "1s"/g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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/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/minimum-gas-prices = \"\"/minimum-gas-prices = - \"0$STAKEDENOM\"/g" "$CHAIN_DIR/config/app.toml" - + sed -i -e "s/minimum-gas-prices = \"\"/minimum-gas-prices = \"0$STAKEDENOM\"/g" "$CHAIN_DIR/config/app.toml" sed -i -e 's/enabled = false/enabled = true/g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's/prometheus-retention-time = 0/prometheus-retention-time = 1000/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/prometheus-retention-time = 0/prometheus-retention-time = - 1000/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#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2PPORT"'"#g' - "$CHAIN_DIR/config/config.toml" - - sed -i -e 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPCPORT"'"#g' - "$CHAIN_DIR/config/config.toml" - - sed -i -e 's#"tcp://localhost:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' - "$CHAIN_DIR/config/app.toml" - - sed -i -e 's#"tcp://0.0.0.0:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' - "$CHAIN_DIR/config/app.toml" - + sed -i -e 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2PPORT"'"#g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPCPORT"'"#g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's#"tcp://localhost:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's#"tcp://0.0.0.0:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' "$CHAIN_DIR/config/app.toml" sed -i -e 's#":8080"#":'"$ROSETTA"'"#g' "$CHAIN_DIR/config/app.toml" - sed -i -e 's#localhost#0.0.0.0#g' "$CHAIN_DIR/config/app.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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -1392,9 +899,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -1405,15 +910,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -1443,7 +945,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -1473,19 +974,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -1530,23 +1024,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -1571,14 +1059,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -1586,17 +1069,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -1605,53 +1082,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/config-configmap.yaml deleted file mode 100644 index c23fa16c8..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - neutron-1.json: >- - {"chain_name":"neutron","assets":[{"description":"The native token of - Neutron - chain.","denom_units":[{"denom":"untrn","exponent":0},{"denom":"ntrn","exponent":6}],"base":"untrn","name":"Neutron","display":"ntrn","symbol":"NTRN","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg"},"coingecko_id":"neutron"}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/deployment.yaml index ffd4cb904..27df99860 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: neutron-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: neutron,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-neutron-1 + - name: registry-neutron-1 mountPath: /chains/neutron-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-neutron-1 + - name: registry-neutron-1 configMap: - name: chain-neutron-1 - - name: chain-cosmoshub-4 + name: registry-neutron-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/neutron-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/neutron-1-configmap.yaml new file mode 100644 index 000000000..56e0447aa --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/neutron-1-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-neutron-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-neutron-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "neutron", + "status": "live", + "network_type": "devnet", + "chain_id": "neutron-1", + "pretty_name": "Neutron Devnet", + "bech32_prefix": "neutron", + "daemon_name": "neutrond", + "node_home": "/root/.neutrond", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "untrn", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "untrn" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/neutron-org/neutron", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "neutron", + "assets": [ + { + "description": "The native token of Neutron chain.", + "denom_units": [ + { + "denom": "untrn", + "exponent": 0 + }, + { + "denom": "ntrn", + "exponent": 6 + } + ], + "base": "untrn", + "name": "Neutron", + "display": "ntrn", + "symbol": "NTRN", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg" + }, + "coingecko_id": "neutron" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/hermes-neutron-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/hermes-neutron-cosmos-configmap.yaml index 9bd1a33ef..0ae2e9aac 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/hermes-neutron-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/hermes-neutron-cosmos-configmap.yaml @@ -11,313 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-neutron-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "neutron-1" - type = "CosmosSdk" - key_name = "neutron-1" - ccv_consumer_chain = true - - rpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "neutron" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "untrn" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "neutron-1" - type = "CosmosSdk" - key_name = "neutron-1-cli" - ccv_consumer_chain = true - - rpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "neutron" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "untrn" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/hermes-neutron-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/hermes-neutron-cosmos-statefulset.yaml index 2036ab842..b83d32d49 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/hermes-neutron-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/hermes-neutron-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-neutron-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for neutron-1 service..." - - wait-for-service - neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,101 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for neutron-1..." - hermes keys add \ --chain neutron-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name neutron-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="untrn" - - RLY_ADDR=$(hermes --json keys list --chain neutron-1 | tail -1 | - jq -r '.result."neutron-1".account') - + RLY_ADDR=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for neutron-1-cli..." + hermes keys add \ + --chain neutron-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name neutron-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --a-connection connection-0 \ + --channel-version 1 \ + --order ordered \ + --a-chain neutron-1 \ + --a-port consumer \ + --b-port provider + + hermes create channel \ + --a-connection connection-0 \ + --a-chain neutron-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +227,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +269,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-statefulset.yaml index b5ea4612d..0678e81a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-statefulset.yaml @@ -35,40 +35,41 @@ spec: app.kubernetes.io/version: 4.0.0-alpha.0 spec: initContainers: - - name: init-neutron-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for neutron-1 service..." - - wait-for-service - neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/neutron-query-relayer:v0.2.0 imagePullPolicy: IfNotPresent @@ -93,57 +94,34 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $STORAGE_PATH - - NEUTRON_MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - - TARGET_MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + NEUTRON_MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + TARGET_MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo "Setting up keys for neutron-1..." - - # Keys will be managed through environment variables for - neutron-query-relayer - + # Keys will be managed through environment variables for neutron-query-relayer DENOM="untrn" - - # For neutron-query-relayer, we need to derive the address from - mnemonic - + # For neutron-query-relayer, we need to derive the address from mnemonic # This will be handled by the relayer binary itself - echo "Chain neutron-1 setup completed" - echo "Setting up keys for cosmoshub-4..." - - # Keys will be managed through environment variables for - neutron-query-relayer - + # Keys will be managed through environment variables for neutron-query-relayer DENOM="uatom" - - # For neutron-query-relayer, we need to derive the address from - mnemonic - + # For neutron-query-relayer, we need to derive the address from mnemonic # This will be handled by the relayer binary itself - echo "Chain cosmoshub-4 setup completed" resources: limits: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/genesis-statefulset.yaml index 93fff77a3..6ae432684 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/genesis-service.yaml index dadfea71c..7a3d9fc86 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: neutron-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/genesis-statefulset.yaml index 55839b457..c98c68da2 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: neutrond - name: CHAIN_ID value: neutron-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: neutrond - name: CHAIN_ID value: neutron-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -181,22 +198,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-ics image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -226,30 +243,18 @@ spec: command: - bash - '-c' - - >- + - |- export - echo "Fetching priv keys from provider exposer" - - curl -s - http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8081/priv_keys - | jq > $CHAIN_DIR/config/provider_priv_validator_key.json - + curl -s http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8081/priv_keys | jq > $CHAIN_DIR/config/provider_priv_validator_key.json cat $CHAIN_DIR/config/provider_priv_validator_key.json - echo "Replace provider priv validator key with provider keys" - - mv $CHAIN_DIR/config/priv_validator_key.json - $CHAIN_DIR/config/previous_priv_validator_key.json - - mv $CHAIN_DIR/config/provider_priv_validator_key.json - $CHAIN_DIR/config/priv_validator_key.json - + mv $CHAIN_DIR/config/priv_validator_key.json $CHAIN_DIR/config/previous_priv_validator_key.json + mv $CHAIN_DIR/config/provider_priv_validator_key.json $CHAIN_DIR/config/priv_validator_key.json echo "Create consumer addition proposal" - DENOM=uatom \ CHAIN_ID=cosmoshub-4 \ CHAIN_BIN=gaiad \ @@ -258,24 +263,15 @@ spec: bash -e /scripts/create-ics.sh echo "create ccv state file" - gaiad query provider consumer-genesis neutron-1 \ --node http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657 \ -o json > $CHAIN_DIR/config/ccv-state.json cat $CHAIN_DIR/config/ccv-state.json | jq - echo "Update genesis file with ccv state" - - jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' - $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/ccv-state.json > - $CHAIN_DIR/config/genesis-ccv.json - - mv $CHAIN_DIR/config/genesis.json - $CHAIN_DIR/config/genesis-no-ccv.json - - mv $CHAIN_DIR/config/genesis-ccv.json - $CHAIN_DIR/config/genesis.json + jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/ccv-state.json > $CHAIN_DIR/config/genesis-ccv.json + mv $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/genesis-no-ccv.json + mv $CHAIN_DIR/config/genesis-ccv.json $CHAIN_DIR/config/genesis.json resources: limits: cpu: '0.5' @@ -353,7 +349,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -384,11 +380,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.neutrond name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/setup-scripts-configmap.yaml index 8979cdbcc..335df88f2 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/neutron/setup-scripts-configmap.yaml @@ -13,83 +13,51 @@ metadata: starship.io/chain-name: neutron starship.io/chain-id: neutron-1 data: - createGenesis.sh: > + createGenesis.sh: | #!/bin/bash - DENOM="${DENOM:=untrn}" - STAKEDENOM=${DENOM:-untrn} - COINS="${COINS:=100000000000000000untrn}" - CHAIN_ID="${CHAIN_ID:=neutron-1}" - BINARY="${CHAIN_BIN:=neutrond}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.neutrond}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - BRANCH="${BRANCH:=v3.0.5}" - FAUCET_ENABLED="${FAUCET_ENABLED:=true}" - NUM_VALIDATORS="${NUM_VALIDATORS:=1}" - NUM_RELAYERS="${NUM_RELAYERS:=0}" - GENESIS_PATH="$CHAIN_DIR/config/genesis.json" - CONTRACTS_BINARIES_DIR=${CONTRACTS_BINARIES_DIR:-./contracts} - THIRD_PARTY_CONTRACTS_DIR=${THIRD_PARTY_CONTRACTS_DIR:-./contracts_thirdparty} - set -euxo pipefail - mkdir -p $CONTRACTS_BINARIES_DIR $THIRD_PARTY_CONTRACTS_DIR - function download_contract() { CONTRACT_NAME="$1" # / CONTRACT_URI=${CONTRACT_NAME#"./"} curl https://github.com/neutron-org/neutron/raw/$BRANCH/$CONTRACT_URI -L -o $CONTRACT_NAME } - $BINARY init $CHAIN_ID --chain-id $CHAIN_ID - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .genesis[0].name - $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .faucet[0].name - $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --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); @@ -102,340 +70,174 @@ data: done fi - # Add test addresses, admin address - echo "Adding key.... demowallet1" - - jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet1 - --index 1 --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a demowallet1 - --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet1 --index 1 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet1 --keyring-backend="test") $COINS --keyring-backend="test" # Add test addresses, second multisig address - echo "Adding key.... demowallet2" - - jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet2 - --index 2 --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a demowallet2 - --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet2 --index 2 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet2 --keyring-backend="test") $COINS --keyring-backend="test" # Add test addresses, second multisig address - echo "Adding key.... demowallet2" - - jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet3 - --index 3 --recover --keyring-backend="test" - - $BINARY add-genesis-account $($BINARY keys show -a demowallet3 - --keyring-backend="test") $COINS --keyring-backend="test" - + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet3 --index 3 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet3 --keyring-backend="test") $COINS --keyring-backend="test" echo "Update genesis.json file with updated local params" - - sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" - $CHAIN_DIR/config/genesis.json - + sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" $CHAIN_DIR/config/genesis.json sed -i -e "s/\"denom\": \"stake\",/\"denom\": \"$DENOM\",/g" "$GENESIS_PATH" + sed -i -e "s/\"mint_denom\": \"stake\",/\"mint_denom\": \"$DENOM\",/g" "$GENESIS_PATH" + sed -i -e "s/\"bond_denom\": \"stake\"/\"bond_denom\": \"$DENOM\"/g" "$GENESIS_PATH" - sed -i -e "s/\"mint_denom\": \"stake\",/\"mint_denom\": \"$DENOM\",/g" - "$GENESIS_PATH" - - sed -i -e "s/\"bond_denom\": \"stake\"/\"bond_denom\": \"$DENOM\"/g" - "$GENESIS_PATH" - - - # IMPORTANT! minimum_gas_prices should always contain at least one record, - otherwise the chain will not start or halt - + # IMPORTANT! minimum_gas_prices should always contain at least one record, otherwise the chain will not start or halt MIN_GAS_PRICES_DEFAULT='[{"denom":"untrn","amount":"0"}]' - MIN_GAS_PRICES=${MIN_GAS_PRICES:-"$MIN_GAS_PRICES_DEFAULT"} - - BYPASS_MIN_FEE_MSG_TYPES_DEFAULT='["/ibc.core.channel.v1.Msg/RecvPacket", - "/ibc.core.channel.v1.Msg/Acknowledgement", - "/ibc.core.client.v1.Msg/UpdateClient"]' - + BYPASS_MIN_FEE_MSG_TYPES_DEFAULT='["/ibc.core.channel.v1.Msg/RecvPacket", "/ibc.core.channel.v1.Msg/Acknowledgement", "/ibc.core.client.v1.Msg/UpdateClient"]' BYPASS_MIN_FEE_MSG_TYPES=${BYPASS_MIN_FEE_MSG_TYPES:-"$BYPASS_MIN_FEE_MSG_TYPES_DEFAULT"} - MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE_DEFAULT=1000000 - MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE=${MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE:-"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE_DEFAULT"} - ADMIN_ADDRESS=$($BINARY keys show demowallet1 -a --keyring-backend="test") - - SECOND_MULTISIG_ADDRESS=$($BINARY keys show demowallet2 -a - --keyring-backend="test") - + SECOND_MULTISIG_ADDRESS=$($BINARY keys show demowallet2 -a --keyring-backend="test") ls $CHAIN_DIR/config - # MAIN_DAO - DAO_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_core.wasm - download_contract $DAO_CONTRACT - PRE_PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_single.wasm - download_contract $PRE_PROPOSAL_CONTRACT - PRE_PROPOSAL_MULTIPLE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_multiple.wasm - download_contract $PRE_PROPOSAL_MULTIPLE_CONTRACT - PRE_PROPOSAL_OVERRULE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_overrule.wasm - download_contract $PRE_PROPOSAL_OVERRULE_CONTRACT - PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_proposal_single.wasm - download_contract $PROPOSAL_CONTRACT - PROPOSAL_MULTIPLE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_proposal_multiple.wasm - download_contract $PROPOSAL_MULTIPLE_CONTRACT - VOTING_REGISTRY_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_voting_registry.wasm - download_contract $VOTING_REGISTRY_CONTRACT - # VAULTS - NEUTRON_VAULT_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_vault.wasm - download_contract $NEUTRON_VAULT_CONTRACT - NEUTRON_INVESTORS_VAULT=$CONTRACTS_BINARIES_DIR/investors_vesting_vault.wasm - download_contract $NEUTRON_INVESTORS_VAULT - # VESTING - NEUTRON_VESTING_INVESTORS=$CONTRACTS_BINARIES_DIR/vesting_investors.wasm - download_contract $NEUTRON_VESTING_INVESTORS - # RESERVE - RESERVE_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_reserve.wasm - download_contract $RESERVE_CONTRACT - DISTRIBUTION_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_distribution.wasm - download_contract $DISTRIBUTION_CONTRACT - # SUBDAOS - SUBDAO_CORE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_core.wasm - download_contract $SUBDAO_CORE_CONTRACT - SUBDAO_TIMELOCK_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_timelock_single.wasm - download_contract $SUBDAO_TIMELOCK_CONTRACT - SUBDAO_PRE_PROPOSE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_pre_propose_single.wasm - download_contract $SUBDAO_PRE_PROPOSE_CONTRACT - SUBDAO_PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_proposal_single.wasm - download_contract $SUBDAO_PROPOSAL_CONTRACT - CW4_VOTING_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_voting.wasm - download_contract $CW4_VOTING_CONTRACT - CW4_GROUP_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_group.wasm - download_contract $CW4_GROUP_CONTRACT - echo "Add consumer section..." - $BINARY add-consumer-section --home "$CHAIN_DIR" - ### PARAMETERS SECTION - ## slashing params - SLASHING_SIGNED_BLOCKS_WINDOW=140000 - SLASHING_MIN_SIGNED=0.050000000000000000 - SLASHING_FRACTION_DOUBLE_SIGN=0.010000000000000000 - SLASHING_FRACTION_DOWNTIME=0.000100000000000000 - ##pre propose single parameters - PRE_PROPOSAL_SINGLE_AMOUNT=1000 - PRE_PROPOSAL_SINGLE_REFUND_POLICY="only_passed" - PRE_PROPOSAL_SINGLE_OPEN_PROPOSAL_SUBMISSION=false - ## proposal singe params - PROPOSAL_ALLOW_REVOTING=false # should be true for non-testing env - PROPOSAL_SINGLE_ONLY_MEMBERS_EXECUTE=false - - PROPOSAL_SINGLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in - production - + PROPOSAL_SINGLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in production PROPOSAL_SINGLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false - - PROPOSAL_SINGLE_QUORUM=0.05 # quorum to consider proposal's result viable - [float] < 1 - - PROPOSAL_SINGLE_THRESHOLD=0.5 # % of votes should vote for the proposal to - pass [float] <1 - + PROPOSAL_SINGLE_QUORUM=0.05 # quorum to consider proposal's result viable [float] < 1 + PROPOSAL_SINGLE_THRESHOLD=0.5 # % of votes should vote for the proposal to pass [float] <1 PROPOSAL_SINGLE_LABEL="neutron.proposals.single" - PRE_PROPOSAL_SINGLE_LABEL="neutron.proposals.single.pre_propose" - ## propose multiple params - PROPOSAL_MULTIPLE_ALLOW_REVOTING=false # should be true for non-testing env - PROPOSAL_MULTIPLE_ONLY_MEMBERS_EXECUTE=false - - PROPOSAL_MULTIPLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks - in production - + PROPOSAL_MULTIPLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in production PROPOSAL_MULTIPLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false - - PROPOSAL_MULTIPLE_QUORUM=0.05 # quorum to consider proposal's result viable - [float] < 1 - + PROPOSAL_MULTIPLE_QUORUM=0.05 # quorum to consider proposal's result viable [float] < 1 PROPOSAL_MULTIPLE_LABEL="neutron.proposals.multiple" - PRE_PROPOSAL_MULTIPLE_LABEL="neutron.proposals.multiple.pre_propose" - ## Propose overrule params - PROPOSAL_OVERRULE_ALLOW_REVOTING=false - PROPOSAL_OVERRULE_ONLY_MEMBERS_EXECUTE=false - - PROPOSAL_OVERRULE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 3 days in - production - + PROPOSAL_OVERRULE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 3 days in production PROPOSAL_OVERRULE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false - - PROPOSAL_OVERRULE_THRESHOLD=0.005 # around 10 times lower than for regular - proposals - + PROPOSAL_OVERRULE_THRESHOLD=0.005 # around 10 times lower than for regular proposals PROPOSAL_OVERRULE_LABEL="neutron.proposals.overrule" - PRE_PROPOSE_OVERRULE_LABEL="neutron.proposals.overrule.pre_propose" - ## Voting registry - VOTING_REGISTRY_LABEL="neutron.voting" - ## DAO - DAO_NAME="Neutron DAO" - DAO_DESCRIPTION="Neutron DAO is a DAO DAO-based governance of Neutron chain" - DAO_CORE_LABEL="neutron.core" - ## Neutron vault - NEUTRON_VAULT_NAME="Neutron Vault" - NEUTRON_VAULT_DESCRIPTION="Vault to put NTRN tokens to get voting power" - NEUTRON_VAULT_LABEL="neutron.voting.vaults.neutron" - NEUTRON_INVESTORS_VAULT_NAME="Neutron Investors Vault" - - NEUTRON_INVESTORS_VAULT_DESCRIPTION="Vault sourcing voting power form - investors vesting" - + NEUTRON_INVESTORS_VAULT_DESCRIPTION="Vault sourcing voting power form investors vesting" NEUTRON_INVESTORS_VAULT_LABEL="neutron.voting.vaults.investors" - # VESTING (for tests purposes) - NEUTRON_VESTING_INVESTORS_LABEL="neutron.vesting.investors" - ## Reserve - RESERVE_DISTRIBUTION_RATE=0 - RESERVE_MIN_PERIOD=10 - RESERVE_VESTING_DENOMINATOR=1 - RESERVE_LABEL="reserve" - DISTRIBUTION_LABEL="distribution" - ## Grants subdao - GRANTS_SUBDAO_CORE_NAME="Grants SubDAO" - GRANTS_SUBDAO_CORE_DESCRIPTION="SubDAO to distribute grants to projects" - GRANTS_SUBDAO_CORE_LABEL="neutron.subdaos.grants.core" - GRANTS_SUBDAO_PROPOSAL_LABEL="neutron.subdaos.grants.proposals.single" - GRANTS_SUBDAO_PRE_PROPOSE_LABEL="neutron.subdaos.grants.proposals.single.pre_propose" - GRANTS_SUBDAO_VOTING_MODULE_LABEL="neutron.subdaos.grants.voting" - ## Timelock - GRANTS_SUBDAO_TIMELOCK_LABEL="neutron.subdaos.grants.proposals.single.pre_propose.timelock" - ## Security subdao - SECURITY_SUBDAO_CORE_NAME="Security SubDAO" - - SECURITY_SUBDAO_CORE_DESCRIPTION="SubDAO with power to pause specific - Neutron DAO modules" - + SECURITY_SUBDAO_CORE_DESCRIPTION="SubDAO with power to pause specific Neutron DAO modules" SECURITY_SUBDAO_CORE_LABEL="neutron.subdaos.security.core" - SECURITY_SUBDAO_PROPOSAL_LABEL="neutron.subdaos.security.proposals.single" - SECURITY_SUBDAO_PRE_PROPOSE_LABEL="neutron.subdaos.security.proposals.single.pre_propose" - SECURITY_SUBDAO_VOTE_LABEL="neutron.subdaos.security.voting" - echo "Initializing dao contract in genesis..." - function store_binary() { CONTRACT_BINARY_PATH=$1 $BINARY add-wasm-message store "$CONTRACT_BINARY_PATH" \ @@ -444,89 +246,38 @@ data: echo "$BINARY_ID" } - # Upload the dao contracts - # MAIN_DAO - DAO_CONTRACT_BINARY_ID=$(store_binary "$DAO_CONTRACT") - - PRE_PROPOSAL_CONTRACT_BINARY_ID=$(store_binary - "$PRE_PROPOSAL_CONTRACT") - - PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary - "$PRE_PROPOSAL_MULTIPLE_CONTRACT") - - PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID=$(store_binary - "$PRE_PROPOSAL_OVERRULE_CONTRACT") - - PROPOSAL_CONTRACT_BINARY_ID=$(store_binary - "$PROPOSAL_CONTRACT") - - PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary - "$PROPOSAL_MULTIPLE_CONTRACT") - - VOTING_REGISTRY_CONTRACT_BINARY_ID=$(store_binary - "$VOTING_REGISTRY_CONTRACT") - + PRE_PROPOSAL_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_CONTRACT") + PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_MULTIPLE_CONTRACT") + PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_OVERRULE_CONTRACT") + PROPOSAL_CONTRACT_BINARY_ID=$(store_binary "$PROPOSAL_CONTRACT") + PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary "$PROPOSAL_MULTIPLE_CONTRACT") + VOTING_REGISTRY_CONTRACT_BINARY_ID=$(store_binary "$VOTING_REGISTRY_CONTRACT") # VAULTS - - NEUTRON_VAULT_CONTRACT_BINARY_ID=$(store_binary - "$NEUTRON_VAULT_CONTRACT") - - NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID=$(store_binary - "$NEUTRON_INVESTORS_VAULT") - + NEUTRON_VAULT_CONTRACT_BINARY_ID=$(store_binary "$NEUTRON_VAULT_CONTRACT") + NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID=$(store_binary "$NEUTRON_INVESTORS_VAULT") # VESTING - - NEUTRON_VESTING_INVESTORS_BINARY_ID=$(store_binary - "$NEUTRON_VESTING_INVESTORS") - + NEUTRON_VESTING_INVESTORS_BINARY_ID=$(store_binary "$NEUTRON_VESTING_INVESTORS") # RESERVE - - DISTRIBUTION_CONTRACT_BINARY_ID=$(store_binary - "$DISTRIBUTION_CONTRACT") - + DISTRIBUTION_CONTRACT_BINARY_ID=$(store_binary "$DISTRIBUTION_CONTRACT") RESERVE_CONTRACT_BINARY_ID=$(store_binary "$RESERVE_CONTRACT") - # SUBDAOS - - SUBDAO_CORE_BINARY_ID=$(store_binary - "$SUBDAO_CORE_CONTRACT") - - SUBDAO_TIMELOCK_BINARY_ID=$(store_binary - "$SUBDAO_TIMELOCK_CONTRACT") - - SUBDAO_PRE_PROPOSE_BINARY_ID=$(store_binary - "$SUBDAO_PRE_PROPOSE_CONTRACT") - - SUBDAO_PROPOSAL_BINARY_ID=$(store_binary - "$SUBDAO_PROPOSAL_CONTRACT") - - CW4_VOTING_CONTRACT_BINARY_ID=$(store_binary - "$CW4_VOTING_CONTRACT") - - CW4_GROUP_CONTRACT_BINARY_ID=$(store_binary - "$CW4_GROUP_CONTRACT") - + SUBDAO_CORE_BINARY_ID=$(store_binary "$SUBDAO_CORE_CONTRACT") + SUBDAO_TIMELOCK_BINARY_ID=$(store_binary "$SUBDAO_TIMELOCK_CONTRACT") + SUBDAO_PRE_PROPOSE_BINARY_ID=$(store_binary "$SUBDAO_PRE_PROPOSE_CONTRACT") + SUBDAO_PROPOSAL_BINARY_ID=$(store_binary "$SUBDAO_PROPOSAL_CONTRACT") + CW4_VOTING_CONTRACT_BINARY_ID=$(store_binary "$CW4_VOTING_CONTRACT") + CW4_GROUP_CONTRACT_BINARY_ID=$(store_binary "$CW4_GROUP_CONTRACT") # WARNING! - # The following code is needed to pre-generate the contract addresses - # Those addresses depend on the ORDER OF CONTRACTS INITIALIZATION - - # Thus, this code section depends a lot on the order and content of the - instantiate-contract commands at the end script - - # It also depends on the implicitly initialized contracts (e.g. DAO core - instantiation also instantiate proposals and stuff) - + # Thus, this code section depends a lot on the order and content of the instantiate-contract commands at the end script + # It also depends on the implicitly initialized contracts (e.g. DAO core instantiation also instantiate proposals and stuff) # If you're to do any changes, please do it consistently in both sections - - # If you're to do add any implicitly initialized contracts in init messages, - please reflect changes here - + # If you're to do add any implicitly initialized contracts in init messages, please reflect changes here function genaddr() { CODE_ID=$1 @@ -534,96 +285,40 @@ data: echo "$CONTRACT_ADDRESS" } - INSTANCE_ID_COUNTER=1 - # VAULTS - - NEUTRON_VAULT_CONTRACT_ADDRESS=$(genaddr - "$NEUTRON_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS=$(genaddr - "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ - )) - + NEUTRON_VAULT_CONTRACT_ADDRESS=$(genaddr "$NEUTRON_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS=$(genaddr "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) # VESTING - - NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES=$(genaddr - "$NEUTRON_VESTING_INVESTORS_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - + NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES=$(genaddr "$NEUTRON_VESTING_INVESTORS_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) # MAIN_DAO - - DAO_CONTRACT_ADDRESS=$(genaddr - "$DAO_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - VOTING_REGISTRY_CONTRACT_ADDRESS=$(genaddr - "$VOTING_REGISTRY_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PROPOSAL_SINGLE_CONTRACT_ADDRESS=$(genaddr - "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PRE_PROPOSAL_CONTRACT_ADDRESS=$(genaddr - "$PRE_PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr - "$PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PRE_PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr - "$PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr - "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr - "$PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - + DAO_CONTRACT_ADDRESS=$(genaddr "$DAO_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + VOTING_REGISTRY_CONTRACT_ADDRESS=$(genaddr "$VOTING_REGISTRY_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_SINGLE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) # RESERVE - - RESERVE_CONTRACT_ADDRESS=$(genaddr - "$RESERVE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - DISTRIBUTION_CONTRACT_ADDRESS=$(genaddr - "$DISTRIBUTION_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - + RESERVE_CONTRACT_ADDRESS=$(genaddr "$RESERVE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + DISTRIBUTION_CONTRACT_ADDRESS=$(genaddr "$DISTRIBUTION_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) # SUBDAOS - - SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - SECURITY_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr - "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - SECURITY_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr - "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - SECURITY_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - SECURITY_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr - "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_PRE_PROPOSE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_TIMELOCK_CONTRACT_ADDRESS=$(genaddr - "$SUBDAO_TIMELOCK_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - - GRANTS_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr - "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) - + SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PRE_PROPOSE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_TIMELOCK_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_TIMELOCK_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) function check_json() { MSG=$1 @@ -633,17 +328,13 @@ data: fi } - function json_to_base64() { MSG=$1 check_json "$MSG" echo "$MSG" | base64 | tr -d "\n" } - - # PRE_PROPOSE_INIT_MSG will be put into the PROPOSAL_SINGLE_INIT_MSG and - PROPOSAL_MULTIPLE_INIT_MSG - + # PRE_PROPOSE_INIT_MSG will be put into the PROPOSAL_SINGLE_INIT_MSG and PROPOSAL_MULTIPLE_INIT_MSG PRE_PROPOSE_INIT_MSG='{ "deposit_info":{ "denom":{ @@ -658,13 +349,10 @@ data: }, "open_proposal_submission": '"$PRE_PROPOSAL_SINGLE_OPEN_PROPOSAL_SUBMISSION"' }' - PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$PRE_PROPOSE_INIT_MSG") - # -------------------- PROPOSE-SINGLE { PRE-PROPOSE } -------------------- - PROPOSAL_SINGLE_INIT_MSG='{ "allow_revoting":'"$PROPOSAL_ALLOW_REVOTING"', "pre_propose_info":{ @@ -695,14 +383,10 @@ data: } } }' - - PROPOSAL_SINGLE_INIT_MSG_BASE64=$(json_to_base64 - "$PROPOSAL_SINGLE_INIT_MSG") - + PROPOSAL_SINGLE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_SINGLE_INIT_MSG") # -------------------- PROPOSE-MULTIPLE { PRE-PROPOSE } -------------------- - PROPOSAL_MULTIPLE_INIT_MSG='{ "allow_revoting":'"$PROPOSAL_MULTIPLE_ALLOW_REVOTING"', "pre_propose_info":{ @@ -730,24 +414,14 @@ data: } } }' + PROPOSAL_MULTIPLE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_MULTIPLE_INIT_MSG") - PROPOSAL_MULTIPLE_INIT_MSG_BASE64=$(json_to_base64 - "$PROPOSAL_MULTIPLE_INIT_MSG") - - - # PRE_PROPOSE_OVERRULE_INIT_MSG will be put into the - PROPOSAL_OVERRULE_INIT_MSG - + # PRE_PROPOSE_OVERRULE_INIT_MSG will be put into the PROPOSAL_OVERRULE_INIT_MSG PRE_PROPOSE_OVERRULE_INIT_MSG='{}' - - PRE_PROPOSE_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 - "$PRE_PROPOSE_OVERRULE_INIT_MSG") - + PRE_PROPOSE_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 "$PRE_PROPOSE_OVERRULE_INIT_MSG") - # -------------------- PROPOSE-OVERRULE { PRE-PROPOSE-OVERRULE } - -------------------- - + # -------------------- PROPOSE-OVERRULE { PRE-PROPOSE-OVERRULE } -------------------- PROPOSAL_OVERRULE_INIT_MSG='{ "allow_revoting":'"$PROPOSAL_OVERRULE_ALLOW_REVOTING"', @@ -776,10 +450,7 @@ data: } } }' - - PROPOSAL_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 - "$PROPOSAL_OVERRULE_INIT_MSG") - + PROPOSAL_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_OVERRULE_INIT_MSG") VOTING_REGISTRY_INIT_MSG='{ "owner": "'"$DAO_CONTRACT_ADDRESS"'", @@ -788,10 +459,7 @@ data: "'"$NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS"'" ] }' - - VOTING_REGISTRY_INIT_MSG_BASE64=$(json_to_base64 - "$VOTING_REGISTRY_INIT_MSG") - + VOTING_REGISTRY_INIT_MSG_BASE64=$(json_to_base64 "$VOTING_REGISTRY_INIT_MSG") DAO_INIT='{ "description": "'"$DAO_DESCRIPTION"'", @@ -832,9 +500,7 @@ data: } }' - # RESERVE - RESERVE_INIT='{ "main_dao_address": "'"$DAO_CONTRACT_ADDRESS"'", "security_dao_address": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'", @@ -846,17 +512,14 @@ data: "vesting_denominator": "'"$RESERVE_VESTING_DENOMINATOR"'" }' - DISTRIBUTION_INIT='{ "main_dao_address": "'"$DAO_CONTRACT_ADDRESS"'", "security_dao_address": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'", "denom": "'"$STAKEDENOM"'" }' - # VAULTS - NEUTRON_VAULT_INIT='{ "owner": "'"$DAO_CONTRACT_ADDRESS"'", "name": "'"$NEUTRON_VAULT_NAME"'", @@ -864,7 +527,6 @@ data: "description": "'"$NEUTRON_VAULT_DESCRIPTION"'" }' - NEUTRON_INVESTORS_VAULT_INIT='{ "vesting_contract_address": "'"$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES"'", "owner": "'"$DAO_CONTRACT_ADDRESS"'", @@ -872,18 +534,14 @@ data: "name": "'"$NEUTRON_INVESTORS_VAULT_NAME"'" }' - # VESTING - NEUTRON_VESTING_INVESTORS_INIT='{ "owner": "'"$ADMIN_ADDRESS"'", "token_info_manager": "'"$ADMIN_ADDRESS"'" }' - # CW4 MODULES FOR SUBDAOS - CW4_VOTE_INIT_MSG='{ "cw4_group_code_id": '"$CW4_GROUP_CONTRACT_BINARY_ID"', "initial_members": [ @@ -897,23 +555,15 @@ data: } ] }' - CW4_VOTE_INIT_MSG_BASE64=$(json_to_base64 "$CW4_VOTE_INIT_MSG") - # SECURITY_SUBDAO - - # SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG will be put into the - SECURITY_SUBDAO_PROPOSAL_INIT_MSG - + # SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG will be put into the SECURITY_SUBDAO_PROPOSAL_INIT_MSG SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG='{ "open_proposal_submission": false }' - - SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 - "$SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG") - + SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG") SECURITY_SUBDAO_PROPOSAL_INIT_MSG='{ "allow_revoting": false, @@ -942,10 +592,7 @@ data: } } }' - - SECURITY_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 - "$SECURITY_SUBDAO_PROPOSAL_INIT_MSG") - + SECURITY_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 "$SECURITY_SUBDAO_PROPOSAL_INIT_MSG") SECURITY_SUBDAO_CORE_INIT_MSG='{ "name": "'"$SECURITY_SUBDAO_CORE_NAME"'", @@ -976,17 +623,12 @@ data: "security_dao": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" }' - # GRANTS_SUBDAO - GRANTS_SUBDAO_TIMELOCK_INIT_MSG='{ "overrule_pre_propose": "'"$PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS"'" }' - - GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64=$(json_to_base64 - "$GRANTS_SUBDAO_TIMELOCK_INIT_MSG") - + GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_TIMELOCK_INIT_MSG") GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG='{ "open_proposal_submission": false, @@ -1001,10 +643,7 @@ data: "msg": "'"$GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64"'" } }' - - GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 - "$GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG") - + GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG") GRANTS_SUBDAO_PROPOSAL_INIT_MSG='{ "allow_revoting": false, @@ -1033,10 +672,7 @@ data: } } }' - - GRANTS_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 - "$GRANTS_SUBDAO_PROPOSAL_INIT_MSG") - + GRANTS_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_PROPOSAL_INIT_MSG") GRANTS_SUBDAO_CORE_INIT_MSG='{ "name": "'"$GRANTS_SUBDAO_CORE_NAME"'", @@ -1067,10 +703,8 @@ data: "security_dao": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" }' - echo "Instantiate contracts" - function init_contract() { BINARY_ID=$1 INIT_MSG=$2 @@ -1080,40 +714,18 @@ data: --run-as "$DAO_CONTRACT_ADDRESS" --admin "$DAO_CONTRACT_ADDRESS" --home "$CHAIN_DIR" } - # WARNING! - # The following code is to add contracts instantiations messages to genesis - - # It affects the section of predicting contracts addresses at the beginning - of the script - + # It affects the section of predicting contracts addresses at the beginning of the script # If you're to do any changes, please do it consistently in both sections - - init_contract "$NEUTRON_VAULT_CONTRACT_BINARY_ID" - "$NEUTRON_VAULT_INIT" "$NEUTRON_VAULT_LABEL" - - init_contract "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID" - "$NEUTRON_INVESTORS_VAULT_INIT" "$NEUTRON_INVESTORS_VAULT_LABEL" - - init_contract "$NEUTRON_VESTING_INVESTORS_BINARY_ID" - "$NEUTRON_VESTING_INVESTORS_INIT" "$NEUTRON_VESTING_INVESTORS_LABEL" - - init_contract "$DAO_CONTRACT_BINARY_ID" - "$DAO_INIT" "$DAO_CORE_LABEL" - - init_contract "$RESERVE_CONTRACT_BINARY_ID" - "$RESERVE_INIT" "$RESERVE_LABEL" - - init_contract "$DISTRIBUTION_CONTRACT_BINARY_ID" - "$DISTRIBUTION_INIT" "$DISTRIBUTION_LABEL" - - init_contract "$SUBDAO_CORE_BINARY_ID" - "$SECURITY_SUBDAO_CORE_INIT_MSG" "$SECURITY_SUBDAO_CORE_LABEL" - - init_contract "$SUBDAO_CORE_BINARY_ID" - "$GRANTS_SUBDAO_CORE_INIT_MSG" "$GRANTS_SUBDAO_CORE_LABEL" - + init_contract "$NEUTRON_VAULT_CONTRACT_BINARY_ID" "$NEUTRON_VAULT_INIT" "$NEUTRON_VAULT_LABEL" + init_contract "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID" "$NEUTRON_INVESTORS_VAULT_INIT" "$NEUTRON_INVESTORS_VAULT_LABEL" + init_contract "$NEUTRON_VESTING_INVESTORS_BINARY_ID" "$NEUTRON_VESTING_INVESTORS_INIT" "$NEUTRON_VESTING_INVESTORS_LABEL" + init_contract "$DAO_CONTRACT_BINARY_ID" "$DAO_INIT" "$DAO_CORE_LABEL" + init_contract "$RESERVE_CONTRACT_BINARY_ID" "$RESERVE_INIT" "$RESERVE_LABEL" + init_contract "$DISTRIBUTION_CONTRACT_BINARY_ID" "$DISTRIBUTION_INIT" "$DISTRIBUTION_LABEL" + init_contract "$SUBDAO_CORE_BINARY_ID" "$SECURITY_SUBDAO_CORE_INIT_MSG" "$SECURITY_SUBDAO_CORE_LABEL" + init_contract "$SUBDAO_CORE_BINARY_ID" "$GRANTS_SUBDAO_CORE_INIT_MSG" "$GRANTS_SUBDAO_CORE_LABEL" ADD_SUBDAOS_MSG='{ "update_sub_daos": { @@ -1128,10 +740,8 @@ data: "to_remove": [] } }' - check_json "$ADD_SUBDAOS_MSG" - SET_VESTING_TOKEN_MSG='{ "set_vesting_token": { "vesting_token": { @@ -1142,7 +752,6 @@ data: } }' - REGISTER_VESTING_ACCOUNTS_MSG='{ "register_vesting_accounts": { "vesting_accounts": [ @@ -1165,18 +774,13 @@ data: } }' - - $BINARY add-wasm-message execute "$DAO_CONTRACT_ADDRESS" "$ADD_SUBDAOS_MSG" - \ + $BINARY add-wasm-message execute "$DAO_CONTRACT_ADDRESS" "$ADD_SUBDAOS_MSG" \ --run-as "$DAO_CONTRACT_ADDRESS" --home "$CHAIN_DIR" - $BINARY add-wasm-message execute - "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$SET_VESTING_TOKEN_MSG" \ + $BINARY add-wasm-message execute "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$SET_VESTING_TOKEN_MSG" \ --run-as "$ADMIN_ADDRESS" --home "$CHAIN_DIR" - $BINARY add-wasm-message execute - "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" - "$REGISTER_VESTING_ACCOUNTS_MSG" \ + $BINARY add-wasm-message execute "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$REGISTER_VESTING_ACCOUNTS_MSG" \ --amount 1000untrn --run-as "$ADMIN_ADDRESS" --home "$CHAIN_DIR" function set_genesis_param() { @@ -1185,82 +789,41 @@ data: sed -i -e "s;\"$param_name\":.*;\"$param_name\": $param_value;g" "$GENESIS_PATH" } - function set_genesis_param_jq() { param_path=$1 param_value=$2 jq "${param_path} = ${param_value}" > tmp_genesis_file.json < "$GENESIS_PATH" && mv tmp_genesis_file.json "$GENESIS_PATH" } - function convert_bech32_base64_esc() { $BINARY keys parse $1 --output json | jq .bytes | xxd -r -p | base64 | sed -e 's/\//\\\//g' } - - DAO_CONTRACT_ADDRESS_B64=$(convert_bech32_base64_esc - "$DAO_CONTRACT_ADDRESS") - + DAO_CONTRACT_ADDRESS_B64=$(convert_bech32_base64_esc "$DAO_CONTRACT_ADDRESS") echo $DAO_CONTRACT_ADDRESS_B64 - - set_genesis_param admins - "[\"$DAO_CONTRACT_ADDRESS\"]" # admin module - - set_genesis_param treasury_address - "\"$DAO_CONTRACT_ADDRESS\"" # feeburner - - set_genesis_param fee_collector_address - "\"$DAO_CONTRACT_ADDRESS\"" # tokenfactory - - set_genesis_param security_address - "\"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS\"," # cron - - set_genesis_param limit - 5 # cron - - #set_genesis_param allow_messages - "[\"*\"]" # interchainaccounts - - set_genesis_param signed_blocks_window - "\"$SLASHING_SIGNED_BLOCKS_WINDOW\"," # slashing - - set_genesis_param min_signed_per_window - "\"$SLASHING_MIN_SIGNED\"," # slashing - - set_genesis_param slash_fraction_double_sign - "\"$SLASHING_FRACTION_DOUBLE_SIGN\"," # slashing - - set_genesis_param slash_fraction_downtime - "\"$SLASHING_FRACTION_DOWNTIME\"" # slashing - - set_genesis_param minimum_gas_prices - "$MIN_GAS_PRICES," # globalfee - - set_genesis_param max_total_bypass_min_fee_msg_gas_usage - "\"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE\"" # globalfee - - set_genesis_param_jq ".app_state.globalfee.params.bypass_min_fee_msg_types" - "$BYPASS_MIN_FEE_MSG_TYPES" # globalfee - - set_genesis_param proposer_fee - "\"0.25\"" # builder(POB) - - set_genesis_param escrow_account_address - "\"$DAO_CONTRACT_ADDRESS_B64\"," # builder(POB) - - set_genesis_param sudo_call_gas_limit - "\"1000000\"" # contractmanager - - set_genesis_param max_gas - "\"1000000000\"" # consensus_params - + set_genesis_param admins "[\"$DAO_CONTRACT_ADDRESS\"]" # admin module + set_genesis_param treasury_address "\"$DAO_CONTRACT_ADDRESS\"" # feeburner + set_genesis_param fee_collector_address "\"$DAO_CONTRACT_ADDRESS\"" # tokenfactory + set_genesis_param security_address "\"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS\"," # cron + set_genesis_param limit 5 # cron + #set_genesis_param allow_messages "[\"*\"]" # interchainaccounts + set_genesis_param signed_blocks_window "\"$SLASHING_SIGNED_BLOCKS_WINDOW\"," # slashing + set_genesis_param min_signed_per_window "\"$SLASHING_MIN_SIGNED\"," # slashing + set_genesis_param slash_fraction_double_sign "\"$SLASHING_FRACTION_DOUBLE_SIGN\"," # slashing + set_genesis_param slash_fraction_downtime "\"$SLASHING_FRACTION_DOWNTIME\"" # slashing + set_genesis_param minimum_gas_prices "$MIN_GAS_PRICES," # globalfee + set_genesis_param max_total_bypass_min_fee_msg_gas_usage "\"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE\"" # globalfee + set_genesis_param_jq ".app_state.globalfee.params.bypass_min_fee_msg_types" "$BYPASS_MIN_FEE_MSG_TYPES" # globalfee + set_genesis_param proposer_fee "\"0.25\"" # builder(POB) + set_genesis_param escrow_account_address "\"$DAO_CONTRACT_ADDRESS_B64\"," # builder(POB) + set_genesis_param sudo_call_gas_limit "\"1000000\"" # contractmanager + set_genesis_param max_gas "\"1000000000\"" # consensus_params if ! jq -e . "$GENESIS_PATH" >/dev/null 2>&1; then echo "genesis appears to become incorrect json" >&2 exit 1 fi - echo "DAO $DAO_CONTRACT_ADDRESS" updateGenesis.sh: | #!/bin/bash @@ -1274,117 +837,61 @@ data: ls $CHAIN_DIR/config $CHAIN_BIN tendermint show-node-id - updateConfig.sh: > + updateConfig.sh: | #!/bin/bash - STAKEDENOM=${DENOM:-untrn} - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - P2PPORT=${P2PPORT:-26656} - RPCPORT=${RPCPORT:-26657} - RESTPORT=${RESTPORT:-1317} - ROSETTA=${ROSETTA:-8080} - set -eux - ls $CHAIN_DIR - - sed -i -e 's/timeout_commit = "5s"/timeout_commit = "1s"/g' - "$CHAIN_DIR/config/config.toml" - - sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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/timeout_commit = "5s"/timeout_commit = "1s"/g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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/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/minimum-gas-prices = \"\"/minimum-gas-prices = - \"0$STAKEDENOM\"/g" "$CHAIN_DIR/config/app.toml" - + sed -i -e "s/minimum-gas-prices = \"\"/minimum-gas-prices = \"0$STAKEDENOM\"/g" "$CHAIN_DIR/config/app.toml" sed -i -e 's/enabled = false/enabled = true/g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's/prometheus-retention-time = 0/prometheus-retention-time = 1000/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/prometheus-retention-time = 0/prometheus-retention-time = - 1000/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#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2PPORT"'"#g' - "$CHAIN_DIR/config/config.toml" - - sed -i -e 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPCPORT"'"#g' - "$CHAIN_DIR/config/config.toml" - - sed -i -e 's#"tcp://localhost:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' - "$CHAIN_DIR/config/app.toml" - - sed -i -e 's#"tcp://0.0.0.0:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' - "$CHAIN_DIR/config/app.toml" - + sed -i -e 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2PPORT"'"#g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPCPORT"'"#g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's#"tcp://localhost:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's#"tcp://0.0.0.0:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' "$CHAIN_DIR/config/app.toml" sed -i -e 's#":8080"#":'"$ROSETTA"'"#g' "$CHAIN_DIR/config/app.toml" - sed -i -e 's#localhost#0.0.0.0#g' "$CHAIN_DIR/config/app.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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -1392,9 +899,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -1405,15 +910,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -1443,7 +945,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -1473,19 +974,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -1530,23 +1024,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -1571,14 +1059,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -1586,17 +1069,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -1605,53 +1082,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/config-configmap.yaml deleted file mode 100644 index c23fa16c8..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - neutron-1.json: >- - {"chain_name":"neutron","assets":[{"description":"The native token of - Neutron - chain.","denom_units":[{"denom":"untrn","exponent":0},{"denom":"ntrn","exponent":6}],"base":"untrn","name":"Neutron","display":"ntrn","symbol":"NTRN","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg"},"coingecko_id":"neutron"}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/deployment.yaml index ffd4cb904..27df99860 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: neutron-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: neutron,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-neutron-1 + - name: registry-neutron-1 mountPath: /chains/neutron-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-neutron-1 + - name: registry-neutron-1 configMap: - name: chain-neutron-1 - - name: chain-cosmoshub-4 + name: registry-neutron-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/neutron-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/neutron-1-configmap.yaml new file mode 100644 index 000000000..56e0447aa --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/neutron-1-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-neutron-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-neutron-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "neutron", + "status": "live", + "network_type": "devnet", + "chain_id": "neutron-1", + "pretty_name": "Neutron Devnet", + "bech32_prefix": "neutron", + "daemon_name": "neutrond", + "node_home": "/root/.neutrond", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "untrn", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "untrn" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/neutron-org/neutron", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "neutron", + "assets": [ + { + "description": "The native token of Neutron chain.", + "denom_units": [ + { + "denom": "untrn", + "exponent": 0 + }, + { + "denom": "ntrn", + "exponent": 6 + } + ], + "base": "untrn", + "name": "Neutron", + "display": "ntrn", + "symbol": "NTRN", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg" + }, + "coingecko_id": "neutron" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/relayer/hermes-neutron-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/relayer/hermes-neutron-cosmos-configmap.yaml index 9bd1a33ef..0ae2e9aac 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/relayer/hermes-neutron-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/relayer/hermes-neutron-cosmos-configmap.yaml @@ -11,313 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-neutron-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "neutron-1" - type = "CosmosSdk" - key_name = "neutron-1" - ccv_consumer_chain = true - - rpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "neutron" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "untrn" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "neutron-1" - type = "CosmosSdk" - key_name = "neutron-1-cli" - ccv_consumer_chain = true - - rpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "neutron" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "untrn" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/neutron/relayer/hermes-neutron-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/neutron/relayer/hermes-neutron-cosmos-statefulset.yaml index 2036ab842..b83d32d49 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/neutron/relayer/hermes-neutron-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/neutron/relayer/hermes-neutron-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-neutron-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for neutron-1 service..." - - wait-for-service - neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,101 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for neutron-1..." - hermes keys add \ --chain neutron-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name neutron-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="untrn" - - RLY_ADDR=$(hermes --json keys list --chain neutron-1 | tail -1 | - jq -r '.result."neutron-1".account') - + RLY_ADDR=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for neutron-1-cli..." + hermes keys add \ + --chain neutron-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name neutron-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --a-connection connection-0 \ + --channel-version 1 \ + --order ordered \ + --a-chain neutron-1 \ + --a-port consumer \ + --b-port provider + + hermes create channel \ + --a-connection connection-0 \ + --a-chain neutron-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +227,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +269,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/genesis-statefulset.yaml index 93fff77a3..6ae432684 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/genesis-service.yaml index 44b24d5c2..c51e1e9aa 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: noble-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/genesis-statefulset.yaml index 03d7a3c10..ad3dbc392 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: nobled - name: CHAIN_ID value: noble-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: nobled - name: CHAIN_ID value: noble-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.noble name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/setup-scripts-configmap.yaml index 11ffc6ffa..c739b4d02 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/noble/setup-scripts-configmap.yaml @@ -13,300 +13,130 @@ metadata: starship.io/chain-name: noble starship.io/chain-id: noble-1 data: - createGenesis.sh: > + createGenesis.sh: | #!/bin/bash - set -eux - 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}" - # 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_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_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_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_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_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_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" - + 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_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_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_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_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_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_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" - 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, if not, set - CHAIN_GENESIS_CMD to empty - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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" # 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" - + 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" - + 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" - + $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" - + $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); @@ -324,12 +154,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -341,106 +167,57 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - updateGenesis.sh: > + updateGenesis.sh: | #!/bin/bash - 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) - + 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") - + 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_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_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" \ @@ -489,12 +266,9 @@ data: "address": $pauser }, "params": {} - }' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json && mv - /tmp/genesis.json $CHAIN_DIR/config/genesis.json - + }' $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" \ @@ -542,14 +316,10 @@ data: "address": $pauser }, "params": {} - }' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json && mv - /tmp/genesis.json $CHAIN_DIR/config/genesis.json - + }' $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", @@ -568,7 +338,6 @@ data: ] }' - FRNZ_METADATA='{ "base": "ufrienzies", "display": "ufrienzies", @@ -592,26 +361,19 @@ data: ] }' - 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 - + ' $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, @@ -642,14 +404,10 @@ data: "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 - + }' $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": [ @@ -661,36 +419,19 @@ data: "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 - + }' $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 - + 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 @@ -700,9 +441,7 @@ data: 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 @@ -712,88 +451,49 @@ data: 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 + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -801,27 +501,14 @@ data: 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 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 + 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 @@ -830,60 +517,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -891,9 +549,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -904,15 +560,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -942,7 +595,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -972,19 +624,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -1029,23 +674,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -1070,14 +709,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -1085,17 +719,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -1104,53 +732,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/config-configmap.yaml deleted file mode 100644 index 9b6b43756..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/config-configmap.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - noble-1.json: >- - {"chain_name":"noble","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"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/deployment.yaml index e682636a9..b402c5d1a 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: noble-1. Waiting for it to start..." + echo "Checking: http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: noble-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: noble,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-noble-1 + - name: registry-noble-1 mountPath: /chains/noble-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-noble-1 + - name: registry-noble-1 configMap: - name: chain-noble-1 - - name: chain-cosmoshub-4 + name: registry-noble-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/noble-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/noble-1-configmap.yaml new file mode 100644 index 000000000..6c5c5c47f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/noble-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-noble-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-noble-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "noble", + "status": "live", + "network_type": "devnet", + "chain_id": "noble-1", + "pretty_name": "Noble Devnet", + "bech32_prefix": "noble", + "daemon_name": "nobled", + "node_home": "/root/.noble", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uusdc", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uusdc" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/noble-assets/noble", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "noble", + "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" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/relayer/hermes-noble-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/relayer/hermes-noble-cosmos-configmap.yaml index eca75e9d0..9e8a93313 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/relayer/hermes-noble-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/relayer/hermes-noble-cosmos-configmap.yaml @@ -11,311 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-noble-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "noble-1" - type = "CosmosSdk" - key_name = "noble-1" - - rpc_addr = "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "noble" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uusdc" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "noble-1" - type = "CosmosSdk" - key_name = "noble-1-cli" - - rpc_addr = "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "noble" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uusdc" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/noble/relayer/hermes-noble-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/noble/relayer/hermes-noble-cosmos-statefulset.yaml index dc77654fc..9ae2fb04f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/noble/relayer/hermes-noble-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/noble/relayer/hermes-noble-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-noble-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for noble-1 service..." - - wait-for-service - noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: noble-1. Waiting for it to start..." + echo "Checking: http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for noble-1..." - hermes keys add \ --chain noble-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name noble-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uusdc" - - RLY_ADDR=$(hermes --json keys list --chain noble-1 | tail -1 | jq - -r '.result."noble-1".account') - + RLY_ADDR=$(hermes --json keys list --chain noble-1 | tail -1 | jq -r '.result."noble-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://noble-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for noble-1-cli..." + hermes keys add \ + --chain noble-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name noble-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain noble-1 | tail -1 | jq -r '.result."noble-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://noble-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain noble-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/cometmock-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/cometmock-service.yaml new file mode 100644 index 000000000..772ca9584 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/cometmock-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: rpc + port: 22331 + protocol: TCP + targetPort: 22331 + selector: + app.kubernetes.io/name: cosmoshub-4-cometmock diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/cometmock-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/cometmock-statefulset.yaml new file mode 100644 index 000000000..86d645a9f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/cometmock-statefulset.yaml @@ -0,0 +1,209 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-cometmock + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/name: cosmoshub-4-cometmock + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/type: cometmock + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/rawname: cosmoshub-4-cometmock + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-wait + image: curlimages/curl + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-comet + image: ghcr.io/informalsystems/cometmock:v0.37.x + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + command: + - bash + - '-c' + - |- + mkdir -p /chain/genesis/config + mkdir -p /chain/genesis/data + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json + echo "Genesis file that we got....." + cat /chain/genesis/config/genesis.json + + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + + echo "copy cometmock binary to shared dir" + cp /usr/local/bin/cometmock /chain/cometmock + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + containers: + - name: comet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" + NODE_HOME_STR="/chain/genesis" + + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + readinessProbe: + httpGet: + path: /status + port: 22331 + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/genesis-statefulset.yaml index 7c518a5a6..20d3d7796 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.3' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -196,17 +213,12 @@ spec: command: - bash - '-c' - - >- + - |- #!/bin/bash - set -euo pipefail - START_ARGS="" - - START_ARGS="--grpc-web.enable=false --transport=grpc - --with-tendermint=false --address tcp://0.0.0.0:26658" - + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" $CHAIN_BIN start $START_ARGS resources: @@ -224,7 +236,7 @@ spec: - mountPath: /scripts name: scripts - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -255,11 +267,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/genesis-statefulset.yaml index d6883f47b..4271021c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -299,11 +316,9 @@ spec: command: - bash - '-c' - - >- + - |- export FAUCET_TOKENS=$(printf '%s\n' ${COINS//[[:digit:]]/}) - for coin in ${COINS//,/ } - do var="FAUCET_CREDIT_AMOUNT_$(printf '%s\n' ${coin//[[:digit:]]/} | tr '[:lower:]' '[:upper:]')" amt="${coin//[!0-9]/}" @@ -319,29 +334,19 @@ spec: export $var="$creditAmt" done - export FAUCET_PATH_PATTERN="${HD_PATH:0:$((${#HD_PATH}-1))}a" - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) echo "FAUCET_MNEMONIC: $FAUCET_MNEMONIC" - echo "FAUCET_PATH_PATTERN: $FAUCET_PATH_PATTERN" - export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10; done - - /app/packages/faucet/bin/cosmos-faucet-dist start - "http://localhost:26657" + /app/packages/faucet/bin/cosmos-faucet-dist start "http://localhost:26657" resources: limits: cpu: '0.2' @@ -357,7 +362,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/config-configmap.yaml deleted file mode 100644 index a40ed5f6b..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/deployment.yaml index cd638e273..629f5f5be 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-cosmjs-faucet/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/genesis-statefulset.yaml index 68c33d6c4..b5b03f30b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/setup-scripts-configmap.yaml index f48d63c09..d5ca9cd02 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/osmosis/setup-scripts-configmap.yaml @@ -13,243 +13,122 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - createGenesis.sh: > + createGenesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - set -eu - - # check if the binary has genesis subcommand or not, if not, set - CHAIN_GENESIS_CMD to empty - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add relayer key and delegate tokens - echo "Adding key...." $(jq -r ".relayers[0].name" $KEYS_CONFIG) - - jq -r ".relayers[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".relayers[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".relayers[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".relayers[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" echo "Creating gentx..." - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - 5000000000$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) 5000000000$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - updateGenesis.sh: > + updateGenesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - WASM_PERMISSIONLESS="${WASM_PERMISSIONLESS:=true}" - set -eu - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" - $CHAIN_DIR/config/genesis.json - - - jq -r '.app_state.staking.params.unbonding_time |= "15s"' - $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 |= "6s"' - $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 - + jq -r '.app_state.staking.params.unbonding_time |= "15s"' $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 |= "6s"' $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 # Set wasm as permissioned or permissionless based on environment variable - wasm_permission="Nobody" - if [ $WASM_PERMISSIONLESS == "true" ] - then wasm_permission="Everybody" fi - - jq -r ".app_state.wasm.params.code_upload_access.permission |= - \"${wasm_permission}\"" $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; - mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - - jq -r ".app_state.wasm.params.instantiate_default_permission |= - \"${wasm_permission}\"" $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; - mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - + jq -r ".app_state.wasm.params.code_upload_access.permission |= \"${wasm_permission}\"" $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r ".app_state.wasm.params.instantiate_default_permission |= \"${wasm_permission}\"" $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json $CHAIN_BIN tendermint show-node-id - updateConfig.sh: > + updateConfig.sh: | #!/bin/bash - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - set -eu - 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/timeout_commit = "5s"/timeout_commit = "1s"/g' - $CHAIN_DIR/config/config.toml - - sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:26657"#g' $CHAIN_DIR/config/config.toml + sed -i -e 's/timeout_commit = "5s"/timeout_commit = "1s"/g' $CHAIN_DIR/config/config.toml + sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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 - 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 - + 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#enabled-unsafe-cors = false#enabled-unsafe-cors = true#g' - $CHAIN_DIR/config/app.toml - + 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#enabled-unsafe-cors = false#enabled-unsafe-cors = true#g' $CHAIN_DIR/config/app.toml sed -i -e 's#swagger = false#swagger = true#g' $CHAIN_DIR/config/app.toml - function get_next_line_number() { local txt=$1 local file=$2 @@ -257,34 +136,17 @@ data: echo $((line_number + 1)) } + line_number=$(get_next_line_number "Enable defines if the API server should be enabled." $CHAIN_DIR/config/app.toml) + sed -i -e "${line_number}s/enable = false/enable = true/g" $CHAIN_DIR/config/app.toml - line_number=$(get_next_line_number "Enable defines if the API server should - be enabled." $CHAIN_DIR/config/app.toml) - - sed -i -e "${line_number}s/enable = false/enable = true/g" - $CHAIN_DIR/config/app.toml - - - 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 "Enable defines if the gRPC server should - be enabled." $CHAIN_DIR/config/app.toml) + 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 - sed -i -e "${line_number}s/enable = false/enable = true/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 "Enable defines if the gRPC server should be enabled." $CHAIN_DIR/config/app.toml) + sed -i -e "${line_number}s/enable = false/enable = true/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 if [ "$METRICS" == "true" ]; then line_number=$(get_next_line_number "other sinks such as Prometheus." $CHAIN_DIR/config/app.toml) @@ -294,59 +156,33 @@ data: 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 - + 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 if [ "$METRICS" == "true" ]; then sed -i -e "s/prometheus = false/prometheus = true/g" $CHAIN_DIR/config/config.toml fi - $CHAIN_BIN tendermint show-node-id - createValidator.sh: > + createValidator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - set -eu - # Wait for the node to be synced - max_tries=10 - while [[ $($CHAIN_BIN status 2>&1 | jq ".SyncInfo.catching_up") == true ]] - do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -354,9 +190,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -367,15 +201,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -402,7 +233,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -423,15 +253,10 @@ data: cat /validator.log | jq } - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -469,23 +294,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -510,14 +329,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -525,17 +339,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -544,53 +352,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/config-configmap.yaml deleted file mode 100644 index a40ed5f6b..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/deployment.yaml index cd638e273..629f5f5be 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain-custom-scripts/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/genesis-service.yaml index 3532091d1..f7eff332a 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/genesis-statefulset.yaml index 32ae2fa38..cc08a761c 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,60 +84,35 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") - - - echo "Adding balance to - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account - osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo - --keyring-backend="test" - - - echo "Adding balance to - osmo10eykchznjdn8jdlwaj5v9wvlmdsp6kxx7u0hv9" + echo "Adding balance to osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account - osmo10eykchznjdn8jdlwaj5v9wvlmdsp6kxx7u0hv9 2000000000000uosmo - --keyring-backend="test" + echo "Adding balance to osmo10eykchznjdn8jdlwaj5v9wvlmdsp6kxx7u0hv9" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo10eykchznjdn8jdlwaj5v9wvlmdsp6kxx7u0hv9 2000000000000uosmo --keyring-backend="test" resources: limits: cpu: '0.5' @@ -156,6 +147,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -163,19 +170,13 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - - jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json - /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv - $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json - + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json bash -e /scripts/update-config.sh resources: @@ -272,7 +273,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -303,11 +304,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -330,13 +331,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -359,20 +357,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -391,7 +383,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/config-configmap.yaml deleted file mode 100644 index a40ed5f6b..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/deployment.yaml index cd638e273..629f5f5be 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-chain/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-statefulset.yaml index dd6396803..047f9b1a4 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -299,11 +316,9 @@ spec: command: - bash - '-c' - - >- + - |- export FAUCET_TOKENS=$(printf '%s\n' ${COINS//[[:digit:]]/}) - for coin in ${COINS//,/ } - do var="FAUCET_CREDIT_AMOUNT_$(printf '%s\n' ${coin//[[:digit:]]/} | tr '[:lower:]' '[:upper:]')" amt="${coin//[!0-9]/}" @@ -319,29 +334,19 @@ spec: export $var="$creditAmt" done - export FAUCET_PATH_PATTERN="${HD_PATH:0:$((${#HD_PATH}-1))}a" - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) echo "FAUCET_MNEMONIC: $FAUCET_MNEMONIC" - echo "FAUCET_PATH_PATTERN: $FAUCET_PATH_PATTERN" - export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10; done - - /app/packages/faucet/bin/cosmos-faucet-dist start - "http://localhost:26657" + /app/packages/faucet/bin/cosmos-faucet-dist start "http://localhost:26657" resources: limits: cpu: '0.2' @@ -357,7 +362,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/config-configmap.yaml deleted file mode 100644 index eb9431ca7..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/deployment.yaml index 1ddae6556..c916673cf 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-cosmoshub-cosmjs-faucet/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/genesis-service.yaml index 0330e811f..310f5812a 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: custom-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/genesis-statefulset.yaml index 90aa76dc2..25e6260a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: custom-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: custom-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/setup-scripts-configmap.yaml index 44b9625cd..944c65d6f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/custom/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: custom starship.io/chain-id: custom-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/config-configmap.yaml deleted file mode 100644 index 7fef3d423..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/config-configmap.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - custom-1.json: '{"chain_name":"custom","assets":[]}' diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/custom-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/custom-1-configmap.yaml new file mode 100644 index 000000000..37a022b4c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/custom-1-configmap.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-custom-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-custom-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "custom-1", + "status": "live", + "network_type": "devnet", + "chain_id": "custom-1", + "pretty_name": "undefined Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "custom-1", + "assets": [ + { + "description": "The denom for token uosmo", + "base": "uosmo", + "name": "uosmo", + "display": "uosmo", + "symbol": "UOSMO", + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "uosmo", + "exponent": 6 + } + ], + "coingecko_id": "custom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/deployment.yaml index 61853d8d3..668c1bf98 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://custom-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: custom-1. Waiting for it to start..." + echo "Checking: http://custom-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: custom-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: custom - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653 + value: http://custom-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1313 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://custom-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-custom-1 + - name: registry-custom-1 mountPath: /chains/custom-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-custom-1 + - name: registry-custom-1 configMap: - name: chain-custom-1 + name: registry-custom-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/one-custom-chain/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/config-configmap.yaml deleted file mode 100644 index 9f61b70c6..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/config-configmap.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - simapp.json: '{"chain_name":"simapp","assets":[]}' diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/deployment.yaml index b3bb17b66..55523fb25 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: Always + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: simapp. Waiting for it to start..." + echo "Checking: http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: simapp + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: simapp - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26657 + value: http://simapp-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://simapp-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-simapp + - name: registry-simapp mountPath: /chains/simapp resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-simapp + - name: registry-simapp configMap: - name: chain-simapp + name: registry-simapp diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/simapp-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/simapp-configmap.yaml new file mode 100644 index 000000000..9c650b3e2 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/registry/simapp-configmap.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-simapp + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-simapp +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "simapp", + "status": "live", + "network_type": "devnet", + "chain_id": "simapp", + "pretty_name": "Sim App Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "simd", + "node_home": "/root/.simapp", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "stake", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "stake" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/cosmos-sdk/tree/main/simapp", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "simapp", + "assets": [ + { + "description": "The denom for token stake", + "base": "stake", + "name": "stake", + "display": "stake", + "symbol": "STAKE", + "denom_units": [ + { + "denom": "stake", + "exponent": 0 + }, + { + "denom": "stake", + "exponent": 6 + } + ], + "coingecko_id": "simapp" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/genesis-service.yaml index a256f2fd9..f7c774b2f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: simapp-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/genesis-statefulset.yaml index 272db531a..7b83d2ea7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: simd - name: CHAIN_ID value: simapp + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.2' @@ -140,6 +141,22 @@ spec: value: simd - name: CHAIN_ID value: simapp + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/setup-scripts-configmap.yaml index ffaab1609..641c2e189 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: simapp starship.io/chain-id: simapp data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/validator-service.yaml index bbaf6dded..50b342611 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: simapp-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/validator-statefulset.yaml index fcfe93b42..001e49f66 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/simapp/simapp/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: simapp. Waiting for it to start..." - echo "Checking: http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: simapp. Waiting for it to start..." + echo "Checking: http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/simapp:v0.47.3 imagePullPolicy: Always @@ -86,6 +86,22 @@ spec: value: simd - name: CHAIN_ID value: simapp + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: simapp-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: simd - name: CHAIN_ID value: simapp + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: simapp-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/genesis-statefulset.yaml index faefd4c19..ff0b9fde7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/genesis-service.yaml index 4990cdb2d..49d3de57a 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: juno-2-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/genesis-statefulset.yaml index eb40fc8ca..44f3ce7c3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: junod - name: CHAIN_ID value: juno-2 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: junod - name: CHAIN_ID value: juno-2 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.juno name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/setup-scripts-configmap.yaml index 1ffdb70b1..46a6198bc 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/juno/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: juno starship.io/chain-id: juno-2 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/genesis-statefulset.yaml index f9988940f..c94e2e408 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/config-configmap.yaml deleted file mode 100644 index 8912d3dca..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/config-configmap.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} - juno-2.json: >- - {"chain_name":"juno","assets":[{"base":"ujuno","description":"The native - token of JUNO - Chain","name":"Juno","display":"juno","symbol":"JUNO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg"},"denom_units":[{"denom":"ujuno","exponent":0},{"denom":"juno","exponent":6}],"coingecko_id":"juno-network"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/deployment.yaml index b2e128262..1e6ff01e9 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/deployment.yaml @@ -13,45 +13,89 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4,juno-2 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub,juno - name: REGISTRY_CHAIN_CLIENT_RPCS - value: >- - http://localhost:26653,http://localhost:26657,http://localhost:26658 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS - value: >- - http://localhost:26653,http://localhost:26657,http://localhost:26658 + value: http://localhost:26653,http://localhost:26657,http://localhost:26658 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS - value: >- - http://localhost:1313,http://localhost:1317,http://localhost:1318 + value: http://localhost:1313,http://localhost:1317,http://localhost:1318 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 - - name: chain-juno-2 + - name: registry-juno-2 mountPath: /chains/juno-2 resources: limits: @@ -61,24 +105,22 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 - - name: chain-cosmoshub-4 + name: registry-osmosis-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 - - name: chain-juno-2 + name: registry-cosmoshub-4 + - name: registry-juno-2 configMap: - name: chain-juno-2 + name: registry-juno-2 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/juno-2-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/juno-2-configmap.yaml new file mode 100644 index 000000000..23586e466 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/juno-2-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-juno-2 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-juno-2 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "juno", + "status": "live", + "network_type": "devnet", + "chain_id": "juno-2", + "pretty_name": "Juno Devnet", + "bech32_prefix": "juno", + "daemon_name": "junod", + "node_home": "/root/.juno", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "ujuno", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ujuno" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/CosmosContracts/juno", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "juno", + "assets": [ + { + "base": "ujuno", + "description": "The native token of JUNO Chain", + "name": "Juno", + "display": "juno", + "symbol": "JUNO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg" + }, + "denom_units": [ + { + "denom": "ujuno", + "exponent": 0 + }, + { + "denom": "juno", + "exponent": 6 + } + ], + "coingecko_id": "juno-network" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/relayer/hermes-relayer-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/relayer/hermes-relayer-configmap.yaml index 006f20fe1..9ad846b8f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/relayer/hermes-relayer-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/relayer/hermes-relayer-configmap.yaml @@ -11,407 +11,213 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-relayer data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - [[chains]] - id = "juno-2" - type = "CosmosSdk" - key_name = "juno-2" - - rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "juno" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "ujuno" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1-cli" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - [[chains]] - id = "juno-2" - type = "CosmosSdk" - key_name = "juno-2-cli" - - rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "juno" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "ujuno" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/relayer/hermes-relayer-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/relayer/hermes-relayer-statefulset.yaml index 2f3eac939..def55caf9 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/three-chain/relayer/hermes-relayer-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/three-chain/relayer/hermes-relayer-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,57 +56,47 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." - - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-juno-2 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for juno-2 service..." + - |- - wait-for-service - juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -125,105 +115,122 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for osmosis-1..." - hermes keys add \ --chain osmosis-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name osmosis-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" - - RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | - jq -r '.result."osmosis-1".account') - + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true - echo "Creating key for juno-2..." + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + echo "Creating key for juno-2..." hermes keys add \ --chain juno-2 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name juno-2 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="ujuno" - - RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq - -r '.result."juno-2".account') - + RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true + echo "Creating key for juno-2-cli..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name juno-2-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + hermes create channel \ --new-client-connection --yes \ --b-chain cosmoshub-4 \ - - - --a-chain osmosis-1 \ --a-port transfer \ --b-port transfer @@ -231,9 +238,6 @@ spec: hermes create channel \ --new-client-connection --yes \ --b-chain juno-2 \ - - - --a-chain osmosis-1 \ --a-port transfer \ --b-port transfer @@ -241,9 +245,6 @@ spec: hermes create channel \ --new-client-connection --yes \ --b-chain cosmoshub-4 \ - - - --a-chain juno-2 \ --a-port transfer \ --b-port transfer @@ -270,6 +271,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -308,11 +313,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/cometmock-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/cometmock-service.yaml new file mode 100644 index 000000000..772ca9584 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/cometmock-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: rpc + port: 22331 + protocol: TCP + targetPort: 22331 + selector: + app.kubernetes.io/name: cosmoshub-4-cometmock diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/cometmock-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/cometmock-statefulset.yaml new file mode 100644 index 000000000..2046466e9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/cometmock-statefulset.yaml @@ -0,0 +1,209 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-cometmock + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/name: cosmoshub-4-cometmock + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/type: cometmock + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/rawname: cosmoshub-4-cometmock + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-wait + image: curlimages/curl + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-comet + image: ghcr.io/informalsystems/cometmock:v0.37.x + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + command: + - bash + - '-c' + - |- + mkdir -p /chain/genesis/config + mkdir -p /chain/genesis/data + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json + echo "Genesis file that we got....." + cat /chain/genesis/config/genesis.json + + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + + echo "copy cometmock binary to shared dir" + cp /usr/local/bin/cometmock /chain/cometmock + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + containers: + - name: comet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" + NODE_HOME_STR="/chain/genesis" + + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + readinessProbe: + httpGet: + path: /status + port: 22331 + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/genesis-statefulset.yaml index 37ca46e78..63c10188b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -196,17 +213,12 @@ spec: command: - bash - '-c' - - >- + - |- #!/bin/bash - set -euo pipefail - START_ARGS="" - - START_ARGS="--grpc-web.enable=false --transport=grpc - --with-tendermint=false --address tcp://0.0.0.0:26658" - + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" $CHAIN_BIN start $START_ARGS resources: @@ -224,7 +236,7 @@ spec: - mountPath: /scripts name: scripts - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -255,11 +267,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/cometmock-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/cometmock-service.yaml new file mode 100644 index 000000000..ef17c101d --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/cometmock-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-cometmock + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: cometmock + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: rpc + port: 22331 + protocol: TCP + targetPort: 22331 + selector: + app.kubernetes.io/name: osmosis-1-cometmock diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/cometmock-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/cometmock-statefulset.yaml new file mode 100644 index 000000000..63ac963b9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/cometmock-statefulset.yaml @@ -0,0 +1,306 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-cometmock + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: cometmock + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-cometmock + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: osmosis + app.kubernetes.io/name: osmosis-1-cometmock + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: osmosis + app.kubernetes.io/type: cometmock + app.kubernetes.io/name: osmosis-1-cometmock + app.kubernetes.io/rawname: osmosis-1-cometmock + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + for i in $(seq 0 0); do + mkdir -p /chain/validator-$i/config /chain/validator-$i/data + 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" --home /chain/validator-$i + done + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + - name: init-wait + image: curlimages/curl + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + + for i in $(seq 0 0); do + while [ $(curl -sw '%{http_code}' http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Validator does not seem to be ready for: osmosis-1 validator-$i. Waiting for it to start..." + echo "Checking: http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + done + + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-comet + image: ghcr.io/informalsystems/cometmock:v0.37.x + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + command: + - bash + - '-c' + - |- + mkdir -p /chain/genesis/config + mkdir -p /chain/genesis/data + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json + echo "Genesis file that we got....." + cat /chain/genesis/config/genesis.json + + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + + for i in $(seq 0 0); do + mkdir -p /chain/validator-$i/config + mkdir -p /chain/validator-$i/data + curl http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_key -o /chain/validator-$i/config/node_key.json + curl http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/validator-$i/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/validator-$i/data/priv_validator_state.json + done + + echo "copy cometmock binary to shared dir" + cp /usr/local/bin/cometmock /chain/cometmock + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + containers: + - name: comet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + NODE_LISTEN_ADDR_STR="tcp://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26658" + NODE_HOME_STR="/chain/genesis" + + for i in $(seq 0 0); do + NODE_LISTEN_ADDR_STR="tcp://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:26658,$NODE_LISTEN_ADDR_STR" + NODE_HOME_STR="/chain/validator-$i,$NODE_HOME_STR" + done + + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + set -eux + + sleep 10 + + for i in $(seq 0 0); do + $CHAIN_BIN keys list --keyring-backend test --home /chain/validator-$i --output json | jq + VAL_KEY_NAME="$(jq -r '.validators[0].name' $KEYS_CONFIG)-$i" + echo "Create validator.... $VAL_KEY_NAME" + VAL_NAME=$VAL_KEY_NAME \ + NODE_URL="http://0.0.0.0:22331" \ + NODE_ARGS="--home /chain/validator-$i" \ + GAS="1000000" \ + bash -e /scripts/create-validator.sh + done + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + readinessProbe: + httpGet: + path: /status + port: 22331 + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/genesis-statefulset.yaml index 05a8029eb..be35e15a2 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -196,17 +213,12 @@ spec: command: - bash - '-c' - - >- + - |- #!/bin/bash - set -euo pipefail - START_ARGS="" - - START_ARGS="--grpc-web.enable=false --transport=grpc - --with-tendermint=false --address tcp://0.0.0.0:26658" - + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" $CHAIN_BIN start $START_ARGS resources: @@ -224,7 +236,7 @@ spec: - mountPath: /scripts name: scripts - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -255,11 +267,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/validator-service.yaml index 82a7dfb81..4269dc589 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/validator-statefulset.yaml index 5a616a755..f1e5b4643 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cometmock/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -278,18 +279,13 @@ spec: command: - bash - '-c' - - >- + - |- set -eux - START_ARGS="" - - START_ARGS="--grpc-web.enable=false --transport=grpc - --with-tendermint=false --address tcp://0.0.0.0:26658" - + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" # Starting the chain - $CHAIN_BIN start $START_ARGS resources: limits: @@ -306,7 +302,7 @@ spec: - mountPath: /scripts name: scripts - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -351,11 +347,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/genesis-statefulset.yaml index 81df6d906..cf70bfa6f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/validator-service.yaml index 31a91d385..59bc68aea 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/validator-statefulset.yaml index 0ea564bab..234796f35 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/genesis-statefulset.yaml index 0a9008310..688d3c226 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/validator-service.yaml index 82a7dfb81..4269dc589 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/validator-statefulset.yaml index f1c14a8df..a12f59b25 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/config-configmap.yaml deleted file mode 100644 index 8cddf8e66..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/deployment.yaml index d16e479db..828a283c3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 - - name: chain-cosmoshub-4 + name: registry-osmosis-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/relayer/hermes-osmos-cosmos-configmap.yaml index 37b0a81be..4c9a162b7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/relayer/hermes-osmos-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/relayer/hermes-osmos-cosmos-configmap.yaml @@ -11,303 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-osmos-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "error" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = false - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "error" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = false - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1-cli" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/relayer/hermes-osmos-cosmos-statefulset.yaml index 76d0f2e42..7600dadf8 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/relayer/hermes-osmos-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-cosmos/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for osmosis-1..." - hermes keys add \ --chain osmosis-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name osmosis-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" - - RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | - jq -r '.result."osmosis-1".account') - + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/genesis-statefulset.yaml index 81df6d906..cf70bfa6f 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/validator-service.yaml index 31a91d385..59bc68aea 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/validator-statefulset.yaml index 0ea564bab..234796f35 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/genesis-statefulset.yaml index 0a9008310..688d3c226 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/validator-service.yaml index 82a7dfb81..4269dc589 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/validator-statefulset.yaml index f1c14a8df..a12f59b25 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/config-configmap.yaml deleted file mode 100644 index 8cddf8e66..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/deployment.yaml index d16e479db..828a283c3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 - - name: chain-cosmoshub-4 + name: registry-osmosis-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-configmap.yaml index 0b3e87ac9..f6ff8e5cc 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-configmap.yaml @@ -14,7 +14,7 @@ data: path.json: |- { "paths": { - "path": { + "path0": { "src": { "chain-id": "osmosis-1", "client-id": "", diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-statefulset.yaml index bd573fd80..e3320e95c 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-statefulset.yaml @@ -35,40 +35,41 @@ spec: app.kubernetes.io/version: 4.0.0-alpha.0 spec: initContainers: - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1 imagePullPolicy: IfNotPresent @@ -87,44 +88,29 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR/config - cp /configs/path.json $RELAYER_DIR/config/ - MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo "Setting up chain osmosis-1..." - cp /configs/osmosis-1.json $RELAYER_DIR/config/ - rly chains add --file /configs/osmosis-1.json osmosis-1 - echo "Creating key for osmosis-1..." - - echo "$MNEMONIC" | rly keys restore osmosis-1 osmosis-1 - --restore-key-type secp256k1 --coin-type 118 - + echo "$MNEMONIC" | rly keys restore osmosis-1 osmosis-1 --restore-key-type secp256k1 --coin-type 118 DENOM="uosmo" - RLY_ADDR=$(rly keys show osmosis-1 osmosis-1) - echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ @@ -132,30 +118,28 @@ spec: "true" || true echo "Setting up chain cosmoshub-4..." - cp /configs/cosmoshub-4.json $RELAYER_DIR/config/ - rly chains add --file /configs/cosmoshub-4.json cosmoshub-4 - echo "Creating key for cosmoshub-4..." - - echo "$MNEMONIC" | rly keys restore cosmoshub-4 cosmoshub-4 - --restore-key-type secp256k1 --coin-type 118 - + echo "$MNEMONIC" | rly keys restore cosmoshub-4 cosmoshub-4 --restore-key-type secp256k1 --coin-type 118 DENOM="uatom" - RLY_ADDR=$(rly keys show cosmoshub-4 cosmoshub-4) - echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true + + echo "Adding paths..." + rly paths add --file /configs/path.json + + + echo "Creating client, connection and channel for path0..." + rly tx link path0 --src-port transfer --dst-port transfer resources: limits: cpu: '0.2' @@ -179,6 +163,10 @@ spec: env: - name: RELAYER_DIR value: /root/.relayer + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/genesis-service.yaml index 35ed432a2..656eb09e6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/genesis-statefulset.yaml index 6d416e62f..b21df07a1 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/validator-service.yaml index c20642356..f4e01f791 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/validator-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/validator-statefulset.yaml index 8a0b8c9ca..57ade42da 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "false" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/monitoring/prometheus-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/monitoring/prometheus-service.yaml index 37836e50b..d0bf4fed4 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/monitoring/prometheus-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/monitoring/prometheus-service.yaml @@ -18,6 +18,6 @@ spec: - name: http port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 selector: app.kubernetes.io/name: prometheus diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/genesis-service.yaml index 3532091d1..f7eff332a 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/genesis-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/genesis-statefulset.yaml index fb3865405..ae11b12d1 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/validator-service.yaml index 2cf76f116..ff7be93ac 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/validator-service.yaml @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/validator-statefulset.yaml index c43b954a5..0c0618954 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "false" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/config-configmap.yaml deleted file mode 100644 index 8cddf8e66..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/deployment.yaml index d16e479db..828a283c3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 - - name: chain-cosmoshub-4 + name: registry-osmosis-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/relayer/hermes-osmos-cosmos-configmap.yaml index c7f9c8f85..2fcda86a9 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/relayer/hermes-osmos-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/relayer/hermes-osmos-cosmos-configmap.yaml @@ -11,311 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-osmos-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = true - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1-cli" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - - event_source = { mode = 'push', url = - "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", - batch_delay = '500ms' } - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/relayer/hermes-osmos-cosmos-statefulset.yaml index a68a6bf2a..c249bf90b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/relayer/hermes-osmos-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain-monitoring/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for osmosis-1..." - hermes keys add \ --chain osmosis-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name osmosis-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" - - RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | - jq -r '.result."osmosis-1".account') - + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/configmaps/setup-scripts.yaml index 96770498c..bc50f14a3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/genesis-service.yaml index f92ec3704..a2b1a1662 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/genesis-statefulset.yaml index e765823aa..831c9bef3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -229,7 +246,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -260,11 +277,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/setup-scripts-configmap.yaml index ab07debeb..0fecce232 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: cosmoshub starship.io/chain-id: cosmoshub-4 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/validator-service.yaml index 31a91d385..59bc68aea 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/validator-statefulset.yaml index 2b5afcbe7..0ac01ae3b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/cosmoshub/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: gaiad - name: CHAIN_ID value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: cosmoshub-4-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "false" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.gaia name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/configmap.yaml index b2cc71352..27b3ba554 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/configmap.yaml @@ -10,7 +10,5 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: explorer data: - osmosis-1.json: >- - {"chain_name":"osmosis-1","coingecko":"osmosis","api":"http://localhost:1313","rpc":["http://localhost:26653"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub-4","coingecko":"cosmoshub","api":"http://localhost:1317","rpc":["http://localhost:26657"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"cosmos","logo":"","assets":[{"base":"uatom","symbol":"COSMOS","exponent":"6","coingecko_id":"cosmoshub-4","logo":""}]} + osmosis-1.json: '{"chain_name":"osmosis-1","coingecko":"osmosis","api":"http://localhost:1313","rpc":["http://localhost:26653"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]}' + cosmoshub-4.json: '{"chain_name":"cosmoshub-4","coingecko":"cosmoshub","api":"http://localhost:1317","rpc":["http://localhost:26657"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"cosmos","logo":"","assets":[{"base":"uatom","symbol":"COSMOS","exponent":"6","coingecko_id":"cosmoshub-4","logo":""}]}' diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/deployment.yaml index 2fa7f4820..05332fca1 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/deployment.yaml @@ -32,8 +32,7 @@ spec: spec: containers: - name: explorer - image: >- - ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db + image: ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db imagePullPolicy: IfNotPresent env: - name: CHAINS_CONFIG_PATH diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/service.yaml index b846d8952..dc3684ac3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/explorer/service.yaml @@ -15,6 +15,6 @@ spec: - name: http port: 8080 protocol: TCP - targetPort: '8080' + targetPort: 8080 selector: app.kubernetes.io/name: explorer diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/genesis-service.yaml index 7b6011243..61dc898c7 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/genesis-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/genesis-statefulset.yaml index 0a9008310..688d3c226 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/genesis-statefulset.yaml @@ -57,6 +57,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,44 +84,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") resources: limits: cpu: '0.5' @@ -140,6 +141,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -246,7 +263,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -277,11 +294,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node @@ -304,13 +321,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -333,20 +347,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -365,7 +373,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/setup-scripts-configmap.yaml index f52bd4bc4..ca16fceb6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: osmosis starship.io/chain-id: osmosis-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,73 +85,41 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - update-genesis.sh: > + update-genesis.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 @@ -207,9 +129,7 @@ data: 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 @@ -219,96 +139,55 @@ data: 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.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then gov_overrides_sdk_v46 else gov_overrides_sdk_v47 fi - $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -316,27 +195,14 @@ data: 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 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 + 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 @@ -345,60 +211,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -406,9 +243,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -419,15 +254,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -457,7 +289,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -487,19 +318,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -544,23 +368,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -585,14 +403,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -600,17 +413,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -619,53 +426,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/validator-service.yaml index 82a7dfb81..4269dc589 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/validator-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/validator-service.yaml @@ -15,41 +15,37 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 selector: app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/validator-statefulset.yaml index f1c14a8df..a12f59b25 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/validator-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/osmosis/validator-statefulset.yaml @@ -50,22 +50,22 @@ spec: command: - /bin/sh - '-c' - - |2- + - |- - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done echo "Ready to start" exit 0 resources: limits: cpu: '0.1' - memory: 128M + memory: 100M requests: cpu: '0.1' - memory: 128M + memory: 100M - name: init-validator image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 imagePullPolicy: IfNotPresent @@ -86,6 +86,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -103,45 +119,29 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting early" exit 0 fi - VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" - echo "Recover validator $VAL_NAME" - $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add - $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" - - - curl - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis - -o $CHAIN_DIR/config/genesis.json - + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json echo "Genesis file that we got....." - cat $CHAIN_DIR/config/genesis.json - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json resources: limits: @@ -177,6 +177,22 @@ spec: value: osmosisd - name: CHAIN_ID value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: GENESIS_HOST value: osmosis-1-genesis - name: GENESIS_PORT @@ -192,41 +208,26 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - bash -e /scripts/update-config.sh - - curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - - NODE_ID=$(curl -s - http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id - | jq -r ".node_id") - + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") if [[ $NODE_ID == "" ]]; then echo "Node ID is null, exiting early" exit 1 fi - GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 - echo "Node P2P: $GENESIS_NODE_P2P" - - sed -i "s/persistent_peers = \"\"/persistent_peers = - \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml - + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml echo "Printing the whole config.toml file" - cat $CHAIN_DIR/config/config.toml resources: limits: @@ -307,32 +308,19 @@ spec: - bash - '-c' - '-e' - - >- - until bash -e /scripts/chain-rpc-ready.sh - http://localhost:26657; do + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - set -eux - export - VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" - VAL_NAME="$(jq -r ".validators[0].name" - $KEYS_CONFIG)-$VAL_INDEX" - - echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. - Chain bin $CHAIN_BIN" - - - VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a - --keyring-backend="test") - - echo "Transfer tokens to address $VAL_ADDR before trying to - create validator. Best effort" - + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" bash -e /scripts/transfer-tokens.sh \ $VAL_ADDR \ $DENOM \ @@ -340,7 +328,6 @@ spec: "true" || true $CHAIN_BIN keys list --keyring-backend test | jq - VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh readinessProbe: exec: @@ -353,7 +340,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: DENOM @@ -398,11 +385,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.osmosisd name: node diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/config-configmap.yaml deleted file mode 100644 index 8cddf8e66..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/config-configmap.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: starship-e2e-tests - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - osmosis-1.json: >- - {"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native - token of - Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]} - cosmoshub-4.json: >- - {"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The - native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub - Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..bfbbeae2f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/deployment.yaml index d16e479db..828a283c3 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/deployment.yaml @@ -13,40 +13,81 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: starship-e2e-tests app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26653,http://localhost:26657 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26653,http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 - name: REGISTRY_CHAIN_API_RESTS value: http://localhost:1313,http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS - value: >- - http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-osmosis-1 + - name: registry-osmosis-1 mountPath: /chains/osmosis-1 - - name: chain-cosmoshub-4 + - name: registry-cosmoshub-4 mountPath: /chains/cosmoshub-4 resources: limits: @@ -56,21 +97,19 @@ spec: cpu: '0.2' memory: 200M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-osmosis-1 + - name: registry-osmosis-1 configMap: - name: chain-osmosis-1 - - name: chain-cosmoshub-4 + name: registry-osmosis-1 + - name: registry-cosmoshub-4 configMap: - name: chain-cosmoshub-4 + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..14c583ed8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/osmosis-1-configmap.yaml @@ -0,0 +1,126 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/service.yaml index 0c06fb5a7..79876f555 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/relayer/hermes-osmos-cosmos-configmap.yaml index 2b046e45a..38e679b3b 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/relayer/hermes-osmos-cosmos-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/relayer/hermes-osmos-cosmos-configmap.yaml @@ -11,303 +11,165 @@ metadata: app.kubernetes.io/role: hermes app.kubernetes.io/name: hermes-osmos-cosmos data: - config.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = false - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } - config-cli.toml: > - # The global section has parameters that apply globally to the relayer - operation. - + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. [global] - log_level = "info" - [mode] - [mode.clients] - enabled = true - refresh = true - misbehaviour = true - [mode.connections] - enabled = true - [mode.channels] - enabled = true - [mode.packets] - enabled = true - clear_interval = 100 - clear_on_start = true - tx_confirmation = true - [rest] - enabled = true - host = "0.0.0.0" - port = 3000 - [telemetry] - enabled = false - host = "0.0.0.0" - port = 3001 - [[chains]] - id = "osmosis-1" - type = "CosmosSdk" - key_name = "osmosis-1-cli" - - rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "osmo" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uosmo" } - [[chains]] - id = "cosmoshub-4" - type = "CosmosSdk" - key_name = "cosmoshub-4-cli" - - rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" - - grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" - + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } - trusted_node = false - account_prefix = "cosmos" - default_gas = 500000000 - max_gas = 1000000000 - rpc_timeout = "10s" - store_prefix = "ibc" - gas_multiplier = 2 - max_msg_num = 30 - max_tx_size = 2097152 - clock_drift = "5s" - max_block_time = "30s" - trusting_period = "75s" - trust_threshold = { numerator = "2", denominator = "3" } - address_type = { derivation = 'cosmos' } - gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/relayer/hermes-osmos-cosmos-statefulset.yaml index 46fb280ea..82042f86c 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/two-chain/relayer/hermes-osmos-cosmos-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/two-chain/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -36,7 +36,7 @@ spec: spec: initContainers: - name: init-exposer - image: ghcr.io/cosmology-tech/starship/exposer:v0.2.0 + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent command: - bash @@ -56,40 +56,41 @@ spec: volumeMounts: - mountPath: /exposer name: exposer - - name: init-osmosis-1 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 + - name: wait-for-chains + image: curlimages/curl:latest imagePullPolicy: IfNotPresent - command: - - bash - - '-c' - args: - - >- - echo "Waiting for osmosis-1 service..." - - wait-for-service - osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 env: + - name: GENESIS_PORT + value: '8081' - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - - name: init-cosmoshub-4 - image: ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0 - imagePullPolicy: IfNotPresent command: - - bash + - /bin/sh - '-c' - args: - - >- - echo "Waiting for cosmoshub-4 service..." + - |- - wait-for-service - cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M - name: init-relayer image: ghcr.io/hyperweb-io/starship/hermes:1.12.0 imagePullPolicy: IfNotPresent @@ -108,76 +109,94 @@ spec: - bash - '-c' args: - - > + - | set -ux - RLY_INDEX=${HOSTNAME##*-} - echo "Relayer Index: $RLY_INDEX" - mkdir -p $RELAYER_DIR - cp /configs/config.toml $RELAYER_DIR/config.toml - cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) - echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt - - MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" - $KEYS_CONFIG) - + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - echo "Creating key for osmosis-1..." - hermes keys add \ --chain osmosis-1 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name osmosis-1 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" - - RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | - jq -r '.result."osmosis-1".account') - + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "true" || true - echo "Creating key for cosmoshub-4..." + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \ --chain cosmoshub-4 \ --mnemonic-file $RELAYER_DIR/mnemonic.txt \ --key-name cosmoshub-4 \ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" - - RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | - jq -r '.result."cosmoshub-4".account') - + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') echo "Transfer tokens to address $RLY_ADDR" - bash -e /scripts/transfer-tokens.sh \ $RLY_ADDR \ $DENOM \ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer resources: limits: cpu: '0.2' @@ -201,6 +220,10 @@ spec: env: - name: RELAYER_DIR value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace command: - bash - '-c' @@ -239,11 +262,11 @@ spec: - /exposer/exposer resources: limits: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 100M + cpu: '0.2' + memory: 200M securityContext: allowPrivilegeEscalation: false runAsUser: 0 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/xpla/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/config-tests/xpla/configmaps/setup-scripts.yaml index aabe91dbb..a9e1fd0e6 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/xpla/configmaps/setup-scripts.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/xpla/configmaps/setup-scripts.yaml @@ -10,269 +10,70 @@ metadata: app.kubernetes.io/part-of: global app.kubernetes.io/name: setup-scripts data: - build-chain.sh: > - #!/bin/bash - - - set -euxo pipefail - - - mkdir -p /tmp/chains $UPGRADE_DIR - - - echo "Fetching code from tag" - - mkdir -p /tmp/chains/$CHAIN_NAME - - cd /tmp/chains/$CHAIN_NAME - - - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG} - elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} - else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi - fi - - - echo "Fetch wasmvm if needed" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - - if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a - fi - - - echo "Build chain binary" - - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - - - echo "Copy created binary to the upgrade directories" - - if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin - else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - fi - - - echo "Cleanup" - - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + transfer-tokens.sh: | #!/bin/bash - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - - # Usage: chain-rpc-ready.sh [RPC_URL] - - - set -euo pipefail - - - RPC_URL=${1:-"http://localhost:26657"} - - - echo 1>&2 "Checking if $RPC_URL is ready..." - - - # Check if the RPC URL is reachable, - - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - - - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 - fi + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + set -eux - # and the node is not catching up. + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; + if [[ $FAUCET_ENABLED == "false" ]]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi - - echo "$json" | jq -r .result - - exit 0 - create-genesis.sh: > + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | #!/bin/bash + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" set -eux + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } - DENOM="${DENOM:=uosmo}" - - COINS="${COINS:=100000000000000000uosmo}" - - CHAIN_ID="${CHAIN_ID:=osmosis}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - - - CHAIN_INIT_ID="$CHAIN_ID" - - if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" - fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - - sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - - - # Add genesis keys to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add faucet key to the keyring and self delegate initial coins - - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - - - # Add test keys to the keyring and self delegate initial coins - - 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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done - fi - - - echo "Creating gentx..." - - COIN=$(echo $COINS | cut -d ',' -f1) - - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - - - echo "Output of gentx" - - cat $CHAIN_DIR/config/gentx/*.json | jq - - - echo "Running collect-gentxs" - - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - - - ls $CHAIN_DIR/config + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done create-ics.sh: | #!/bin/bash @@ -416,421 +217,3 @@ data: } main - create-validator.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - - VAL_NAME="${VAL_NAME:=osmosis}" - - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - - NODE_ARGS="${NODE_ARGS}" - - GAS="${GAS:=auto}" - - - set -eux - - - # Wait for the node to be synced - - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - - do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 - done - - - # Function to compare version numbers - - version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi - } - - - # Check if cosmos_sdk_version is greater than a specified version - - is_greater() { - version_compare "$1" "$2" - return $? - } - - - function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \ - --node $NODE_URL \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --fees 100000$DENOM \ - --keyring-backend="test" \ - --output json \ - --gas $GAS \ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \ - --node $NODE_URL \ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ - --moniker $VAL_NAME \ - --amount 5000000000$DENOM \ - --chain-id $CHAIN_ID \ - --from $VAL_NAME \ - --commission-rate="0.10" \ - --commission-max-rate="0.20" \ - --commission-max-change-rate="0.01" \ - --keyring-backend test \ - --home $CHAIN_DIR \ - --fees 100000$DENOM \ - --gas $GAS \ - --output json \ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq - } - - - set +e - - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - - echo "cosmos_sdk_version: $cosmos_sdk_version" - - set -e - - - if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 - else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default - fi - ibc-connection.sh: | - #!/bin/bash - - REGISTRY_URL="$1" - CHAIN_1="$2" - CHAIN_2="$3" - - set -eux - - function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID - } - - echo "Try to get connection id, if failed, wait for 2 seconds and try again" - max_tries=20 - while [[ max_tries -gt 0 ]] - do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 - done - transfer-tokens.sh: | - #!/bin/bash - - ADDRESS="$1" - DENOM="$2" - FAUCET_URL="$3" - FAUCET_ENABLED="$4" - - set -eux - - function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \ - --request POST --write-out %{http_code} --silent --output /dev/null \ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ - $FAUCET_URL) - echo $status_code - } - - if [[ $FAUCET_ENABLED == "false" ]]; - then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 - fi - - echo "Try to send tokens, if failed, wait for 5 seconds and try again" - max_tries=5 - while [[ max_tries -gt 0 ]] - do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 - done - update-config.sh: > - #!/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 - update-genesis.sh: > - #!/bin/bash - - - DENOM="${DENOM:=uosmo}" - - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - - - set -eux - - - ls $CHAIN_DIR/config - - - echo "Update genesis.json file with updated local params" - - 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 - - - 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 - - - # 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 - } - - - # 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 - } - - - if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" - != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - fi - - - if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == - "null" ]; then - gov_overrides_sdk_v46 - else - gov_overrides_sdk_v47 - fi - - - $CHAIN_BIN tendermint show-node-id diff --git a/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/config-configmap.yaml deleted file mode 100644 index 7cead6633..000000000 --- a/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/config-configmap.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: registry-config - labels: - starship.io/name: xpla - app.kubernetes.io/version: 4.0.0-alpha.0 - app.kubernetes.io/managed-by: starship - app.kubernetes.io/component: registry - app.kubernetes.io/part-of: starship - app.kubernetes.io/name: registry-config -data: - xpla-1-1.json: >- - {"chain_name":"xpla","assets":[{"base":"axpla","description":"The XPLA token - is the native governance token for the XPLA - chain.","denom_units":[{"denom":"axpla","exponent":0}],"name":"XPLA","display":"XPLA","symbol":"XPLA","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.svg"},"coingecko_id":"xpla"}]} diff --git a/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/deployment.yaml index 20a9760c3..8a1bb8406 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/deployment.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/deployment.yaml @@ -13,26 +13,61 @@ spec: replicas: 1 selector: matchLabels: - app: registry + app.kubernetes.io/name: registry template: metadata: labels: - app: registry starship.io/name: xpla app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://xpla-1-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: xpla_1-1. Waiting for it to start..." + echo "Checking: http://xpla-1-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M containers: - name: registry image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d - ports: - - name: http - containerPort: 8080 - - name: grpc - containerPort: 9090 env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: xpla_1-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: xpla - name: REGISTRY_CHAIN_CLIENT_RPCS - value: http://localhost:26657 + value: http://xpla-1-1-genesis.$(NAMESPACE).svc.cluster.local:26657 - name: REGISTRY_CHAIN_API_RPCS value: http://localhost:26657 - name: REGISTRY_CHAIN_API_GRPCS @@ -41,8 +76,10 @@ spec: value: http://localhost:1317 - name: REGISTRY_CHAIN_CLIENT_EXPOSERS value: http://xpla-1-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains volumeMounts: - - name: chain-xpla-1-1 + - name: registry-xpla-1-1 mountPath: /chains/xpla_1-1 resources: limits: @@ -52,18 +89,16 @@ spec: cpu: '0.1' memory: 100M readinessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: - httpGet: - path: /health - port: '8080' + tcpSocket: + port: 8080 initialDelaySeconds: 15 periodSeconds: 20 volumes: - - name: chain-xpla-1-1 + - name: registry-xpla-1-1 configMap: - name: chain-xpla-1-1 + name: registry-xpla-1-1 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/service.yaml index 910fdc273..c6be6613e 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/service.yaml @@ -10,12 +10,13 @@ metadata: app.kubernetes.io/part-of: starship app.kubernetes.io/name: registry spec: + clusterIP: None selector: - app: registry + app.kubernetes.io/name: registry ports: - name: http port: 8080 - targetPort: '8080' + targetPort: 8080 - name: grpc port: 9090 - targetPort: '9090' + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/xpla-1-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/xpla-1-1-configmap.yaml new file mode 100644 index 000000000..d2d9cc7f7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/config-tests/xpla/registry/xpla-1-1-configmap.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-xpla-1-1 + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-xpla-1-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "xpla", + "status": "live", + "network_type": "devnet", + "chain_id": "xpla_1-1", + "pretty_name": "XPLA Chain Devnet", + "bech32_prefix": "xpla", + "daemon_name": "xplad", + "node_home": "/root/.xpla", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "axpla", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "axpla" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/xpladev/xpla", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "xpla", + "assets": [ + { + "base": "axpla", + "description": "The XPLA token is the native governance token for the XPLA chain.", + "denom_units": [ + { + "denom": "axpla", + "exponent": 0 + } + ], + "name": "XPLA", + "display": "XPLA", + "symbol": "XPLA", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.svg" + }, + "coingecko_id": "xpla" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/genesis-service.yaml index 305a1cfa0..47358ad29 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/genesis-service.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/genesis-service.yaml @@ -7,7 +7,7 @@ metadata: app.kubernetes.io/version: 4.0.0-alpha.0 app.kubernetes.io/managed-by: starship app.kubernetes.io/component: chain - app.kubernetes.io/name: xpla-1-1-genesis + app.kubernetes.io/name: xpla_1-1-genesis app.kubernetes.io/type: xpla_1-1-service app.kubernetes.io/role: genesis starship.io/chain-name: xpla @@ -15,45 +15,41 @@ metadata: spec: clusterIP: None ports: - - name: p2p - port: 26656 - protocol: TCP - targetPort: '26656' - name: address port: 26658 protocol: TCP - targetPort: '26658' + targetPort: 26658 - name: grpc port: 9090 protocol: TCP - targetPort: '9090' + targetPort: 9090 - name: grpc-web port: 9091 protocol: TCP - targetPort: '9091' + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 - name: rest port: 1317 protocol: TCP - targetPort: '1317' + targetPort: 1317 - name: rpc port: 26657 protocol: TCP - targetPort: '26657' - - name: metrics - port: 26660 - protocol: TCP - targetPort: '26660' + targetPort: 26657 - name: exposer port: 8081 protocol: TCP - targetPort: '8081' + targetPort: 8081 - name: faucet port: 8000 protocol: TCP - targetPort: '8000' + targetPort: 8000 - name: metrics port: 26660 protocol: TCP - targetPort: '26660' + targetPort: 26660 selector: - app.kubernetes.io/name: xpla-1-1-genesis + app.kubernetes.io/name: xpla_1-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/genesis-statefulset.yaml index a9dd04114..84ef49ed4 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/genesis-statefulset.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/genesis-statefulset.yaml @@ -9,7 +9,7 @@ metadata: app.kubernetes.io/component: chain app.kubernetes.io/part-of: xpla_1-1 app.kubernetes.io/id: xpla_1-1 - app.kubernetes.io/name: xpla-1-1-genesis + app.kubernetes.io/name: xpla_1-1-genesis app.kubernetes.io/type: xpla_1-1-statefulset app.kubernetes.io/role: genesis starship.io/chain-name: xpla @@ -57,6 +57,22 @@ spec: value: xplad - name: CHAIN_ID value: xpla_1-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: FAUCET_ENABLED @@ -68,52 +84,32 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - if [ -f $CHAIN_DIR/config/genesis.json ]; then echo "Genesis file exists, exiting init container" exit 0 fi - echo "Running setup genesis script..." - bash -e /scripts/create-genesis.sh - bash -e /scripts/update-genesis.sh - echo "Create node id json file" - NODE_ID=$($CHAIN_BIN tendermint show-node-id) - echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - echo "Create consensus key json file" - - $CHAIN_BIN tendermint show-validator > - $CHAIN_DIR/config/consensus_key.json - + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json cat $CHAIN_DIR/config/consensus_key.json - echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related - subcommands" && echo "genesis" || echo "") - - - echo "Adding balance to - xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account - xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g - 100000000000000000000000axpla --keyring-backend="test" + echo "Adding balance to xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g 100000000000000000000000axpla --keyring-backend="test" resources: limits: cpu: '0.5' @@ -148,6 +144,22 @@ spec: value: xplad - name: CHAIN_ID value: xpla_1-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms - name: KEYS_CONFIG value: /configs/keys.json - name: METRICS @@ -155,19 +167,13 @@ spec: command: - bash - '-c' - - >- + - |- VAL_INDEX=${HOSTNAME##*-} - echo "Validator Index: $VAL_INDEX" - echo "Running setup config script..." - - jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json - /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv - $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json - + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json bash -e /scripts/update-config.sh resources: @@ -264,7 +270,7 @@ spec: periodSeconds: 10 timeoutSeconds: 15 - name: exposer - image: ghcr.io/cosmology-tech/starship/exposer:latest + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d imagePullPolicy: IfNotPresent env: - name: GENESIS_HOST @@ -295,11 +301,11 @@ spec: - exposer resources: limits: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M requests: - cpu: '0.1' - memory: 128M + cpu: '0.2' + memory: 200M volumeMounts: - mountPath: /root/.xpla name: node @@ -322,13 +328,10 @@ spec: command: - bash - '-c' - - >- + - |- CREDIT_COINS="" - FEES="" - for coin in ${COINS//,/ } - do amt="${coin//[!0-9]/}" denom="${coin//[0-9]/}" @@ -351,20 +354,14 @@ spec: fi done - - export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" - /configs/keys.json) - + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) export | grep "FAUCET" - - until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; - do + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do sleep 10 done - /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" resources: limits: @@ -383,7 +380,7 @@ spec: readinessProbe: httpGet: path: /status - port: '8000' + port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: diff --git a/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/setup-scripts-configmap.yaml index 6e7eb5f28..047afc57d 100644 --- a/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/setup-scripts-configmap.yaml +++ b/packages/packages/generator/__tests__/__output__/config-tests/xpla/xpla/setup-scripts-configmap.yaml @@ -13,90 +13,48 @@ metadata: starship.io/chain-name: xpla starship.io/chain-id: xpla_1-1 data: - create-genesis.sh: > + create-genesis.sh: | #!/bin/bash - set -eux - DENOM="${DENOM:=uosmo}" - COINS="${COINS:=100000000000000000uosmo}" - CHAIN_ID="${CHAIN_ID:=osmosis}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - 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 - - CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" - && echo "genesis" || echo "") - + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") CHAIN_INIT_ID="$CHAIN_ID" - if [ "$CHAIN_BIN" == "osmosisd" ]; then CHAIN_INIT_ID="test-1" fi - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID - --chain-id $CHAIN_INIT_ID --recover - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - # Add genesis keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) - - jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add faucet key to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) - - jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r - ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" - - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a - $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS - --keyring-backend="test" - + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" # Add test keys to the keyring and self delegate initial coins - 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" - + 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 relayers keys and delegate tokens for i in $(seq 0 $NUM_RELAYERS); @@ -114,12 +72,8 @@ data: done fi - - ## if faucet not enabled then add validator and relayer with index as keys - and into gentx - + ## 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 ## Add validators key and delegate tokens for i in $(seq 0 $NUM_VALIDATORS); @@ -131,178 +85,88 @@ data: done fi - echo "Creating gentx..." - COIN=$(echo $COINS | cut -d ',' -f1) - AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") - - $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) - $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID echo "Output of gentx" - cat $CHAIN_DIR/config/gentx/*.json | jq - echo "Running collect-gentxs" - $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - ls $CHAIN_DIR/config - updateGenesis.sh: > + updateGenesis.sh: | #!/bin/bash - DENOM="${DENOM:=axpla}" - CHAIN_BIN="${CHAIN_BIN:=xplad}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.xpla}" - set -eux - ls $CHAIN_DIR/config - echo "Update genesis.json file with updated local params" - 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 - + 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 echo "Update gov params" - - 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 echo "Update evm params" - - jq -r '.app_state.evm.params.evm_denom |= "'$DENOM'"' - $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json - $CHAIN_DIR/config/genesis.json - + jq -r '.app_state.evm.params.evm_denom |= "'$DENOM'"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json $CHAIN_BIN tendermint show-node-id - update-config.sh: > + update-config.sh: | #!/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#"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 - + 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 - + 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#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 @@ -310,27 +174,14 @@ data: 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 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 + 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 @@ -339,60 +190,31 @@ data: 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 - create-validator.sh: > + 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 + create-validator.sh: | #!/bin/bash - DENOM="${DENOM:=uosmo}" - CHAIN_BIN="${CHAIN_BIN:=osmosisd}" - CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" - KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" - VAL_NAME="${VAL_NAME:=osmosis}" - NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" - NODE_ARGS="${NODE_ARGS}" - GAS="${GAS:=auto}" - set -eux - # Wait for the node to be synced - max_tries=10 - - while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq - ".SyncInfo.catching_up") == true ]] - + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] do if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" @@ -400,9 +222,7 @@ data: sleep 30 done - # Function to compare version numbers - version_compare() { version1="$1" version2="$2" @@ -413,15 +233,12 @@ data: fi } - # Check if cosmos_sdk_version is greater than a specified version - is_greater() { version_compare "$1" "$2" return $? } - function cosmos-sdk-version-v50() { # Content for the validator.json file json_content='{ @@ -451,7 +268,6 @@ data: cat /validator.log | jq } - function cosmos-sdk-version-default() { # Run create validator tx command echo "Running txn for create-validator" @@ -481,19 +297,12 @@ data: cat /validator.log | jq } - set +e - # Fetch the cosmos-sdk version to be able to perform the create-validator tx - - cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n - 's/cosmos_sdk_version: \(.*\)/\1/p') - + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') echo "cosmos_sdk_version: $cosmos_sdk_version" - set -e - if is_greater "$cosmos_sdk_version" "v0.50.0"; then echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" cosmos-sdk-version-v50 @@ -538,23 +347,17 @@ data: ((max_tries--)) sleep 2 done - build-chain.sh: > + build-chain.sh: | #!/bin/bash - set -euxo pipefail - mkdir -p /tmp/chains $UPGRADE_DIR - echo "Fetching code from tag" - mkdir -p /tmp/chains/$CHAIN_NAME - cd /tmp/chains/$CHAIN_NAME - if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then echo "Trying to fetch code from commit hash" curl -LO $CODE_REPO/archive/$CODE_TAG.zip @@ -579,14 +382,9 @@ data: fi fi - echo "Fetch wasmvm if needed" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | - cut -d ' ' -f 2) - + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) if [[ WASM_VERSION != "" ]]; then mkdir -p /tmp/chains/libwasmvm_muslc cd /tmp/chains/libwasmvm_muslc @@ -594,17 +392,11 @@ data: cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a fi - echo "Build chain binary" - cd /tmp/chains/$CHAIN_NAME/$code_dir - - CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true - LEDGER_ENABLED=false make install - + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install echo "Copy created binary to the upgrade directories" - if [[ $UPGRADE_NAME == "genesis" ]]; then mkdir -p $UPGRADE_DIR/genesis/bin cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin @@ -613,53 +405,35 @@ data: cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin fi - echo "Cleanup" - rm -rf /tmp/chains/$CHAIN_NAME - chain-rpc-ready.sh: > + chain-rpc-ready.sh: | #!/bin/bash - - # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is - ready - + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready # Usage: chain-rpc-ready.sh [RPC_URL] - set -euo pipefail - RPC_URL=${1:-"http://localhost:26657"} - echo 1>&2 "Checking if $RPC_URL is ready..." - # Check if the RPC URL is reachable, - json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - # and the bootstrap block state has been validated, - - if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < - .latest_block_height)')" != true ]; then + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" exit 1 fi - # and the node is not catching up. - - if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; - then + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then echo 1>&2 "$RPC_URL is not ready: node is catching up" exit 1 fi - echo "$json" | jq -r .result - exit 0 ibc-connection.sh: | #!/bin/bash diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/genesis-service.yaml new file mode 100644 index 000000000..f79e42a95 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: agoric-3-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: agoric-3-genesis + app.kubernetes.io/type: agoric-3-service + app.kubernetes.io/role: genesis + starship.io/chain-name: agoric + starship.io/chain-id: agoric-3 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: agoric-3-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/genesis-statefulset.yaml new file mode 100644 index 000000000..a4ad8fd46 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: agoric-3-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: agoric-3 + app.kubernetes.io/id: agoric-3 + app.kubernetes.io/name: agoric-3-genesis + app.kubernetes.io/type: agoric-3-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: agoric +spec: + serviceName: agoric-3-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: agoric-3-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: agoric-3 + app.kubernetes.io/name: agoric-3-genesis + app.kubernetes.io/rawname: agoric-3 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/agoric/agoric-3-proposals:main + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ubld + - name: COINS + value: 100000000000000ubld,100000000000000uist + - name: CHAIN_BIN + value: agd + - name: CHAIN_DIR + value: /root/.agoric + - name: CODE_REPO + value: https://github.com/Agoric/agoric-sdk + - name: DAEMON_HOME + value: /root/.agoric + - name: DAEMON_NAME + value: agd + - name: CHAIN_ID + value: agoric-3 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: 1 + memory: 2Gi + requests: + cpu: 1 + memory: 2Gi + volumeMounts: + - mountPath: /root/.agoric + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/agoric/agoric-3-proposals:main + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ubld + - name: COINS + value: 100000000000000ubld,100000000000000uist + - name: CHAIN_BIN + value: agd + - name: CHAIN_DIR + value: /root/.agoric + - name: CODE_REPO + value: https://github.com/Agoric/agoric-sdk + - name: DAEMON_HOME + value: /root/.agoric + - name: DAEMON_NAME + value: agd + - name: CHAIN_ID + value: agoric-3 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: 1 + memory: 2Gi + requests: + cpu: 1 + memory: 2Gi + volumeMounts: + - mountPath: /root/.agoric + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: 1 + memory: 2Gi + requests: + cpu: 1 + memory: 2Gi + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/agoric/agoric-3-proposals:main + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ubld + - name: COINS + value: 100000000000000ubld,100000000000000uist + - name: CHAIN_BIN + value: agd + - name: CHAIN_DIR + value: /root/.agoric + - name: CODE_REPO + value: https://github.com/Agoric/agoric-sdk + - name: DAEMON_HOME + value: /root/.agoric + - name: DAEMON_NAME + value: agd + - name: CHAIN_ID + value: agoric-3 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: 1 + memory: 2Gi + requests: + cpu: 1 + memory: 2Gi + volumeMounts: + - mountPath: /root/.agoric + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: agoric-3-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.agoric/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.agoric/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.agoric/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.agoric/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.agoric/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.agoric + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/agoric/agoric-3-proposals:main + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: agd + - name: FAUCET_CHAIN_ID + value: agoric-3 + - name: COINS + value: 100000000000000ubld,100000000000000uist + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-agoric-3 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/setup-scripts-configmap.yaml new file mode 100644 index 000000000..dba632313 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/agoric/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-agoric-3 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-agoric-3 + app.kubernetes.io/part-of: agoric-3 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: agoric + starship.io/chain-id: agoric-3 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..6ae432684 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/agoric-3-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/agoric-3-configmap.yaml new file mode 100644 index 000000000..edab6f30c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/agoric-3-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-agoric-3 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-agoric-3 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "agoric", + "status": "live", + "network_type": "devnet", + "chain_id": "agoric-3", + "pretty_name": "Agoric Devnet", + "bech32_prefix": "agoric", + "daemon_name": "agd", + "node_home": "/root/.agoric", + "key_algos": [ + "secp256k1" + ], + "slip44": "564", + "fees": { + "fee_tokens": [ + { + "denom": "ubld", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ubld" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/Agoric/agoric-sdk", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "agoric", + "assets": [ + { + "base": "ubld", + "description": "The native token of Agoric", + "name": "Agoric", + "display": "bld", + "symbol": "BLD", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.svg" + }, + "denom_units": [ + { + "denom": "ubld", + "exponent": 0 + }, + { + "denom": "bld", + "exponent": 6 + } + ], + "coingecko_id": "agoric", + "keywords": [ + "agoric" + ] + }, + { + "base": "uist", + "description": "IST is the stable token used by the Agoric chain for execution fees and commerce.", + "name": "Inter Stable Token", + "display": "ist", + "symbol": "IST", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.svg" + }, + "denom_units": [ + { + "denom": "uist", + "exponent": 0 + }, + { + "denom": "ist", + "exponent": 6 + } + ], + "coingecko_id": "inter-stable-token", + "keywords": [ + "inter-stable-token" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/deployment.yaml new file mode 100644 index 000000000..286ad7216 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: agoric-3. Waiting for it to start..." + echo "Checking: http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: agoric-3,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: agoric,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-agoric-3 + mountPath: /chains/agoric-3 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-agoric-3 + configMap: + name: registry-agoric-3 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-configmap.yaml new file mode 100644 index 000000000..f144032a1 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-agoric-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-agoric-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "agoric-3" + type = "CosmosSdk" + key_name = "agoric-3" + + rpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "agoric" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "ubld" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "agoric-3" + type = "CosmosSdk" + key_name = "agoric-3-cli" + + rpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "agoric" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "ubld" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-service.yaml new file mode 100644 index 000000000..3e78eb430 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-agoric-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-agoric-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-agoric-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-statefulset.yaml new file mode 100644 index 000000000..99b35f046 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/agoric/relayer/hermes-agoric-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-agoric-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-agoric-cosmos +spec: + serviceName: hermes-agoric-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-agoric-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-agoric-cosmos + app.kubernetes.io/rawname: agoric-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: agoric-3. Waiting for it to start..." + echo "Checking: http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for agoric-3..." + hermes keys add \ + --chain agoric-3 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name agoric-3 \ + --hd-path "m/44'/564'/0'/0/0" + DENOM="ubld" + RLY_ADDR=$(hermes --json keys list --chain agoric-3 | tail -1 | jq -r '.result."agoric-3".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for agoric-3-cli..." + hermes keys add \ + --chain agoric-3 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name agoric-3-cli \ + --hd-path "m/44'/564'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain agoric-3 | tail -1 | jq -r '.result."agoric-3-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain agoric-3 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-agoric-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..cf70bfa6f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/validator-service.yaml new file mode 100644 index 000000000..59bc68aea --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: cosmoshub-4-service + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/validator-statefulset.yaml new file mode 100644 index 000000000..234796f35 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/cosmoshub/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/genesis-service.yaml new file mode 100644 index 000000000..b43454c5d --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: core-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: core-1-genesis + app.kubernetes.io/type: core-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: persistencecore + starship.io/chain-id: core-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: core-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/genesis-statefulset.yaml new file mode 100644 index 000000000..bb539dcb1 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/genesis-statefulset.yaml @@ -0,0 +1,446 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: core-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: core-1 + app.kubernetes.io/id: core-1 + app.kubernetes.io/name: core-1-genesis + app.kubernetes.io/type: core-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: persistencecore +spec: + serviceName: core-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: core-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: core-1 + app.kubernetes.io/name: core-1-genesis + app.kubernetes.io/rawname: core-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-build-images + image: ghcr.io/cosmology-tech/starship/builder:latest + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - |- + # Install cosmovisor + go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 + + # Build genesis + UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh + env: + - name: CODE_REF + value: https://github.com/persistenceOne/persistenceCore + - name: UPGRADE_DIR + value: /root/.persistenceCore/cosmovisor + - name: GOBIN + value: /go/bin + - name: CHAIN_NAME + value: core-1 + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/runner:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + - name: CHAIN_ID + value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/runner:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + - name: CHAIN_ID + value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/runner:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + - name: CHAIN_ID + value: core-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + - name: DAEMON_NAME + value: persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + /usr/bin/cosmovisor start $START_ARGS + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: core-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.persistenceCore/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.persistenceCore/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.persistenceCore/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.persistenceCore/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.persistenceCore/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/runner:latest + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: persistenceCore + - name: FAUCET_CHAIN_ID + value: core-1 + - name: COINS + value: 100000000000000uxprt + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-core-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/setup-scripts-configmap.yaml new file mode 100644 index 000000000..87da8e13b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-core-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-core-1 + app.kubernetes.io/part-of: core-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: persistencecore + starship.io/chain-id: core-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/validator-service.yaml new file mode 100644 index 000000000..467325f97 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: core-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: core-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: core-1-service + starship.io/chain-name: persistencecore + starship.io/chain-id: core-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: core-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/validator-statefulset.yaml new file mode 100644 index 000000000..51da8a8e9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/persistencecore/validator-statefulset.yaml @@ -0,0 +1,458 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: core-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: core-1 + app.kubernetes.io/id: core-1 + app.kubernetes.io/name: core-1-validator + app.kubernetes.io/type: core-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: persistencecore +spec: + serviceName: core-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: core-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: core-1 + app.kubernetes.io/name: core-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: init-build-images + image: ghcr.io/cosmology-tech/starship/builder:latest + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - |- + # Install cosmovisor + go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0 + + # Build genesis + UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh + env: + - name: CODE_REF + value: https://github.com/persistenceOne/persistenceCore + - name: UPGRADE_DIR + value: /root/.persistenceCore/cosmovisor + - name: GOBIN + value: /go/bin + - name: CHAIN_NAME + value: core-1 + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/runner:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + - name: CHAIN_ID + value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: core-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/runner:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + - name: CHAIN_ID + value: core-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: core-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/runner:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + - name: CHAIN_ID + value: core-1 + - name: GENESIS_HOST + value: core-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin + /usr/bin/cosmovisor start $START_ARGS + resources: + limits: + cpu: '2' + memory: 2Gi + requests: + cpu: '2' + memory: 2Gi + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uxprt + - name: COINS + value: 100000000000000uxprt + - name: CHAIN_BIN + value: persistenceCore + - name: CHAIN_DIR + value: /root/.persistenceCore + - name: CODE_REPO + value: https://github.com/persistenceOne/persistenceCore + - name: DAEMON_HOME + value: /root/.persistenceCore + - name: DAEMON_NAME + value: persistenceCore + - name: CHAIN_ID + value: core-1 + - name: GENESIS_HOST + value: core-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.persistenceCore/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.persistenceCore/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.persistenceCore/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.persistenceCore/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.persistenceCore + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-core-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/core-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/core-1-configmap.yaml new file mode 100644 index 000000000..0faedaaf5 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/core-1-configmap.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-core-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-core-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "persistencecore", + "status": "live", + "network_type": "devnet", + "chain_id": "core-1", + "pretty_name": "Persistence Devnet", + "bech32_prefix": "persistence", + "daemon_name": "persistenceCore", + "node_home": "/root/.persistenceCore", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uxprt", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uxprt" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/persistenceOne/persistenceCore", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "persistencecore", + "assets": [ + { + "description": "The denom for token uxprt", + "base": "uxprt", + "name": "uxprt", + "display": "uxprt", + "symbol": "UXPRT", + "denom_units": [ + { + "denom": "uxprt", + "exponent": 0 + }, + { + "denom": "uxprt", + "exponent": 6 + } + ], + "coingecko_id": "persistencecore" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/deployment.yaml new file mode 100644 index 000000000..d5bfabdbd --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: cosmoshub-4,core-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: cosmoshub,persistencecore + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26657,http://localhost:26658 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1317,http://localhost:1318 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + - name: registry-core-1 + mountPath: /chains/core-1 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 + - name: registry-core-1 + configMap: + name: registry-core-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-configmap.yaml new file mode 100644 index 000000000..9fda72efb --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-persistence-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-persistence-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "core-1" + type = "CosmosSdk" + key_name = "core-1" + + rpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://core-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "persistence" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uxprt" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "core-1" + type = "CosmosSdk" + key_name = "core-1-cli" + + rpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://core-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "persistence" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uxprt" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-service.yaml new file mode 100644 index 000000000..2f77772e0 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-persistence-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-persistence-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-persistence-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-statefulset.yaml new file mode 100644 index 000000000..71ba41f52 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/build-chain/relayer/hermes-persistence-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-persistence-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-persistence-cosmos +spec: + serviceName: hermes-persistence-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-persistence-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-persistence-cosmos + app.kubernetes.io/rawname: persistence-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for core-1..." + hermes keys add \ + --chain core-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name core-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uxprt" + RLY_ADDR=$(hermes --json keys list --chain core-1 | tail -1 | jq -r '.result."core-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://core-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for core-1-cli..." + hermes keys add \ + --chain core-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name core-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain core-1 | tail -1 | jq -r '.result."core-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://core-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain core-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-persistence-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/config-configmap.yaml new file mode 100644 index 000000000..a96c2e443 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/config-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: config-ethereum + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: ethereum-1337 + app.kubernetes.io/part-of: '1337' + app.kubernetes.io/role: config + starship.io/chain-name: ethereum + starship.io/chain-id: '1337' +data: + genesis.json: |- + { + "config": { + "chainId": 1337, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "londonBlock": 0, + "berlinBlock": 0, + "terminalTotalDifficulty": 0, + "terminalTotalDifficultyPassed": true + }, + "nonce": "0x0", + "timestamp": "0x677d172f", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x47b760", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0x0000000000000000000000000000000000000001": { + "balance": "0x3635c9adc5dea00000" + }, + "0x0000000000000000000000000000000000000002": { + "balance": "0x3635c9adc5dea00000" + }, + "0x4242424242424242424242424242424242424242": { + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100b6578063621fd130146101e3578063c5f2892f14610273575b600080fd5b34801561005057600080fd5b5061009c6004803603602081101561006757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061029e565b604051808215151515815260200191505060405180910390f35b6101e1600480360360808110156100cc57600080fd5b81019080803590602001906401000000008111156100e957600080fd5b8201836020820111156100fb57600080fd5b8035906020019184600183028401116401000000008311171561011d57600080fd5b90919293919293908035906020019064010000000081111561013e57600080fd5b82018360208201111561015057600080fd5b8035906020019184600183028401116401000000008311171561017257600080fd5b90919293919293908035906020019064010000000081111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460018302840111640100000000831117156101c757600080fd5b909192939192939080359060200190929190505050610370565b005b3480156101ef57600080fd5b506101f8610fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023857808201518184015260208101905061021d565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027f57600080fd5b50610288610fe2565b6040518082815260200191505060405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036957507f85640907000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b603087879050146103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806116ec6026913960400191505060405180910390fd5b60208585905014610428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806116836036913960400191505060405180910390fd5b60608383905014610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061175f6029913960400191505060405180910390fd5b670de0b6b3a76400003410156104e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117396026913960400191505060405180910390fd5b6000633b9aca0034816104f457fe5b061461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806116b96033913960400191505060405180910390fd5b6000633b9aca00348161055a57fe5b04905067ffffffffffffffff80168111156105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806117126027913960400191505060405180910390fd5b60606105cb82611314565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a610600602054611314565b60405180806020018060200180602001806020018060200186810386528e8e82818152602001925080828437600081840152601f19601f82011690508083019250505086810385528c8c82818152602001925080828437600081840152601f19601f82011690508083019250505086810384528a818151815260200191508051906020019080838360005b838110156106a657808201518184015260208101905061068b565b50505050905090810190601f1680156106d35780820380516001836020036101000a031916815260200191505b508681038352898982818152602001925080828437600081840152601f19601f820116905080830192505050868103825287818151815260200191508051906020019080838360005b8381101561073757808201518184015260208101905061071c565b50505050905090810190601f1680156107645780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b6040516020018084848082843780830192505050826fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260100193505050506040516020818303038152906040526040518082805190602001908083835b6020831061080e57805182526020820191506020810190506020830392506107eb565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610850573d6000803e3d6000fd5b5050506040513d602081101561086557600080fd5b8101908080519060200190929190505050905060006002808888600090604092610891939291906115da565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108eb57805182526020820191506020810190506020830392506108c8565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561092d573d6000803e3d6000fd5b5050506040513d602081101561094257600080fd5b8101908080519060200190929190505050600289896040908092610968939291906115da565b6000801b604051602001808484808284378083019250505082815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106109cd57805182526020820191506020810190506020830392506109aa565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610a0f573d6000803e3d6000fd5b5050506040513d6020811015610a2457600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610a8e5780518252602082019150602081019050602083039250610a6b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ad0573d6000803e3d6000fd5b5050506040513d6020811015610ae557600080fd5b810190808051906020019092919050505090506000600280848c8c604051602001808481526020018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610b615780518252602082019150602081019050602083039250610b3e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ba3573d6000803e3d6000fd5b5050506040513d6020811015610bb857600080fd5b8101908080519060200190929190505050600286600060401b866040516020018084805190602001908083835b60208310610c085780518252602082019150602081019050602083039250610be5565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610c935780518252602082019150602081019050602083039250610c70565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610cd5573d6000803e3d6000fd5b5050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610d545780518252602082019150602081019050602083039250610d31565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610d96573d6000803e3d6000fd5b5050506040513d6020811015610dab57600080fd5b81019080805190602001909291905050509050858114610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605481526020018061162f6054913960600191505060405180910390fd5b6001602060020a0360205410610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061160e6021913960400191505060405180910390fd5b60016020600082825401925050819055506000602054905060008090505b6020811015610fb75760018083161415610ec8578260008260208110610eb757fe5b018190555050505050505050610fc7565b600260008260208110610ed757fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610f335780518252602082019150602081019050602083039250610f10565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610f75573d6000803e3d6000fd5b5050506040513d6020811015610f8a57600080fd5b8101908080519060200190929190505050925060028281610fa757fe5b0491508080600101915050610e95565b506000610fc057fe5b5050505050505b50505050505050565b6060610fdd602054611314565b905090565b6000806000602054905060008090505b60208110156111d057600180831614156110e05760026000826020811061101557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310611071578051825260208201915060208101905060208303925061104e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156110b3573d6000803e3d6000fd5b5050506040513d60208110156110c857600080fd5b810190808051906020019092919050505092506111b6565b600283602183602081106110f057fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061114b5780518252602082019150602081019050602083039250611128565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561118d573d6000803e3d6000fd5b5050506040513d60208110156111a257600080fd5b810190808051906020019092919050505092505b600282816111c057fe5b0491508080600101915050610ff2565b506002826111df602054611314565b600060401b6040516020018084815260200183805190602001908083835b6020831061122057805182526020820191506020810190506020830392506111fd565b6001836020036101000a0380198251168184511680821785525050505050509050018267ffffffffffffffff191667ffffffffffffffff1916815260180193505050506040516020818303038152906040526040518082805190602001908083835b602083106112a55780518252602082019150602081019050602083039250611282565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156112e7573d6000803e3d6000fd5b5050506040513d60208110156112fc57600080fd5b81019080805190602001909291905050509250505090565b6060600867ffffffffffffffff8111801561132e57600080fd5b506040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b50905060008260c01b90508060076008811061137957fe5b1a60f81b8260008151811061138a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806006600881106113c657fe5b1a60f81b826001815181106113d757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060056008811061141357fe5b1a60f81b8260028151811061142457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060046008811061146057fe5b1a60f81b8260038151811061147157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806003600881106114ad57fe5b1a60f81b826004815181106114be57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806002600881106114fa57fe5b1a60f81b8260058151811061150b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060016008811061154757fe5b1a60f81b8260068151811061155857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060006008811061159457fe5b1a60f81b8260078151811061159857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b600080858511156115ea57600080fd5b838611156115f757600080fd5b600185028301915084860390509450949250505056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220230afd4b6e3551329e50f1239e08fa3ab7907b77403c4f237d9adf679e8e43cf64736f6c634300060b0033", + "balance": "0x0" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": "0x7", + "excessBlobGas": null, + "blobGasUsed": null + } + jwt.hex: 3fe89f53368415a79e065f3c885b7273b41540d5598488ef475cfdc4009850a4 + config.yaml: |- + CONFIG_NAME: interop + PRESET_BASE: interop + + # Genesis + GENESIS_FORK_VERSION: 0x20000089 + + # Altair + ALTAIR_FORK_EPOCH: 0 + ALTAIR_FORK_VERSION: 0x20000090 + + # Merge + BELLATRIX_FORK_EPOCH: 0 + BELLATRIX_FORK_VERSION: 0x20000091 + TERMINAL_TOTAL_DIFFICULTY: 0 + + # Capella + CAPELLA_FORK_EPOCH: 0 + CAPELLA_FORK_VERSION: 0x20000092 + MAX_WITHDRAWALS_PER_PAYLOAD: 16 + + # Deneb + DENEB_FORK_VERSION: 0x20000093 + + # Electra + ELECTRA_FORK_VERSION: 0x20000094 + + # Time parameters + SECONDS_PER_SLOT: 12 + SLOTS_PER_EPOCH: 6 + + # Deposit contract + DEPOSIT_CONTRACT_ADDRESS: 0x4242424242424242424242424242424242424242 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/ethereum-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/ethereum-statefulset.yaml new file mode 100644 index 000000000..96886cdea --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/ethereum-statefulset.yaml @@ -0,0 +1,269 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: ethereum-1337 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app: ethereum-1337 + app.kubernetes.io/component: chain + app.kubernetes.io/name: ethereum-1337 + app.kubernetes.io/part-of: '1337' + app.kubernetes.io/role: ethereum + starship.io/chain-name: ethereum + starship.io/chain-id: '1337' +spec: + serviceName: ethereum-1337 + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/instance: ethereum-1337 + app.kubernetes.io/name: ethereum-1337 + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: ethereum-1337 + app.kubernetes.io/type: ethereum-1337 + app.kubernetes.io/name: ethereum-1337 + app.kubernetes.io/rawname: '1337' + spec: + initContainers: + - name: init-genesis-beacon + image: ghcr.io/hyperweb-io/starship/prysm/cmd/prysmctl:v5.2.0 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + mkdir -p /ethereum/consensus /ethereum/execution + cp /config/genesis.json /ethereum/execution/genesis.json + cp /config/config.yaml /ethereum/consensus/config.yaml + + echo "Initializing genesis" + prysmctl testnet generate-genesis \ + --fork=capella \ + --num-validators=1 \ + --genesis-time-delay=15 \ + --output-ssz=/ethereum/consensus/genesis.ssz \ + --chain-config-file=/ethereum/consensus/config.yaml \ + --geth-genesis-json-in=/ethereum/execution/genesis.json \ + --geth-genesis-json-out=/ethereum/execution/genesis.json + + echo "Copy secrets over" + cp /config/jwt.hex /etc/secrets/jwt.hex + resources: + requests: + cpu: 200m + memory: 200Mi + limits: + cpu: 200m + memory: 200Mi + volumeMounts: + - name: secrets + mountPath: /etc/secrets + - name: config + mountPath: /config + - name: ethereum + mountPath: /ethereum + - name: init-genesis-execution + image: ghcr.io/hyperweb-io/starship/ethereum/client-go:v1.14.12 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + echo "Initializing genesis geth" + geth --datadir /ethereum/execution init /ethereum/execution/genesis.json + resources: + requests: + cpu: 200m + memory: 200Mi + limits: + cpu: 200m + memory: 200Mi + volumeMounts: + - name: secrets + mountPath: /etc/secrets + - name: config + mountPath: /config + - name: ethereum + mountPath: /ethereum + containers: + - name: geth + image: ghcr.io/hyperweb-io/starship/ethereum/client-go:v1.14.12 + imagePullPolicy: IfNotPresent + env: + - name: HTTP_PORT + value: '8545' + - name: WS_PORT + value: '8546' + - name: RPC_PORT + value: '8551' + command: + - bash + - '-c' + args: + - |- + echo "Setting UDP buffer size" + sysctl -w net.core.rmem_max=16777216 + sysctl -w net.core.wmem_max=16777216 + + echo "Starting execution chain" + geth --datadir /ethereum/execution --http \ + --http.addr=0.0.0.0 \ + --http.port=$HTTP_PORT \ + --http.api=eth,net,web3,debug \ + --ws --ws.addr=0.0.0.0 \ + --ws.port=$WS_PORT \ + --authrpc.addr=0.0.0.0 \ + --authrpc.port=$RPC_PORT \ + --nodiscover \ + --http.corsdomain=* \ + --ws.api=eth,net,web3 \ + --ws.origins=* \ + --http.vhosts=* \ + --authrpc.vhosts=* \ + --authrpc.jwtsecret=/etc/secrets/jwt.hex \ + --unlock=0x123463a4B065722E99115D6c222f267d9cABb524 \ + --password=/dev/null \ + --syncmode=snap \ + --snapshot=false \ + --networkid=1337 \ + --verbosity=4 \ + --maxpeers=50 \ + --nat=none \ + --log.vmodule=engine=6 + resources: + requests: + cpu: 200m + memory: 200Mi + limits: + cpu: 200m + memory: 200Mi + volumeMounts: + - name: ethereum + mountPath: /ethereum + - name: secrets + mountPath: /etc/secrets + readinessProbe: + exec: + command: + - /bin/bash + - '-c' + - 'curl -s --data ''{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'' -H "Content-Type: application/json" -X POST http://localhost:8545 | grep -q ''"result":false''' + initialDelaySeconds: 15 + periodSeconds: 10 + - name: beacon-chain + image: ghcr.io/hyperweb-io/starship/prysm/beacon-chain:v5.2.0 + imagePullPolicy: Always + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + echo "Waiting 30 seconds for execution client to be ready..." + sleep 30 + + echo "Starting consensus chain" + beacon-chain \ + --execution-endpoint=http://0.0.0.0:8551 \ + --jwt-secret=/etc/secrets/jwt.hex \ + --accept-terms-of-use \ + --http-host 0.0.0.0 \ + --rpc-host 0.0.0.0 \ + --chain-id 1337 \ + --contract-deployment-block=0 \ + --datadir /ethereum/consensus \ + --genesis-state /ethereum/consensus/genesis.ssz \ + --min-sync-peers=0 \ + --chain-config-file=/ethereum/consensus/config.yaml \ + --network-id 1337 \ + --suggested-fee-recipient=0x123463a4B065722E99115D6c222f267d9cABb524 \ + --minimum-peers-per-subnet=0 \ + --force-clear-db + resources: + requests: + cpu: 200m + memory: 200Mi + limits: + cpu: 200m + memory: 200Mi + volumeMounts: + - name: ethereum + mountPath: /ethereum + - name: secrets + mountPath: /etc/secrets + readinessProbe: + httpGet: + path: /eth/v1/node/health + port: 3500 + initialDelaySeconds: 15 + periodSeconds: 20 + - name: validator + image: ghcr.io/hyperweb-io/starship/prysm/validator:v5.2.0 + imagePullPolicy: Always + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + echo "Waiting 15 seconds for execution client to be ready..." + sleep 20 + mkdir -p /ethereum/consensus/validator + echo "Starting validator node" + validator \ + --accept-terms-of-use \ + --beacon-rpc-provider=0.0.0.0:4000 \ + --datadir=/ethereum/consensus/validator \ + --interop-num-validators=1 \ + --interop-start-index=0 \ + --force-clear-db \ + --grpc-gateway-host=0.0.0.0 \ + --chain-config-file=/ethereum/consensus/config.yaml \ + --monitoring-host=0.0.0.0 \ + --monitoring-port=8081 \ + --suggested-fee-recipient=0x0C46c2cAFE097b4f7e1BB868B89e5697eE65f934 + resources: + requests: + cpu: 200m + memory: 200Mi + limits: + cpu: 200m + memory: 200Mi + volumeMounts: + - name: ethereum + mountPath: /ethereum + - name: secrets + mountPath: /etc/secrets + readinessProbe: + httpGet: + path: /metrics + port: 8081 + initialDelaySeconds: 20 + periodSeconds: 30 + volumes: + - name: config + configMap: + name: config-ethereum + - name: ethereum + emptyDir: {} + - name: secrets + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/service-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/service-service.yaml new file mode 100644 index 000000000..9564bd7b8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth-lite/ethereum/service-service.yaml @@ -0,0 +1,31 @@ +apiVersion: v1 +kind: Service +metadata: + name: ethereum-1337 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: ethereum-1337 + app.kubernetes.io/part-of: '1337' + app.kubernetes.io/role: service + starship.io/chain-name: ethereum + starship.io/chain-id: '1337' +spec: + clusterIP: None + ports: + - name: http + port: 8545 + protocol: TCP + targetPort: 8545 + - name: ws + port: 8546 + protocol: TCP + targetPort: 8546 + - name: rpc + port: 8551 + protocol: TCP + targetPort: 8551 + selector: + app.kubernetes.io/name: ethereum-1337 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/config-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/config-configmap.yaml new file mode 100644 index 000000000..9b93f4d0a --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/config-configmap.yaml @@ -0,0 +1,89 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: config-ethereum + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: ethereum-1337 + app.kubernetes.io/part-of: '1337' + app.kubernetes.io/role: config + starship.io/chain-name: ethereum + starship.io/chain-id: '1337' +data: + genesis.json: |- + { + "config": { + "chainId": 1337, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "londonBlock": 0, + "berlinBlock": 0, + "terminalTotalDifficulty": 0, + "terminalTotalDifficultyPassed": true + }, + "nonce": "0x0", + "timestamp": "0x677d172f", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x47b760", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0x0000000000000000000000000000000000000001": { + "balance": "0x3635c9adc5dea00000" + }, + "0x4242424242424242424242424242424242424242": { + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100b6578063621fd130146101e3578063c5f2892f14610273575b600080fd5b34801561005057600080fd5b5061009c6004803603602081101561006757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061029e565b604051808215151515815260200191505060405180910390f35b6101e1600480360360808110156100cc57600080fd5b81019080803590602001906401000000008111156100e957600080fd5b8201836020820111156100fb57600080fd5b8035906020019184600183028401116401000000008311171561011d57600080fd5b90919293919293908035906020019064010000000081111561013e57600080fd5b82018360208201111561015057600080fd5b8035906020019184600183028401116401000000008311171561017257600080fd5b90919293919293908035906020019064010000000081111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460018302840111640100000000831117156101c757600080fd5b909192939192939080359060200190929190505050610370565b005b3480156101ef57600080fd5b506101f8610fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023857808201518184015260208101905061021d565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027f57600080fd5b50610288610fe2565b6040518082815260200191505060405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036957507f85640907000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b603087879050146103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806116ec6026913960400191505060405180910390fd5b60208585905014610428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806116836036913960400191505060405180910390fd5b60608383905014610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061175f6029913960400191505060405180910390fd5b670de0b6b3a76400003410156104e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117396026913960400191505060405180910390fd5b6000633b9aca0034816104f457fe5b061461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806116b96033913960400191505060405180910390fd5b6000633b9aca00348161055a57fe5b04905067ffffffffffffffff80168111156105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806117126027913960400191505060405180910390fd5b60606105cb82611314565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a610600602054611314565b60405180806020018060200180602001806020018060200186810386528e8e82818152602001925080828437600081840152601f19601f82011690508083019250505086810385528c8c82818152602001925080828437600081840152601f19601f82011690508083019250505086810384528a818151815260200191508051906020019080838360005b838110156106a657808201518184015260208101905061068b565b50505050905090810190601f1680156106d35780820380516001836020036101000a031916815260200191505b508681038352898982818152602001925080828437600081840152601f19601f820116905080830192505050868103825287818151815260200191508051906020019080838360005b8381101561073757808201518184015260208101905061071c565b50505050905090810190601f1680156107645780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b6040516020018084848082843780830192505050826fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260100193505050506040516020818303038152906040526040518082805190602001908083835b6020831061080e57805182526020820191506020810190506020830392506107eb565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610850573d6000803e3d6000fd5b5050506040513d602081101561086557600080fd5b8101908080519060200190929190505050905060006002808888600090604092610891939291906115da565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108eb57805182526020820191506020810190506020830392506108c8565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561092d573d6000803e3d6000fd5b5050506040513d602081101561094257600080fd5b8101908080519060200190929190505050600289896040908092610968939291906115da565b6000801b604051602001808484808284378083019250505082815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106109cd57805182526020820191506020810190506020830392506109aa565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610a0f573d6000803e3d6000fd5b5050506040513d6020811015610a2457600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610a8e5780518252602082019150602081019050602083039250610a6b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ad0573d6000803e3d6000fd5b5050506040513d6020811015610ae557600080fd5b810190808051906020019092919050505090506000600280848c8c604051602001808481526020018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610b615780518252602082019150602081019050602083039250610b3e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ba3573d6000803e3d6000fd5b5050506040513d6020811015610bb857600080fd5b8101908080519060200190929190505050600286600060401b866040516020018084805190602001908083835b60208310610c085780518252602082019150602081019050602083039250610be5565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610c935780518252602082019150602081019050602083039250610c70565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610cd5573d6000803e3d6000fd5b5050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610d545780518252602082019150602081019050602083039250610d31565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610d96573d6000803e3d6000fd5b5050506040513d6020811015610dab57600080fd5b81019080805190602001909291905050509050858114610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605481526020018061162f6054913960600191505060405180910390fd5b6001602060020a0360205410610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061160e6021913960400191505060405180910390fd5b60016020600082825401925050819055506000602054905060008090505b6020811015610fb75760018083161415610ec8578260008260208110610eb757fe5b018190555050505050505050610fc7565b600260008260208110610ed757fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610f335780518252602082019150602081019050602083039250610f10565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610f75573d6000803e3d6000fd5b5050506040513d6020811015610f8a57600080fd5b8101908080519060200190929190505050925060028281610fa757fe5b0491508080600101915050610e95565b506000610fc057fe5b5050505050505b50505050505050565b6060610fdd602054611314565b905090565b6000806000602054905060008090505b60208110156111d057600180831614156110e05760026000826020811061101557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310611071578051825260208201915060208101905060208303925061104e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156110b3573d6000803e3d6000fd5b5050506040513d60208110156110c857600080fd5b810190808051906020019092919050505092506111b6565b600283602183602081106110f057fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061114b5780518252602082019150602081019050602083039250611128565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561118d573d6000803e3d6000fd5b5050506040513d60208110156111a257600080fd5b810190808051906020019092919050505092505b600282816111c057fe5b0491508080600101915050610ff2565b506002826111df602054611314565b600060401b6040516020018084815260200183805190602001908083835b6020831061122057805182526020820191506020810190506020830392506111fd565b6001836020036101000a0380198251168184511680821785525050505050509050018267ffffffffffffffff191667ffffffffffffffff1916815260180193505050506040516020818303038152906040526040518082805190602001908083835b602083106112a55780518252602082019150602081019050602083039250611282565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156112e7573d6000803e3d6000fd5b5050506040513d60208110156112fc57600080fd5b81019080805190602001909291905050509250505090565b6060600867ffffffffffffffff8111801561132e57600080fd5b506040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b50905060008260c01b90508060076008811061137957fe5b1a60f81b8260008151811061138a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806006600881106113c657fe5b1a60f81b826001815181106113d757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060056008811061141357fe5b1a60f81b8260028151811061142457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060046008811061146057fe5b1a60f81b8260038151811061147157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806003600881106114ad57fe5b1a60f81b826004815181106114be57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806002600881106114fa57fe5b1a60f81b8260058151811061150b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060016008811061154757fe5b1a60f81b8260068151811061155857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060006008811061159457fe5b1a60f81b8260078151811061159857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b600080858511156115ea57600080fd5b838611156115f757600080fd5b600185028301915084860390509450949250505056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220230afd4b6e3551329e50f1239e08fa3ab7907b77403c4f237d9adf679e8e43cf64736f6c634300060b0033", + "balance": "0x0" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": "0x7", + "excessBlobGas": null, + "blobGasUsed": null + } + jwt.hex: 3fe89f53368415a79e065f3c885b7273b41540d5598488ef475cfdc4009850a4 + config.yaml: |- + CONFIG_NAME: interop + PRESET_BASE: interop + + # Genesis + GENESIS_FORK_VERSION: 0x20000089 + + # Altair + ALTAIR_FORK_EPOCH: 0 + ALTAIR_FORK_VERSION: 0x20000090 + + # Merge + BELLATRIX_FORK_EPOCH: 0 + BELLATRIX_FORK_VERSION: 0x20000091 + TERMINAL_TOTAL_DIFFICULTY: 0 + + # Capella + CAPELLA_FORK_EPOCH: 0 + CAPELLA_FORK_VERSION: 0x20000092 + MAX_WITHDRAWALS_PER_PAYLOAD: 16 + + # Deneb + DENEB_FORK_VERSION: 0x20000093 + + # Electra + ELECTRA_FORK_VERSION: 0x20000094 + + # Time parameters + SECONDS_PER_SLOT: 12 + SLOTS_PER_EPOCH: 6 + + # Deposit contract + DEPOSIT_CONTRACT_ADDRESS: 0x4242424242424242424242424242424242424242 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/ethereum-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/ethereum-statefulset.yaml new file mode 100644 index 000000000..1ac24070b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/ethereum-statefulset.yaml @@ -0,0 +1,269 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: ethereum-1337 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app: ethereum-1337 + app.kubernetes.io/component: chain + app.kubernetes.io/name: ethereum-1337 + app.kubernetes.io/part-of: '1337' + app.kubernetes.io/role: ethereum + starship.io/chain-name: ethereum + starship.io/chain-id: '1337' +spec: + serviceName: ethereum-1337 + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/instance: ethereum-1337 + app.kubernetes.io/name: ethereum-1337 + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: ethereum-1337 + app.kubernetes.io/type: ethereum-1337 + app.kubernetes.io/name: ethereum-1337 + app.kubernetes.io/rawname: '1337' + spec: + initContainers: + - name: init-genesis-beacon + image: ghcr.io/hyperweb-io/starship/prysm/cmd/prysmctl:v5.2.0 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + mkdir -p /ethereum/consensus /ethereum/execution + cp /config/genesis.json /ethereum/execution/genesis.json + cp /config/config.yaml /ethereum/consensus/config.yaml + + echo "Initializing genesis" + prysmctl testnet generate-genesis \ + --fork=capella \ + --num-validators=1 \ + --genesis-time-delay=15 \ + --output-ssz=/ethereum/consensus/genesis.ssz \ + --chain-config-file=/ethereum/consensus/config.yaml \ + --geth-genesis-json-in=/ethereum/execution/genesis.json \ + --geth-genesis-json-out=/ethereum/execution/genesis.json + + echo "Copy secrets over" + cp /config/jwt.hex /etc/secrets/jwt.hex + resources: + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M + volumeMounts: + - name: secrets + mountPath: /etc/secrets + - name: config + mountPath: /config + - name: ethereum + mountPath: /ethereum + - name: init-genesis-execution + image: ghcr.io/hyperweb-io/starship/ethereum/client-go:v1.14.12 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + echo "Initializing genesis geth" + geth --datadir /ethereum/execution init /ethereum/execution/genesis.json + resources: + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M + volumeMounts: + - name: secrets + mountPath: /etc/secrets + - name: config + mountPath: /config + - name: ethereum + mountPath: /ethereum + containers: + - name: geth + image: ghcr.io/hyperweb-io/starship/ethereum/client-go:v1.14.12 + imagePullPolicy: IfNotPresent + env: + - name: HTTP_PORT + value: '8545' + - name: WS_PORT + value: '8546' + - name: RPC_PORT + value: '8551' + command: + - bash + - '-c' + args: + - |- + echo "Setting UDP buffer size" + sysctl -w net.core.rmem_max=16777216 + sysctl -w net.core.wmem_max=16777216 + + echo "Starting execution chain" + geth --datadir /ethereum/execution --http \ + --http.addr=0.0.0.0 \ + --http.port=$HTTP_PORT \ + --http.api=eth,net,web3,debug \ + --ws --ws.addr=0.0.0.0 \ + --ws.port=$WS_PORT \ + --authrpc.addr=0.0.0.0 \ + --authrpc.port=$RPC_PORT \ + --nodiscover \ + --http.corsdomain=* \ + --ws.api=eth,net,web3 \ + --ws.origins=* \ + --http.vhosts=* \ + --authrpc.vhosts=* \ + --authrpc.jwtsecret=/etc/secrets/jwt.hex \ + --unlock=0x123463a4B065722E99115D6c222f267d9cABb524 \ + --password=/dev/null \ + --syncmode=snap \ + --snapshot=false \ + --networkid=1337 \ + --verbosity=4 \ + --maxpeers=50 \ + --nat=none \ + --log.vmodule=engine=6 + resources: + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M + volumeMounts: + - name: ethereum + mountPath: /ethereum + - name: secrets + mountPath: /etc/secrets + readinessProbe: + exec: + command: + - /bin/bash + - '-c' + - 'curl -s --data ''{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'' -H "Content-Type: application/json" -X POST http://localhost:8545 | grep -q ''"result":false''' + initialDelaySeconds: 15 + periodSeconds: 10 + - name: beacon-chain + image: ghcr.io/hyperweb-io/starship/prysm/beacon-chain:v5.2.0 + imagePullPolicy: Always + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + echo "Waiting 30 seconds for execution client to be ready..." + sleep 30 + + echo "Starting consensus chain" + beacon-chain \ + --execution-endpoint=http://0.0.0.0:8551 \ + --jwt-secret=/etc/secrets/jwt.hex \ + --accept-terms-of-use \ + --http-host 0.0.0.0 \ + --rpc-host 0.0.0.0 \ + --chain-id 1337 \ + --contract-deployment-block=0 \ + --datadir /ethereum/consensus \ + --genesis-state /ethereum/consensus/genesis.ssz \ + --min-sync-peers=0 \ + --chain-config-file=/ethereum/consensus/config.yaml \ + --network-id 1337 \ + --suggested-fee-recipient=0x123463a4B065722E99115D6c222f267d9cABb524 \ + --minimum-peers-per-subnet=0 \ + --force-clear-db + resources: + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M + volumeMounts: + - name: ethereum + mountPath: /ethereum + - name: secrets + mountPath: /etc/secrets + readinessProbe: + httpGet: + path: /eth/v1/node/health + port: 3500 + initialDelaySeconds: 15 + periodSeconds: 20 + - name: validator + image: ghcr.io/hyperweb-io/starship/prysm/validator:v5.2.0 + imagePullPolicy: Always + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + echo "Waiting 15 seconds for execution client to be ready..." + sleep 20 + mkdir -p /ethereum/consensus/validator + echo "Starting validator node" + validator \ + --accept-terms-of-use \ + --beacon-rpc-provider=0.0.0.0:4000 \ + --datadir=/ethereum/consensus/validator \ + --interop-num-validators=1 \ + --interop-start-index=0 \ + --force-clear-db \ + --grpc-gateway-host=0.0.0.0 \ + --chain-config-file=/ethereum/consensus/config.yaml \ + --monitoring-host=0.0.0.0 \ + --monitoring-port=8081 \ + --suggested-fee-recipient=0x0C46c2cAFE097b4f7e1BB868B89e5697eE65f934 + resources: + requests: + cpu: '0.5' + memory: 500M + limits: + cpu: '0.5' + memory: 500M + volumeMounts: + - name: ethereum + mountPath: /ethereum + - name: secrets + mountPath: /etc/secrets + readinessProbe: + httpGet: + path: /metrics + port: 8081 + initialDelaySeconds: 20 + periodSeconds: 30 + volumes: + - name: config + configMap: + name: config-ethereum + - name: ethereum + emptyDir: {} + - name: secrets + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/service-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/service-service.yaml new file mode 100644 index 000000000..9564bd7b8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/eth/ethereum/service-service.yaml @@ -0,0 +1,31 @@ +apiVersion: v1 +kind: Service +metadata: + name: ethereum-1337 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: ethereum-1337 + app.kubernetes.io/part-of: '1337' + app.kubernetes.io/role: service + starship.io/chain-name: ethereum + starship.io/chain-id: '1337' +spec: + clusterIP: None + ports: + - name: http + port: 8545 + protocol: TCP + targetPort: 8545 + - name: ws + port: 8546 + protocol: TCP + targetPort: 8546 + - name: rpc + port: 8551 + protocol: TCP + targetPort: 8551 + selector: + app.kubernetes.io/name: ethereum-1337 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..6ae432684 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/genesis-service.yaml new file mode 100644 index 000000000..c2243084d --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: evmos-9000-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: evmos_9000-1-genesis + app.kubernetes.io/type: evmos_9000-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: evmos + starship.io/chain-id: evmos_9000-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: evmos_9000-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/genesis-statefulset.yaml new file mode 100644 index 000000000..c5418e931 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: evmos-9000-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: evmos_9000-1 + app.kubernetes.io/id: evmos_9000-1 + app.kubernetes.io/name: evmos_9000-1-genesis + app.kubernetes.io/type: evmos_9000-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: evmos +spec: + serviceName: evmos-9000-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: evmos_9000-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: evmos_9000-1 + app.kubernetes.io/name: evmos_9000-1-genesis + app.kubernetes.io/rawname: evmos_9000-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/evmos:v13.0.2 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: aevmos + - name: COINS + value: 100000000000000000000000000aevmos + - name: CHAIN_BIN + value: evmosd + - name: CHAIN_DIR + value: /root/.evmosd + - name: CODE_REPO + value: https://github.com/evmos/evmos + - name: DAEMON_HOME + value: /root/.evmosd + - name: DAEMON_NAME + value: evmosd + - name: CHAIN_ID + value: evmos_9000-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.evmosd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/evmos:v13.0.2 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: aevmos + - name: COINS + value: 100000000000000000000000000aevmos + - name: CHAIN_BIN + value: evmosd + - name: CHAIN_DIR + value: /root/.evmosd + - name: CODE_REPO + value: https://github.com/evmos/evmos + - name: DAEMON_HOME + value: /root/.evmosd + - name: DAEMON_NAME + value: evmosd + - name: CHAIN_ID + value: evmos_9000-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.evmosd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/evmos:v13.0.2 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: aevmos + - name: COINS + value: 100000000000000000000000000aevmos + - name: CHAIN_BIN + value: evmosd + - name: CHAIN_DIR + value: /root/.evmosd + - name: CODE_REPO + value: https://github.com/evmos/evmos + - name: DAEMON_HOME + value: /root/.evmosd + - name: DAEMON_NAME + value: evmosd + - name: CHAIN_ID + value: evmos_9000-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.evmosd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: evmos-9000-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.evmosd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.evmosd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.evmosd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.evmosd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.evmosd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.evmosd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/evmos:v13.0.2 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: evmosd + - name: FAUCET_CHAIN_ID + value: evmos_9000-1 + - name: COINS + value: 100000000000000000000000000aevmos + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-evmos-9000-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/setup-scripts-configmap.yaml new file mode 100644 index 000000000..d2ac20ecf --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-evmos-9000-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-evmos-9000-1 + app.kubernetes.io/part-of: evmos_9000-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: evmos + starship.io/chain-id: evmos_9000-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/validator-service.yaml new file mode 100644 index 000000000..0d28593d8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: evmos-9000-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: evmos_9000-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: evmos_9000-1-service + starship.io/chain-name: evmos + starship.io/chain-id: evmos_9000-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: evmos_9000-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/validator-statefulset.yaml new file mode 100644 index 000000000..07b7d3aed --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/evmos/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: evmos-9000-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: evmos_9000-1 + app.kubernetes.io/id: evmos_9000-1 + app.kubernetes.io/name: evmos_9000-1-validator + app.kubernetes.io/type: evmos_9000-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: evmos +spec: + serviceName: evmos-9000-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: evmos_9000-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: evmos_9000-1 + app.kubernetes.io/name: evmos_9000-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/evmos:v13.0.2 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: aevmos + - name: COINS + value: 100000000000000000000000000aevmos + - name: CHAIN_BIN + value: evmosd + - name: CHAIN_DIR + value: /root/.evmosd + - name: CODE_REPO + value: https://github.com/evmos/evmos + - name: DAEMON_HOME + value: /root/.evmosd + - name: DAEMON_NAME + value: evmosd + - name: CHAIN_ID + value: evmos_9000-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: evmos-9000-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.evmosd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/evmos:v13.0.2 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: aevmos + - name: COINS + value: 100000000000000000000000000aevmos + - name: CHAIN_BIN + value: evmosd + - name: CHAIN_DIR + value: /root/.evmosd + - name: CODE_REPO + value: https://github.com/evmos/evmos + - name: DAEMON_HOME + value: /root/.evmosd + - name: DAEMON_NAME + value: evmosd + - name: CHAIN_ID + value: evmos_9000-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: evmos-9000-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.evmosd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/evmos:v13.0.2 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: aevmos + - name: COINS + value: 100000000000000000000000000aevmos + - name: CHAIN_BIN + value: evmosd + - name: CHAIN_DIR + value: /root/.evmosd + - name: CODE_REPO + value: https://github.com/evmos/evmos + - name: DAEMON_HOME + value: /root/.evmosd + - name: DAEMON_NAME + value: evmosd + - name: CHAIN_ID + value: evmos_9000-1 + - name: GENESIS_HOST + value: evmos-9000-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.evmosd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: aevmos + - name: COINS + value: 100000000000000000000000000aevmos + - name: CHAIN_BIN + value: evmosd + - name: CHAIN_DIR + value: /root/.evmosd + - name: CODE_REPO + value: https://github.com/evmos/evmos + - name: DAEMON_HOME + value: /root/.evmosd + - name: DAEMON_NAME + value: evmosd + - name: CHAIN_ID + value: evmos_9000-1 + - name: GENESIS_HOST + value: evmos-9000-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.evmosd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.evmosd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.evmosd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.evmosd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.evmosd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-evmos-9000-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/deployment.yaml new file mode 100644 index 000000000..cd14c5028 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: evmos_9000-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: evmos,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-evmos-9000-1 + mountPath: /chains/evmos_9000-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-evmos-9000-1 + configMap: + name: registry-evmos-9000-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/evmos-9000-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/evmos-9000-1-configmap.yaml new file mode 100644 index 000000000..1d42775d9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/evmos-9000-1-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-evmos-9000-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-evmos-9000-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "evmos", + "status": "live", + "network_type": "devnet", + "chain_id": "evmos_9000-1", + "pretty_name": "Evmos Devnet", + "bech32_prefix": "evmos", + "daemon_name": "evmosd", + "node_home": "/root/.evmosd", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "aevmos", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "aevmos" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/evmos/evmos", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "evmos", + "assets": [ + { + "base": "aevmos", + "description": "The native EVM, governance and staking token of the Evmos Hub", + "denom_units": [ + { + "denom": "aevmos", + "exponent": 0 + }, + { + "denom": "evmos", + "exponent": 18 + } + ], + "name": "Evmos", + "display": "evmos", + "symbol": "EVMOS", + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.svg", + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png" + }, + "coingecko_id": "evmos" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-configmap.yaml new file mode 100644 index 000000000..8538fffb5 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-evmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-evmos-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "evmos_9000-1" + type = "CosmosSdk" + key_name = "evmos_9000-1" + + rpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "evmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } + gas_price = { price = 2500000, denom = "aevmos" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "evmos_9000-1" + type = "CosmosSdk" + key_name = "evmos_9000-1-cli" + + rpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "evmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } + gas_price = { price = 2500000, denom = "aevmos" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-service.yaml new file mode 100644 index 000000000..05dcbf7ad --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-evmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-evmos-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-evmos-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-statefulset.yaml new file mode 100644 index 000000000..ebed1b3f7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/evmos/relayer/hermes-evmos-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-evmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-evmos-cosmos +spec: + serviceName: hermes-evmos-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-evmos-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-evmos-cosmos + app.kubernetes.io/rawname: evmos-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for evmos_9000-1..." + hermes keys add \ + --chain evmos_9000-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name evmos_9000-1 \ + --hd-path "m/44'/60'/0'/0/0" + DENOM="aevmos" + RLY_ADDR=$(hermes --json keys list --chain evmos_9000-1 | tail -1 | jq -r '.result."evmos_9000-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for evmos_9000-1-cli..." + hermes keys add \ + --chain evmos_9000-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name evmos_9000-1-cli \ + --hd-path "m/44'/60'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain evmos_9000-1 | tail -1 | jq -r '.result."evmos_9000-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain evmos_9000-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-evmos-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/frontend/playground-deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/frontend/playground-deployment.yaml new file mode 100644 index 000000000..900968b68 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/frontend/playground-deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: playground + labels: + app.kubernetes.io/component: frontend + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: playground + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: playground + app.kubernetes.io/name: playground + template: + metadata: + annotations: + quality: release + role: frontend + sla: high + tier: frontend + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/instance: playground + app.kubernetes.io/type: custom + app.kubernetes.io/name: playground + spec: + containers: + - name: playground + image: ghcr.io/hyperweb-io/hyperweb-playground:latest + imagePullPolicy: Always + ports: + - name: http + containerPort: 3000 + protocol: TCP + env: + CHAIN_RPC_URL: http://localhost:26657 + CHAIN_FAUCET_URL: http://localhost:8000 + REGISTRY_REST_URL: http://localhost:8081 + S3_BUCKET_URL: https://hyperweb-playground.s3.amazonaws.com/create-hyperweb-app + S3_TARBALL_NAME: latest.tar.gz + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/frontend/playground-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/frontend/playground-service.yaml new file mode 100644 index 000000000..ac1877bad --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/frontend/playground-service.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: playground + labels: + app.kubernetes.io/name: playground + app.kubernetes.io/component: frontend + app.kubernetes.io/part-of: starship + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship +spec: + clusterIP: None + ports: + - name: http + port: 3000 + protocol: TCP + targetPort: http + selector: + app.kubernetes.io/name: playground diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/genesis-service.yaml new file mode 100644 index 000000000..34cd998be --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: test-hyperweb-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: test-hyperweb-1-genesis + app.kubernetes.io/type: test-hyperweb-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: hyperweb + starship.io/chain-id: test-hyperweb-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: test-hyperweb-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/genesis-statefulset.yaml new file mode 100644 index 000000000..8f97afe55 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-hyperweb-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: test-hyperweb-1 + app.kubernetes.io/id: test-hyperweb-1 + app.kubernetes.io/name: test-hyperweb-1-genesis + app.kubernetes.io/type: test-hyperweb-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: hyperweb +spec: + serviceName: test-hyperweb-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: test-hyperweb-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: test-hyperweb-1 + app.kubernetes.io/name: test-hyperweb-1-genesis + app.kubernetes.io/rawname: test-hyperweb-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/hyperweb-io/hyperweb:latest + imagePullPolicy: Always + env: + - name: DENOM + value: uhyper + - name: COINS + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + - name: CHAIN_BIN + value: hyperd + - name: CHAIN_DIR + value: /root/.hyperd + - name: CODE_REPO + value: https://github.com/hyperweb-io/hyperweb + - name: DAEMON_HOME + value: /root/.hyperd + - name: DAEMON_NAME + value: hyperd + - name: CHAIN_ID + value: test-hyperweb-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.hyperd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/hyperweb-io/hyperweb:latest + imagePullPolicy: Always + env: + - name: DENOM + value: uhyper + - name: COINS + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + - name: CHAIN_BIN + value: hyperd + - name: CHAIN_DIR + value: /root/.hyperd + - name: CODE_REPO + value: https://github.com/hyperweb-io/hyperweb + - name: DAEMON_HOME + value: /root/.hyperd + - name: DAEMON_NAME + value: hyperd + - name: CHAIN_ID + value: test-hyperweb-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.hyperd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/hyperweb-io/hyperweb:latest + imagePullPolicy: Always + env: + - name: DENOM + value: uhyper + - name: COINS + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + - name: CHAIN_BIN + value: hyperd + - name: CHAIN_DIR + value: /root/.hyperd + - name: CODE_REPO + value: https://github.com/hyperweb-io/hyperweb + - name: DAEMON_HOME + value: /root/.hyperd + - name: DAEMON_NAME + value: hyperd + - name: CHAIN_ID + value: test-hyperweb-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.hyperd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: Always + env: + - name: GENESIS_HOST + value: test-hyperweb-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.hyperd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.hyperd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.hyperd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.hyperd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.hyperd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.hyperd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/hyperweb-io/hyperweb:latest + imagePullPolicy: Always + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: hyperd + - name: FAUCET_CHAIN_ID + value: test-hyperweb-1 + - name: COINS + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-test-hyperweb-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/setup-scripts-configmap.yaml new file mode 100644 index 000000000..4e8fc6feb --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-test-hyperweb-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-test-hyperweb-1 + app.kubernetes.io/part-of: test-hyperweb-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: hyperweb + starship.io/chain-id: test-hyperweb-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/validator-service.yaml new file mode 100644 index 000000000..a3691afd7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: test-hyperweb-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: test-hyperweb-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: test-hyperweb-1-service + starship.io/chain-name: hyperweb + starship.io/chain-id: test-hyperweb-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: test-hyperweb-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/validator-statefulset.yaml new file mode 100644 index 000000000..293cdc6fc --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/hyperweb/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-hyperweb-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: test-hyperweb-1 + app.kubernetes.io/id: test-hyperweb-1 + app.kubernetes.io/name: test-hyperweb-1-validator + app.kubernetes.io/type: test-hyperweb-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: hyperweb +spec: + serviceName: test-hyperweb-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: test-hyperweb-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: test-hyperweb-1 + app.kubernetes.io/name: test-hyperweb-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: Always + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: test-hyperweb-1. Waiting for it to start..." + echo "Checking: http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/hyperweb-io/hyperweb:latest + imagePullPolicy: Always + env: + - name: DENOM + value: uhyper + - name: COINS + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + - name: CHAIN_BIN + value: hyperd + - name: CHAIN_DIR + value: /root/.hyperd + - name: CODE_REPO + value: https://github.com/hyperweb-io/hyperweb + - name: DAEMON_HOME + value: /root/.hyperd + - name: DAEMON_NAME + value: hyperd + - name: CHAIN_ID + value: test-hyperweb-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: test-hyperweb-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.hyperd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/hyperweb-io/hyperweb:latest + imagePullPolicy: Always + env: + - name: DENOM + value: uhyper + - name: COINS + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + - name: CHAIN_BIN + value: hyperd + - name: CHAIN_DIR + value: /root/.hyperd + - name: CODE_REPO + value: https://github.com/hyperweb-io/hyperweb + - name: DAEMON_HOME + value: /root/.hyperd + - name: DAEMON_NAME + value: hyperd + - name: CHAIN_ID + value: test-hyperweb-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: test-hyperweb-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.hyperd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/hyperweb-io/hyperweb:latest + imagePullPolicy: Always + env: + - name: DENOM + value: uhyper + - name: COINS + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + - name: CHAIN_BIN + value: hyperd + - name: CHAIN_DIR + value: /root/.hyperd + - name: CODE_REPO + value: https://github.com/hyperweb-io/hyperweb + - name: DAEMON_HOME + value: /root/.hyperd + - name: DAEMON_NAME + value: hyperd + - name: CHAIN_ID + value: test-hyperweb-1 + - name: GENESIS_HOST + value: test-hyperweb-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.hyperd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: Always + env: + - name: DENOM + value: uhyper + - name: COINS + value: 100000000000000uhyper,100000000000000uhypweb,100000000000000uatom,100000000000000uusdc + - name: CHAIN_BIN + value: hyperd + - name: CHAIN_DIR + value: /root/.hyperd + - name: CODE_REPO + value: https://github.com/hyperweb-io/hyperweb + - name: DAEMON_HOME + value: /root/.hyperd + - name: DAEMON_NAME + value: hyperd + - name: CHAIN_ID + value: test-hyperweb-1 + - name: GENESIS_HOST + value: test-hyperweb-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.hyperd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.hyperd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.hyperd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.hyperd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.hyperd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-test-hyperweb-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/deployment.yaml new file mode 100644 index 000000000..c03aa9bae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: Always + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: test-hyperweb-1. Waiting for it to start..." + echo "Checking: http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: test-hyperweb-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: hyperweb + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-test-hyperweb-1 + mountPath: /chains/test-hyperweb-1 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-test-hyperweb-1 + configMap: + name: registry-test-hyperweb-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/test-hyperweb-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/test-hyperweb-1-configmap.yaml new file mode 100644 index 000000000..a701ea716 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/hyperweb/registry/test-hyperweb-1-configmap.yaml @@ -0,0 +1,95 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-test-hyperweb-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-test-hyperweb-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "hyperweb", + "status": "live", + "network_type": "devnet", + "chain_id": "test-hyperweb-1", + "pretty_name": "Hyperweb Devnet", + "bech32_prefix": "hyper", + "daemon_name": "hyperd", + "node_home": "/root/.hyperd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uhyper", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uhyper" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/hyperweb-io/hyperweb", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "hyperweb", + "assets": [ + { + "base": "uhyper", + "description": "The meme coin for Hyperweb chain.", + "name": "Hyper", + "display": "hyper", + "symbol": "HYPR", + "logo_URIs": { + "png": "https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-png.png", + "svg": "https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-svg.svg" + }, + "denom_units": [ + { + "denom": "uhyper", + "exponent": 0 + }, + { + "denom": "hyper", + "exponent": 6 + } + ], + "coingecko_id": "hyper", + "keywords": [ + "hyper" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..6ae432684 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/genesis-service.yaml new file mode 100644 index 000000000..98a1ff563 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: injective-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: injective-1-genesis + app.kubernetes.io/type: injective-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: injective + starship.io/chain-id: injective-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: injective-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/genesis-statefulset.yaml new file mode 100644 index 000000000..66a7f3ed5 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: injective-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: injective-1 + app.kubernetes.io/id: injective-1 + app.kubernetes.io/name: injective-1-genesis + app.kubernetes.io/type: injective-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: injective +spec: + serviceName: injective-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: injective-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: injective-1 + app.kubernetes.io/name: injective-1-genesis + app.kubernetes.io/rawname: injective-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/injective:v1.11.6 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: inj + - name: COINS + value: 100000000000000000000000000inj + - name: CHAIN_BIN + value: injectived + - name: CHAIN_DIR + value: /root/.injectived + - name: CODE_REPO + value: https://github.com/InjectiveLabs/injective-chain-releases + - name: DAEMON_HOME + value: /root/.injectived + - name: DAEMON_NAME + value: injectived + - name: CHAIN_ID + value: injective-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.injectived + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/injective:v1.11.6 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: inj + - name: COINS + value: 100000000000000000000000000inj + - name: CHAIN_BIN + value: injectived + - name: CHAIN_DIR + value: /root/.injectived + - name: CODE_REPO + value: https://github.com/InjectiveLabs/injective-chain-releases + - name: DAEMON_HOME + value: /root/.injectived + - name: DAEMON_NAME + value: injectived + - name: CHAIN_ID + value: injective-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.injectived + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/injective:v1.11.6 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: inj + - name: COINS + value: 100000000000000000000000000inj + - name: CHAIN_BIN + value: injectived + - name: CHAIN_DIR + value: /root/.injectived + - name: CODE_REPO + value: https://github.com/InjectiveLabs/injective-chain-releases + - name: DAEMON_HOME + value: /root/.injectived + - name: DAEMON_NAME + value: injectived + - name: CHAIN_ID + value: injective-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.injectived + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: injective-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.injectived/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.injectived/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.injectived/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.injectived/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.injectived/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.injectived + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/injective:v1.11.6 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: injectived + - name: FAUCET_CHAIN_ID + value: injective-1 + - name: COINS + value: 100000000000000000000000000inj + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-injective-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/setup-scripts-configmap.yaml new file mode 100644 index 000000000..a9a6f232b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/setup-scripts-configmap.yaml @@ -0,0 +1,637 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-injective-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-injective-1 + app.kubernetes.io/part-of: injective-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: injective + starship.io/chain-id: injective-1 +data: + createGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000inj}" + CHAIN_ID="${CHAIN_ID:=injective}" + CHAIN_BIN="${CHAIN_BIN:=injectived}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.injectived}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + FEEDADMIN="inj1k2z3chspuk9wsufle69svmtmnlc07rvw9djya7" + + set -eu + + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_ID --recover + + WASM_KEY="wasm" + WASM_MNEMONIC="juice dog over thing anger search film document sight fork enrich jungle vacuum grab more sunset winner diesel flock smooth route impulse cheap toward" + + VAL_KEY="localkey" + VAL_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" + + USER1_KEY="user1" + USER1_MNEMONIC="copper push brief egg scan entry inform record adjust fossil boss egg comic alien upon aspect dry avoid interest fury window hint race symptom" + + USER2_KEY="user2" + USER2_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" + + USER3_KEY="user3" + USER3_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" + + USER4_KEY="user4" + USER4_MNEMONIC="pony glide frown crisp unfold lawn cup loan trial govern usual matrix theory wash fresh address pioneer between meadow visa buffalo keep gallery swear" + + USER5_KEY="ocrfeedadmin" + USER5_MNEMONIC="earn front swamp dune level clip shell aware apple spare faith upset flip local regret loud suspect view heavy raccoon satisfy cupboard harbor basic" + + USER6_KEY="signer1" + USER6_MNEMONIC="output arrange offer advance egg point office silent diamond fame heart hotel rocket sheriff resemble couple race crouch kit laptop document grape drastic lumber" + + USER7_KEY="signer2" + USER7_MNEMONIC="velvet gesture rule caution injury stick property decorate raccoon physical narrow tuition address drum shoot pyramid record sport include rich actress sadness crater seek" + + USER8_KEY="signer3" + USER8_MNEMONIC="guitar parrot nuclear sun blue marble amazing extend solar device address better chalk shock street absent follow notice female picnic into trade brass couch" + + USER9_KEY="signer4" + USER9_MNEMONIC="rotate fame stamp size inform hurdle match stick brain shrimp fancy clinic soccer fortune photo gloom wear punch shed diet celery blossom tide bulk" + + USER10_KEY="signer5" + USER10_MNEMONIC="apart acid night more advance december weather expect pause taxi reunion eternal crater crew lady chaos visual dynamic friend match glow flash couple tumble" + + NEWLINE=$'\n' + + # Import keys from mnemonics + echo "$WASM_MNEMONIC" | $CHAIN_BIN keys add $WASM_KEY --recover --keyring-backend="test" + yes "$VAL_MNEMONIC" | $CHAIN_BIN keys add $VAL_KEY --recover --keyring-backend="test" + yes "$USER1_MNEMONIC" | $CHAIN_BIN keys add $USER1_KEY --recover --keyring-backend="test" + yes "$USER2_MNEMONIC" | $CHAIN_BIN keys add $USER2_KEY --recover --keyring-backend="test" + yes "$USER3_MNEMONIC" | $CHAIN_BIN keys add $USER3_KEY --recover --keyring-backend="test" + yes "$USER4_MNEMONIC" | $CHAIN_BIN keys add $USER4_KEY --recover --keyring-backend="test" + yes "$USER5_MNEMONIC" | $CHAIN_BIN keys add $USER5_KEY --recover --keyring-backend="test" + yes "$USER6_MNEMONIC" | $CHAIN_BIN keys add $USER6_KEY --recover --keyring-backend="test" + yes "$USER7_MNEMONIC" | $CHAIN_BIN keys add $USER7_KEY --recover --keyring-backend="test" + yes "$USER8_MNEMONIC" | $CHAIN_BIN keys add $USER8_KEY --recover --keyring-backend="test" + yes "$USER9_MNEMONIC" | $CHAIN_BIN keys add $USER9_KEY --recover --keyring-backend="test" + yes "$USER10_MNEMONIC" | $CHAIN_BIN keys add $USER10_KEY --recover --keyring-backend="test" + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") 1000000000000000000000000inj,1000000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend="test" + + # Add relayer keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".relayers[0].name" $KEYS_CONFIG) + jq -r ".relayers[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".relayers[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend="test") 1000000000000000000000000inj --keyring-backend="test" + + # Add faucet keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") 1000000000000000000000000inj --keyring-backend="test" + + + # zero address account + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID inj1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqe2hm49 1inj + + # Allocate genesis accounts (cosmos formatted addresses) + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $WASM_KEY -a --keyring-backend="test") 1000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $VAL_KEY -a --keyring-backend="test") 1000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER1_KEY -a --keyring-backend="test") 1000000000000000000000inj,1000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER2_KEY -a --keyring-backend="test") 1000000000000000000000inj,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER3_KEY -a --keyring-backend="test") 1000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER4_KEY -a --keyring-backend="test") 1000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER5_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER6_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER7_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER8_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER9_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER10_KEY -a --keyring-backend="test") 100000000000000000000000000inj --keyring-backend="test" + + echo "Creating gentx..." + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) 1000000000000000000000inj --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + echo "Validate genesis" + $CHAIN_BIN validate-genesis + + ls $CHAIN_DIR/config + updateGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=inj}" + CHAIN_BIN="${CHAIN_BIN:=injectived}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.injectived}" + + set -eu + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 "NOTE: Setting unbolding time to 300s to as to be able to set trusttime on relayers correctly" + 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 |= "6s"' $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.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["staking"]["params"]["bond_denom"] |= "inj"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["crisis"]["constant_fee"]["denom"] |= "inj"' $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]["denom"] |= "inj"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + echo "NOTE: Setting Governance Voting Period to 10 seconds for easy testing" + jq -r '.app_state["gov"]["voting_params"]["voting_period"] |= "10s"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["mint"]["params"]["mint_denom"] |= "inj"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["auction"]["params"]["auction_period"] |= "10"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["ocr"]["params"]["module_admin"] |= "'$FEEDADMIN'"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state["ocr"]["params"]["payout_block_interval"] |= "5"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + + + INJ='{"denom":"inj","decimals":18}' + + USDT='{"denom":"peggy0xdAC17F958D2ee523a2206206994597C13D831ec7","decimals":6}' + USDC='{"denom":"peggy0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","decimals":6}' + ONEINCH='{"denom":"peggy0x111111111117dc0aa78b770fa6a738034120c302","decimals":18}' + AAVE='{"denom":"peggy0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9","decimals":18}' + AXS='{"denom":"peggy0xBB0E17EF65F82Ab018d8EDd776e8DD940327B28b","decimals":18}' + BAT='{"denom":"peggy0x0D8775F648430679A709E98d2b0Cb6250d2887EF","decimals":18}' + BNB='{"denom":"peggy0xB8c77482e45F1F44dE1745F52C74426C631bDD52","decimals":18}' + WBTC='{"denom":"peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599","decimals":8}' + BUSD='{"denom":"peggy0x4Fabb145d64652a948d72533023f6E7A623C7C53","decimals":18}' + CEL='{"denom":"peggy0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d","decimals":4}' + CELL='{"denom":"peggy0x26c8AFBBFE1EBaca03C2bB082E69D0476Bffe099","decimals":18}' + CHZ='{"denom":"peggy0x3506424F91fD33084466F402d5D97f05F8e3b4AF","decimals":18}' + COMP='{"denom":"peggy0xc00e94Cb662C3520282E6f5717214004A7f26888","decimals":18}' + DAI='{"denom":"peggy0x6B175474E89094C44Da98b954EedeAC495271d0F","decimals":18}' + DEFI5='{"denom":"peggy0xfa6de2697D59E88Ed7Fc4dFE5A33daC43565ea41","decimals":18}' + ENJ='{"denom":"peggy0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c","decimals":18}' + WETH='{"denom":"peggy0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","decimals":18}' + EVAI='{"denom":"peggy0x50f09629d0afDF40398a3F317cc676cA9132055c","decimals":8}' + FTM='{"denom":"peggy0x4E15361FD6b4BB609Fa63C81A2be19d873717870","decimals":18}' + GF='{"denom":"peggy0xAaEf88cEa01475125522e117BFe45cF32044E238","decimals":18}' + GRT='{"denom":"peggy0xc944E90C64B2c07662A292be6244BDf05Cda44a7","decimals":18}' + HT='{"denom":"peggy0x6f259637dcD74C767781E37Bc6133cd6A68aa161","decimals":18}' + LINK='{"denom":"peggy0x514910771AF9Ca656af840dff83E8264EcF986CA","decimals":18}' + MATIC='{"denom":"peggy0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0","decimals":18}' + NEXO='{"denom":"peggy0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206","decimals":18}' + NOIA='{"denom":"peggy0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca","decimals":18}' + OCEAN='{"denom":"peggy0x967da4048cD07aB37855c090aAF366e4ce1b9F48","decimals":18}' + PAXG='{"denom":"peggy0x45804880De22913dAFE09f4980848ECE6EcbAf78","decimals":18}' + POOL='{"denom":"peggy0x0cEC1A9154Ff802e7934Fc916Ed7Ca50bDE6844e","decimals":18}' + QNT='{"denom":"peggy0x4a220E6096B25EADb88358cb44068A3248254675","decimals":18}' + RUNE='{"denom":"peggy0x3155BA85D5F96b2d030a4966AF206230e46849cb","decimals":18}' + SHIB='{"denom":"peggy0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE","decimals":18}' + SNX='{"denom":"peggy0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F","decimals":18}' + STARS='{"denom":"peggy0xc55c2175E90A46602fD42e931f62B3Acc1A013Ca","decimals":18}' + STT='{"denom":"peggy0xaC9Bb427953aC7FDDC562ADcA86CF42D988047Fd","decimals":18}' + SUSHI='{"denom":"peggy0x6B3595068778DD592e39A122f4f5a5cF09C90fE2","decimals":18}' + SWAP='{"denom":"peggy0xCC4304A31d09258b0029eA7FE63d032f52e44EFe","decimals":18}' + UMA='{"denom":"peggy0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828","decimals":18}' + UNI='{"denom":"peggy0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984","decimals":18}' + UTK='{"denom":"peggy0xdc9Ac3C20D1ed0B540dF9b1feDC10039Df13F99c","decimals":18}' + YFI='{"denom":"peggy0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e","decimals":18}' + ZRX='{"denom":"peggy0xE41d2489571d322189246DaFA5ebDe1F4699F498","decimals":18}' + + ATOM='{"denom":"ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9","decimals":6}' + USTC='{"denom":"ibc/B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C","decimals":6}' + AXL='{"denom":"ibc/C49B72C4E85AE5361C3E0F0587B24F509CB16ECEB8970B6F917D697036AF49BE","decimals":6}' + XPRT='{"denom":"ibc/B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB","decimals":6}' + SCRT='{"denom":"ibc/3C38B741DF7CD6CAC484343A4994CFC74BC002D1840AAFD5416D9DAC61E37F10","decimals":6}' + OSMO='{"denom":"ibc/92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333","decimals":6}' + LUNC='{"denom":"ibc/B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395","decimals":6}' + HUAHUA='{"denom":"ibc/E7807A46C0B7B44B350DA58F51F278881B863EC4DCA94635DAB39E52C30766CB","decimals":6}' + EVMOS='{"denom":"ibc/16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821","decimals":18}' + DOT='{"denom":"ibc/624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4","decimals":10}' + + PEGGY_DENOM_DECIMALS="${USDT},${USDC},${ONEINCH},${AXS},${BAT},${BNB},${WBTC},${BUSD},${CEL},${CELL},${CHZ},${COMP},${DAI},${DEFI5},${ENJ},${WETH},${EVAI},${FTM},${GF},${GRT},${HT},${LINK},${MATIC},${NEXO},${NOIA},${OCEAN},${PAXG},${POOL},${QNT},${RUNE},${SHIB},${SNX},${STARS},${STT},${SUSHI},${SWAP},${UMA},${UNI},${UTK},${YFI},${ZRX}" + IBC_DENOM_DECIMALS="${ATOM},${USTC},${AXL},${XPRT},${SCRT},${OSMO},${LUNC},${HUAHUA},${EVMOS},${DOT}" + DENOM_DECIMALS='['${INJ},${PEGGY_DENOM_DECIMALS},${IBC_DENOM_DECIMALS}']' + + jq -r '.app_state["exchange"]["denom_decimals"]='${DENOM_DECIMALS} $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + + $CHAIN_BIN tendermint show-node-id + + echo "Validate genesis" + $CHAIN_BIN validate-genesis + update-config.sh: | + #!/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 + createValidator.sh: | + #!/bin/bash + + DENOM="${DENOM:=inj}" + CHAIN_BIN="${CHAIN_BIN:=injectived}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=injective}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator \ + --pubkey=$($CHAIN_BIN tendermint show-validator) \ + --moniker $VAL_NAME \ + --amount 10000000000000000inj \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --min-self-delegation="1000000" \ + --keyring-backend="test" \ + --fees 100000$DENOM \ + --gas="auto" \ + --gas-adjustment 1.5 --yes > /validator.log + + cat /validator.log | jq + } + + cosmos-sdk-version-default + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/validator-service.yaml new file mode 100644 index 000000000..08aa2630a --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: injective-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: injective-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: injective-1-service + starship.io/chain-name: injective + starship.io/chain-id: injective-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: injective-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/validator-statefulset.yaml new file mode 100644 index 000000000..2ee2d0bd5 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/injective/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: injective-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: injective-1 + app.kubernetes.io/id: injective-1 + app.kubernetes.io/name: injective-1-validator + app.kubernetes.io/type: injective-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: injective +spec: + serviceName: injective-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: injective-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: injective-1 + app.kubernetes.io/name: injective-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/injective:v1.11.6 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: inj + - name: COINS + value: 100000000000000000000000000inj + - name: CHAIN_BIN + value: injectived + - name: CHAIN_DIR + value: /root/.injectived + - name: CODE_REPO + value: https://github.com/InjectiveLabs/injective-chain-releases + - name: DAEMON_HOME + value: /root/.injectived + - name: DAEMON_NAME + value: injectived + - name: CHAIN_ID + value: injective-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: injective-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.injectived + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/injective:v1.11.6 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: inj + - name: COINS + value: 100000000000000000000000000inj + - name: CHAIN_BIN + value: injectived + - name: CHAIN_DIR + value: /root/.injectived + - name: CODE_REPO + value: https://github.com/InjectiveLabs/injective-chain-releases + - name: DAEMON_HOME + value: /root/.injectived + - name: DAEMON_NAME + value: injectived + - name: CHAIN_ID + value: injective-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: injective-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.injectived + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/injective:v1.11.6 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: inj + - name: COINS + value: 100000000000000000000000000inj + - name: CHAIN_BIN + value: injectived + - name: CHAIN_DIR + value: /root/.injectived + - name: CODE_REPO + value: https://github.com/InjectiveLabs/injective-chain-releases + - name: DAEMON_HOME + value: /root/.injectived + - name: DAEMON_NAME + value: injectived + - name: CHAIN_ID + value: injective-1 + - name: GENESIS_HOST + value: injective-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.injectived + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: inj + - name: COINS + value: 100000000000000000000000000inj + - name: CHAIN_BIN + value: injectived + - name: CHAIN_DIR + value: /root/.injectived + - name: CODE_REPO + value: https://github.com/InjectiveLabs/injective-chain-releases + - name: DAEMON_HOME + value: /root/.injectived + - name: DAEMON_NAME + value: injectived + - name: CHAIN_ID + value: injective-1 + - name: GENESIS_HOST + value: injective-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.injectived/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.injectived/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.injectived/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.injectived/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.injectived + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-injective-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/deployment.yaml new file mode 100644 index 000000000..69b790f82 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: injective-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: injective,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-injective-1 + mountPath: /chains/injective-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-injective-1 + configMap: + name: registry-injective-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/injective-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/injective-1-configmap.yaml new file mode 100644 index 000000000..d640afe3e --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/injective-1-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-injective-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-injective-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "injective", + "status": "live", + "network_type": "devnet", + "chain_id": "injective-1", + "pretty_name": "Injective Devnet", + "bech32_prefix": "inj", + "daemon_name": "injectived", + "node_home": "/root/.injectived", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "inj", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "inj" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/InjectiveLabs/injective-chain-releases", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "injective", + "assets": [ + { + "base": "inj", + "description": "The INJ token is the native governance token for the Injective chain.", + "denom_units": [ + { + "denom": "inj", + "exponent": 0 + }, + { + "denom": "INJ", + "exponent": 18 + } + ], + "name": "Injective", + "display": "INJ", + "symbol": "INJ", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.svg" + }, + "coingecko_id": "injective-protocol" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-configmap.yaml new file mode 100644 index 000000000..fa6b8b4f9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-injective-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-injective-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "injective-1" + type = "CosmosSdk" + key_name = "injective-1" + + rpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "inj" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/injective.crypto.v1beta1.ethsecp256k1.PubKey' } } + gas_price = { price = 2500000, denom = "inj" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "injective-1" + type = "CosmosSdk" + key_name = "injective-1-cli" + + rpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "inj" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/injective.crypto.v1beta1.ethsecp256k1.PubKey' } } + gas_price = { price = 2500000, denom = "inj" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-service.yaml new file mode 100644 index 000000000..5be9109b7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-injective-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-injective-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-injective-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-statefulset.yaml new file mode 100644 index 000000000..fcd2e8994 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/injective/relayer/hermes-injective-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-injective-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-injective-cosmos +spec: + serviceName: hermes-injective-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-injective-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-injective-cosmos + app.kubernetes.io/rawname: injective-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for injective-1..." + hermes keys add \ + --chain injective-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name injective-1 \ + --hd-path "m/44'/60'/0'/0/0" + DENOM="inj" + RLY_ADDR=$(hermes --json keys list --chain injective-1 | tail -1 | jq -r '.result."injective-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://injective-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for injective-1-cli..." + hermes keys add \ + --chain injective-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name injective-1-cli \ + --hd-path "m/44'/60'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain injective-1 | tail -1 | jq -r '.result."injective-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://injective-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain injective-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-injective-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..bd7ebc369 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '3' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/genesis-service.yaml new file mode 100644 index 000000000..49d3de57a --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: juno-2-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: juno-2-genesis + app.kubernetes.io/type: juno-2-service + app.kubernetes.io/role: genesis + starship.io/chain-name: juno + starship.io/chain-id: juno-2 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: juno-2-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/genesis-statefulset.yaml new file mode 100644 index 000000000..64b477bf6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: juno-2-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: juno-2 + app.kubernetes.io/id: juno-2 + app.kubernetes.io/name: juno-2-genesis + app.kubernetes.io/type: juno-2-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: juno +spec: + serviceName: juno-2-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: juno-2-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: juno-2 + app.kubernetes.io/name: juno-2-genesis + app.kubernetes.io/rawname: juno-2 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/juno:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ujuno + - name: COINS + value: 100000000000000ujuno + - name: CHAIN_BIN + value: junod + - name: CHAIN_DIR + value: /root/.juno + - name: CODE_REPO + value: https://github.com/CosmosContracts/juno + - name: DAEMON_HOME + value: /root/.juno + - name: DAEMON_NAME + value: junod + - name: CHAIN_ID + value: juno-2 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '3' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.juno + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/juno:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ujuno + - name: COINS + value: 100000000000000ujuno + - name: CHAIN_BIN + value: junod + - name: CHAIN_DIR + value: /root/.juno + - name: CODE_REPO + value: https://github.com/CosmosContracts/juno + - name: DAEMON_HOME + value: /root/.juno + - name: DAEMON_NAME + value: junod + - name: CHAIN_ID + value: juno-2 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.juno + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/juno:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ujuno + - name: COINS + value: 100000000000000ujuno + - name: CHAIN_BIN + value: junod + - name: CHAIN_DIR + value: /root/.juno + - name: CODE_REPO + value: https://github.com/CosmosContracts/juno + - name: DAEMON_HOME + value: /root/.juno + - name: DAEMON_NAME + value: junod + - name: CHAIN_ID + value: juno-2 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.juno + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: juno-2-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.juno/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.juno/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.juno/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.juno/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.juno/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.juno + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-juno-2 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/setup-scripts-configmap.yaml new file mode 100644 index 000000000..46a6198bc --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/juno/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-juno-2 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-juno-2 + app.kubernetes.io/part-of: juno-2 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: juno + starship.io/chain-id: juno-2 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..b68e7e2de --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '3' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/deployment.yaml new file mode 100644 index 000000000..b5f6fc98e --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/deployment.yaml @@ -0,0 +1,132 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4,juno-2 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub,juno + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657,http://localhost:26658 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317,http://localhost:1318 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + - name: registry-juno-2 + mountPath: /chains/juno-2 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 + - name: registry-juno-2 + configMap: + name: registry-juno-2 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/juno-2-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/juno-2-configmap.yaml new file mode 100644 index 000000000..23586e466 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/juno-2-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-juno-2 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-juno-2 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "juno", + "status": "live", + "network_type": "devnet", + "chain_id": "juno-2", + "pretty_name": "Juno Devnet", + "bech32_prefix": "juno", + "daemon_name": "junod", + "node_home": "/root/.juno", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "ujuno", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ujuno" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/CosmosContracts/juno", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "juno", + "assets": [ + { + "base": "ujuno", + "description": "The native token of JUNO Chain", + "name": "Juno", + "display": "juno", + "symbol": "JUNO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg" + }, + "denom_units": [ + { + "denom": "ujuno", + "exponent": 0 + }, + { + "denom": "juno", + "exponent": 6 + } + ], + "coingecko_id": "juno-network" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-configmap.yaml new file mode 100644 index 000000000..6416d8629 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-juno-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-juno-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "juno-2" + type = "CosmosSdk" + key_name = "juno-2" + + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "juno" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "ujuno" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "juno-2" + type = "CosmosSdk" + key_name = "juno-2-cli" + + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "juno" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "ujuno" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-service.yaml new file mode 100644 index 000000000..cf5623caf --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-juno-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-juno-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-juno-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-statefulset.yaml new file mode 100644 index 000000000..bc998cb58 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-juno-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-juno-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-juno-cosmos +spec: + serviceName: hermes-juno-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-juno-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-juno-cosmos + app.kubernetes.io/rawname: juno-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for juno-2..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name juno-2 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="ujuno" + RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for juno-2-cli..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name juno-2-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain juno-2 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-juno-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-configmap.yaml new file mode 100644 index 000000000..2fcda86a9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1-cli" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-service.yaml new file mode 100644 index 000000000..1e7de0ebb --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-osmos-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-statefulset.yaml new file mode 100644 index 000000000..c249bf90b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +spec: + serviceName: hermes-osmos-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmos-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmos-cosmos + app.kubernetes.io/rawname: osmos-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for osmosis-1..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name osmosis-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uosmo" + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-osmos-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-configmap.yaml new file mode 100644 index 000000000..d87c61c49 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-osmosis-juno + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmosis-juno +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "juno-2" + type = "CosmosSdk" + key_name = "juno-2" + + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "juno" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "ujuno" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1-cli" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "juno-2" + type = "CosmosSdk" + key_name = "juno-2-cli" + + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "juno" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "ujuno" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-service.yaml new file mode 100644 index 000000000..0106f47c4 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-osmosis-juno + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmosis-juno +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-osmosis-juno diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-statefulset.yaml new file mode 100644 index 000000000..9f8636ba2 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-relayer/relayer/hermes-osmosis-juno-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-osmosis-juno + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmosis-juno +spec: + serviceName: hermes-osmosis-juno + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmosis-juno + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmosis-juno + app.kubernetes.io/rawname: osmosis-juno + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for osmosis-1..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name osmosis-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uosmo" + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for juno-2..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name juno-2 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="ujuno" + RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for juno-2-cli..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name juno-2-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain juno-2 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-osmosis-juno + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..a98cc9599 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '2' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: osmosisd + - name: FAUCET_CHAIN_ID + value: osmosis-1 + - name: COINS + value: 100000000000000uosmo,100000000000000uion + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 200M + requests: + cpu: '0.1' + memory: 200M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/validator-service.yaml new file mode 100644 index 000000000..4269dc589 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: osmosis-1-service + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/validator-statefulset.yaml new file mode 100644 index 000000000..c13867027 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/osmosis/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.4' + memory: 1Gi + requests: + cpu: '0.2' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/deployment.yaml new file mode 100644 index 000000000..64508445c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator-starship-faucet/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..01b5b30ba --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.3' + memory: 600M + requests: + cpu: '0.3' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.3' + memory: 600M + requests: + cpu: '0.3' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.3' + memory: 600M + requests: + cpu: '0.3' + memory: 600M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.3' + memory: 600M + requests: + cpu: '0.3' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '2' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: osmosisd + - name: FAUCET_CHAIN_ID + value: osmosis-1 + - name: COINS + value: 100000000000000uosmo,100000000000000uion + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 200M + requests: + cpu: '0.1' + memory: 200M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/validator-service.yaml new file mode 100644 index 000000000..4269dc589 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: osmosis-1-service + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/validator-statefulset.yaml new file mode 100644 index 000000000..07c334d71 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/osmosis/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.3' + memory: 600M + requests: + cpu: '0.3' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.3' + memory: 600M + requests: + cpu: '0.3' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.3' + memory: 600M + requests: + cpu: '0.3' + memory: 600M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/deployment.yaml new file mode 100644 index 000000000..64508445c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/multi-validator/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..42fe7ad06 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '2' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/genesis-service.yaml new file mode 100644 index 000000000..7a3d9fc86 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: neutron-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: neutron-1-genesis + app.kubernetes.io/type: neutron-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: neutron + starship.io/chain-id: neutron-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: neutron-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/genesis-statefulset.yaml new file mode 100644 index 000000000..32350bf6b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/genesis-statefulset.yaml @@ -0,0 +1,404 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: neutron-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: neutron-1 + app.kubernetes.io/id: neutron-1 + app.kubernetes.io/name: neutron-1-genesis + app.kubernetes.io/type: neutron-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: neutron +spec: + serviceName: neutron-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: neutron-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: neutron-1 + app.kubernetes.io/name: neutron-1-genesis + app.kubernetes.io/rawname: neutron-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/neutron:v3.0.5 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: untrn + - name: COINS + value: 100000000000000untrn + - name: CHAIN_BIN + value: neutrond + - name: CHAIN_DIR + value: /root/.neutrond + - name: CODE_REPO + value: https://github.com/neutron-org/neutron + - name: DAEMON_HOME + value: /root/.neutrond + - name: DAEMON_NAME + value: neutrond + - name: CHAIN_ID + value: neutron-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '2' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/neutron:v3.0.5 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: untrn + - name: COINS + value: 100000000000000untrn + - name: CHAIN_BIN + value: neutrond + - name: CHAIN_DIR + value: /root/.neutrond + - name: CODE_REPO + value: https://github.com/neutron-org/neutron + - name: DAEMON_HOME + value: /root/.neutrond + - name: DAEMON_NAME + value: neutrond + - name: CHAIN_ID + value: neutron-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-ics + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: untrn + - name: COINS + value: 100000000000000untrn + - name: CHAIN_BIN + value: neutrond + - name: CHAIN_DIR + value: /root/.neutrond + - name: CODE_REPO + value: https://github.com/neutron-org/neutron + - name: DAEMON_HOME + value: /root/.neutrond + - name: DAEMON_NAME + value: neutrond + - name: CHAIN_ID + value: neutron-1 + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + export + + echo "Fetching priv keys from provider exposer" + curl -s http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8081/priv_keys | jq > $CHAIN_DIR/config/provider_priv_validator_key.json + cat $CHAIN_DIR/config/provider_priv_validator_key.json + + echo "Replace provider priv validator key with provider keys" + mv $CHAIN_DIR/config/priv_validator_key.json $CHAIN_DIR/config/previous_priv_validator_key.json + mv $CHAIN_DIR/config/provider_priv_validator_key.json $CHAIN_DIR/config/priv_validator_key.json + + echo "Create consumer addition proposal" + DENOM=uatom \ + CHAIN_ID=cosmoshub-4 \ + CHAIN_BIN=gaiad \ + NODE_URL=http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657 \ + PROPOSAL_FILE=/proposal/proposal.json \ + bash -e /scripts/create-ics.sh + + echo "create ccv state file" + gaiad query provider consumer-genesis neutron-1 \ + --node http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657 \ + -o json > $CHAIN_DIR/config/ccv-state.json + cat $CHAIN_DIR/config/ccv-state.json | jq + + echo "Update genesis file with ccv state" + jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/ccv-state.json > $CHAIN_DIR/config/genesis-ccv.json + mv $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/genesis-no-ccv.json + mv $CHAIN_DIR/config/genesis-ccv.json $CHAIN_DIR/config/genesis.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /proposal + name: proposal + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/neutron:v3.0.5 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: untrn + - name: COINS + value: 100000000000000untrn + - name: CHAIN_BIN + value: neutrond + - name: CHAIN_DIR + value: /root/.neutrond + - name: CODE_REPO + value: https://github.com/neutron-org/neutron + - name: DAEMON_HOME + value: /root/.neutrond + - name: DAEMON_NAME + value: neutrond + - name: CHAIN_ID + value: neutron-1 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: neutron-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.neutrond/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.neutrond/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.neutrond/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.neutrond/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.neutrond/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-neutron-1 + - name: proposal + configMap: + name: consumer-proposal-neutron-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/ics-proposal-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/ics-proposal-configmap.yaml new file mode 100644 index 000000000..aaeca651e --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/ics-proposal-configmap.yaml @@ -0,0 +1,41 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: consumer-proposal-neutron-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: neutron + app.kubernetes.io/part-of: neutron-1 + app.kubernetes.io/role: ics-proposal + starship.io/chain-name: neutron + starship.io/chain-id: neutron-1 +data: + proposal.json: |- + { + "title": "Add neutron consumer chain", + "summary": "Add neutron consumer chain with id neutron-1", + "chain_id": "neutron-1", + "initial_height": { + "revision_height": 1, + "revision_number": 1 + }, + "genesis_hash": "d86d756e10118e66e6805e9cc476949da2e750098fcc7634fd0cc77f57a0b2b0", + "binary_hash": "376cdbd3a222a3d5c730c9637454cd4dd925e2f9e2e0d0f3702fc922928583f1", + "spawn_time": "2023-02-28T20:40:00.000000Z", + "unbonding_period": 294000000000, + "ccv_timeout_period": 259920000000, + "transfer_timeout_period": 18000000000, + "consumer_redistribution_fraction": "0.75", + "blocks_per_distribution_transmission": 10, + "historical_entries": 100, + "distribution_transmission_channel": "", + "top_N": 95, + "validators_power_cap": 0, + "validator_set_cap": 0, + "allowlist": [], + "denylist": [], + "deposit": "10000uatom" + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/setup-scripts-configmap.yaml new file mode 100644 index 000000000..335df88f2 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/neutron/setup-scripts-configmap.yaml @@ -0,0 +1,1284 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-neutron-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-neutron-1 + app.kubernetes.io/part-of: neutron-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: neutron + starship.io/chain-id: neutron-1 +data: + createGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=untrn}" + STAKEDENOM=${DENOM:-untrn} + COINS="${COINS:=100000000000000000untrn}" + CHAIN_ID="${CHAIN_ID:=neutron-1}" + BINARY="${CHAIN_BIN:=neutrond}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.neutrond}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + BRANCH="${BRANCH:=v3.0.5}" + + FAUCET_ENABLED="${FAUCET_ENABLED:=true}" + NUM_VALIDATORS="${NUM_VALIDATORS:=1}" + NUM_RELAYERS="${NUM_RELAYERS:=0}" + + GENESIS_PATH="$CHAIN_DIR/config/genesis.json" + + CONTRACTS_BINARIES_DIR=${CONTRACTS_BINARIES_DIR:-./contracts} + THIRD_PARTY_CONTRACTS_DIR=${THIRD_PARTY_CONTRACTS_DIR:-./contracts_thirdparty} + + set -euxo pipefail + + mkdir -p $CONTRACTS_BINARIES_DIR $THIRD_PARTY_CONTRACTS_DIR + + function download_contract() { + CONTRACT_NAME="$1" # / + CONTRACT_URI=${CONTRACT_NAME#"./"} + curl https://github.com/neutron-org/neutron/raw/$BRANCH/$CONTRACT_URI -L -o $CONTRACT_NAME + } + + $BINARY init $CHAIN_ID --chain-id $CHAIN_ID + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --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 + # Add relayer key and delegate tokens + RELAYER_KEY_NAME="$(jq -r ".relayers[$i].name" $KEYS_CONFIG)" + echo "Adding relayer key.... $RELAYER_KEY_NAME" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $BINARY keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + # Add test addresses, admin address + echo "Adding key.... demowallet1" + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet1 --index 1 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet1 --keyring-backend="test") $COINS --keyring-backend="test" + # Add test addresses, second multisig address + echo "Adding key.... demowallet2" + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet2 --index 2 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet2 --keyring-backend="test") $COINS --keyring-backend="test" + # Add test addresses, second multisig address + echo "Adding key.... demowallet2" + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet3 --index 3 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet3 --keyring-backend="test") $COINS --keyring-backend="test" + + echo "Update genesis.json file with updated local params" + sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" $CHAIN_DIR/config/genesis.json + + sed -i -e "s/\"denom\": \"stake\",/\"denom\": \"$DENOM\",/g" "$GENESIS_PATH" + sed -i -e "s/\"mint_denom\": \"stake\",/\"mint_denom\": \"$DENOM\",/g" "$GENESIS_PATH" + sed -i -e "s/\"bond_denom\": \"stake\"/\"bond_denom\": \"$DENOM\"/g" "$GENESIS_PATH" + + # IMPORTANT! minimum_gas_prices should always contain at least one record, otherwise the chain will not start or halt + MIN_GAS_PRICES_DEFAULT='[{"denom":"untrn","amount":"0"}]' + MIN_GAS_PRICES=${MIN_GAS_PRICES:-"$MIN_GAS_PRICES_DEFAULT"} + + BYPASS_MIN_FEE_MSG_TYPES_DEFAULT='["/ibc.core.channel.v1.Msg/RecvPacket", "/ibc.core.channel.v1.Msg/Acknowledgement", "/ibc.core.client.v1.Msg/UpdateClient"]' + BYPASS_MIN_FEE_MSG_TYPES=${BYPASS_MIN_FEE_MSG_TYPES:-"$BYPASS_MIN_FEE_MSG_TYPES_DEFAULT"} + + MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE_DEFAULT=1000000 + MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE=${MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE:-"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE_DEFAULT"} + + ADMIN_ADDRESS=$($BINARY keys show demowallet1 -a --keyring-backend="test") + SECOND_MULTISIG_ADDRESS=$($BINARY keys show demowallet2 -a --keyring-backend="test") + + ls $CHAIN_DIR/config + + # MAIN_DAO + DAO_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_core.wasm + download_contract $DAO_CONTRACT + PRE_PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_single.wasm + download_contract $PRE_PROPOSAL_CONTRACT + PRE_PROPOSAL_MULTIPLE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_multiple.wasm + download_contract $PRE_PROPOSAL_MULTIPLE_CONTRACT + PRE_PROPOSAL_OVERRULE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_overrule.wasm + download_contract $PRE_PROPOSAL_OVERRULE_CONTRACT + PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_proposal_single.wasm + download_contract $PROPOSAL_CONTRACT + PROPOSAL_MULTIPLE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_proposal_multiple.wasm + download_contract $PROPOSAL_MULTIPLE_CONTRACT + VOTING_REGISTRY_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_voting_registry.wasm + download_contract $VOTING_REGISTRY_CONTRACT + # VAULTS + NEUTRON_VAULT_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_vault.wasm + download_contract $NEUTRON_VAULT_CONTRACT + NEUTRON_INVESTORS_VAULT=$CONTRACTS_BINARIES_DIR/investors_vesting_vault.wasm + download_contract $NEUTRON_INVESTORS_VAULT + # VESTING + NEUTRON_VESTING_INVESTORS=$CONTRACTS_BINARIES_DIR/vesting_investors.wasm + download_contract $NEUTRON_VESTING_INVESTORS + # RESERVE + RESERVE_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_reserve.wasm + download_contract $RESERVE_CONTRACT + DISTRIBUTION_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_distribution.wasm + download_contract $DISTRIBUTION_CONTRACT + # SUBDAOS + SUBDAO_CORE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_core.wasm + download_contract $SUBDAO_CORE_CONTRACT + SUBDAO_TIMELOCK_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_timelock_single.wasm + download_contract $SUBDAO_TIMELOCK_CONTRACT + SUBDAO_PRE_PROPOSE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_pre_propose_single.wasm + download_contract $SUBDAO_PRE_PROPOSE_CONTRACT + SUBDAO_PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_proposal_single.wasm + download_contract $SUBDAO_PROPOSAL_CONTRACT + CW4_VOTING_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_voting.wasm + download_contract $CW4_VOTING_CONTRACT + CW4_GROUP_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_group.wasm + download_contract $CW4_GROUP_CONTRACT + + echo "Add consumer section..." + $BINARY add-consumer-section --home "$CHAIN_DIR" + ### PARAMETERS SECTION + + ## slashing params + SLASHING_SIGNED_BLOCKS_WINDOW=140000 + SLASHING_MIN_SIGNED=0.050000000000000000 + SLASHING_FRACTION_DOUBLE_SIGN=0.010000000000000000 + SLASHING_FRACTION_DOWNTIME=0.000100000000000000 + + ##pre propose single parameters + PRE_PROPOSAL_SINGLE_AMOUNT=1000 + PRE_PROPOSAL_SINGLE_REFUND_POLICY="only_passed" + PRE_PROPOSAL_SINGLE_OPEN_PROPOSAL_SUBMISSION=false + + ## proposal singe params + PROPOSAL_ALLOW_REVOTING=false # should be true for non-testing env + PROPOSAL_SINGLE_ONLY_MEMBERS_EXECUTE=false + PROPOSAL_SINGLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in production + PROPOSAL_SINGLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false + PROPOSAL_SINGLE_QUORUM=0.05 # quorum to consider proposal's result viable [float] < 1 + PROPOSAL_SINGLE_THRESHOLD=0.5 # % of votes should vote for the proposal to pass [float] <1 + PROPOSAL_SINGLE_LABEL="neutron.proposals.single" + PRE_PROPOSAL_SINGLE_LABEL="neutron.proposals.single.pre_propose" + + ## propose multiple params + PROPOSAL_MULTIPLE_ALLOW_REVOTING=false # should be true for non-testing env + PROPOSAL_MULTIPLE_ONLY_MEMBERS_EXECUTE=false + PROPOSAL_MULTIPLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in production + PROPOSAL_MULTIPLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false + PROPOSAL_MULTIPLE_QUORUM=0.05 # quorum to consider proposal's result viable [float] < 1 + PROPOSAL_MULTIPLE_LABEL="neutron.proposals.multiple" + PRE_PROPOSAL_MULTIPLE_LABEL="neutron.proposals.multiple.pre_propose" + + ## Propose overrule params + PROPOSAL_OVERRULE_ALLOW_REVOTING=false + PROPOSAL_OVERRULE_ONLY_MEMBERS_EXECUTE=false + PROPOSAL_OVERRULE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 3 days in production + PROPOSAL_OVERRULE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false + PROPOSAL_OVERRULE_THRESHOLD=0.005 # around 10 times lower than for regular proposals + PROPOSAL_OVERRULE_LABEL="neutron.proposals.overrule" + PRE_PROPOSE_OVERRULE_LABEL="neutron.proposals.overrule.pre_propose" + + ## Voting registry + VOTING_REGISTRY_LABEL="neutron.voting" + + ## DAO + DAO_NAME="Neutron DAO" + DAO_DESCRIPTION="Neutron DAO is a DAO DAO-based governance of Neutron chain" + DAO_CORE_LABEL="neutron.core" + + ## Neutron vault + NEUTRON_VAULT_NAME="Neutron Vault" + NEUTRON_VAULT_DESCRIPTION="Vault to put NTRN tokens to get voting power" + NEUTRON_VAULT_LABEL="neutron.voting.vaults.neutron" + NEUTRON_INVESTORS_VAULT_NAME="Neutron Investors Vault" + NEUTRON_INVESTORS_VAULT_DESCRIPTION="Vault sourcing voting power form investors vesting" + NEUTRON_INVESTORS_VAULT_LABEL="neutron.voting.vaults.investors" + + # VESTING (for tests purposes) + NEUTRON_VESTING_INVESTORS_LABEL="neutron.vesting.investors" + + ## Reserve + RESERVE_DISTRIBUTION_RATE=0 + RESERVE_MIN_PERIOD=10 + RESERVE_VESTING_DENOMINATOR=1 + RESERVE_LABEL="reserve" + + DISTRIBUTION_LABEL="distribution" + + ## Grants subdao + GRANTS_SUBDAO_CORE_NAME="Grants SubDAO" + GRANTS_SUBDAO_CORE_DESCRIPTION="SubDAO to distribute grants to projects" + GRANTS_SUBDAO_CORE_LABEL="neutron.subdaos.grants.core" + GRANTS_SUBDAO_PROPOSAL_LABEL="neutron.subdaos.grants.proposals.single" + GRANTS_SUBDAO_PRE_PROPOSE_LABEL="neutron.subdaos.grants.proposals.single.pre_propose" + GRANTS_SUBDAO_VOTING_MODULE_LABEL="neutron.subdaos.grants.voting" + + ## Timelock + GRANTS_SUBDAO_TIMELOCK_LABEL="neutron.subdaos.grants.proposals.single.pre_propose.timelock" + + ## Security subdao + SECURITY_SUBDAO_CORE_NAME="Security SubDAO" + SECURITY_SUBDAO_CORE_DESCRIPTION="SubDAO with power to pause specific Neutron DAO modules" + SECURITY_SUBDAO_CORE_LABEL="neutron.subdaos.security.core" + SECURITY_SUBDAO_PROPOSAL_LABEL="neutron.subdaos.security.proposals.single" + SECURITY_SUBDAO_PRE_PROPOSE_LABEL="neutron.subdaos.security.proposals.single.pre_propose" + SECURITY_SUBDAO_VOTE_LABEL="neutron.subdaos.security.voting" + + echo "Initializing dao contract in genesis..." + + function store_binary() { + CONTRACT_BINARY_PATH=$1 + $BINARY add-wasm-message store "$CONTRACT_BINARY_PATH" \ + --output json --run-as "${ADMIN_ADDRESS}" --keyring-backend=test --home "$CHAIN_DIR" + BINARY_ID=$(jq -r "[.app_state.wasm.gen_msgs[] | select(.store_code != null)] | length" "$CHAIN_DIR/config/genesis.json") + echo "$BINARY_ID" + } + + # Upload the dao contracts + # MAIN_DAO + DAO_CONTRACT_BINARY_ID=$(store_binary "$DAO_CONTRACT") + PRE_PROPOSAL_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_CONTRACT") + PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_MULTIPLE_CONTRACT") + PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_OVERRULE_CONTRACT") + PROPOSAL_CONTRACT_BINARY_ID=$(store_binary "$PROPOSAL_CONTRACT") + PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary "$PROPOSAL_MULTIPLE_CONTRACT") + VOTING_REGISTRY_CONTRACT_BINARY_ID=$(store_binary "$VOTING_REGISTRY_CONTRACT") + # VAULTS + NEUTRON_VAULT_CONTRACT_BINARY_ID=$(store_binary "$NEUTRON_VAULT_CONTRACT") + NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID=$(store_binary "$NEUTRON_INVESTORS_VAULT") + # VESTING + NEUTRON_VESTING_INVESTORS_BINARY_ID=$(store_binary "$NEUTRON_VESTING_INVESTORS") + # RESERVE + DISTRIBUTION_CONTRACT_BINARY_ID=$(store_binary "$DISTRIBUTION_CONTRACT") + RESERVE_CONTRACT_BINARY_ID=$(store_binary "$RESERVE_CONTRACT") + # SUBDAOS + SUBDAO_CORE_BINARY_ID=$(store_binary "$SUBDAO_CORE_CONTRACT") + SUBDAO_TIMELOCK_BINARY_ID=$(store_binary "$SUBDAO_TIMELOCK_CONTRACT") + SUBDAO_PRE_PROPOSE_BINARY_ID=$(store_binary "$SUBDAO_PRE_PROPOSE_CONTRACT") + SUBDAO_PROPOSAL_BINARY_ID=$(store_binary "$SUBDAO_PROPOSAL_CONTRACT") + CW4_VOTING_CONTRACT_BINARY_ID=$(store_binary "$CW4_VOTING_CONTRACT") + CW4_GROUP_CONTRACT_BINARY_ID=$(store_binary "$CW4_GROUP_CONTRACT") + + # WARNING! + # The following code is needed to pre-generate the contract addresses + # Those addresses depend on the ORDER OF CONTRACTS INITIALIZATION + # Thus, this code section depends a lot on the order and content of the instantiate-contract commands at the end script + # It also depends on the implicitly initialized contracts (e.g. DAO core instantiation also instantiate proposals and stuff) + # If you're to do any changes, please do it consistently in both sections + # If you're to do add any implicitly initialized contracts in init messages, please reflect changes here + + function genaddr() { + CODE_ID=$1 + CONTRACT_ADDRESS=$($BINARY debug generate-contract-address "$INSTANCE_ID_COUNTER" "$CODE_ID") + echo "$CONTRACT_ADDRESS" + } + + INSTANCE_ID_COUNTER=1 + + # VAULTS + NEUTRON_VAULT_CONTRACT_ADDRESS=$(genaddr "$NEUTRON_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS=$(genaddr "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + + # VESTING + NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES=$(genaddr "$NEUTRON_VESTING_INVESTORS_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + + # MAIN_DAO + DAO_CONTRACT_ADDRESS=$(genaddr "$DAO_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + VOTING_REGISTRY_CONTRACT_ADDRESS=$(genaddr "$VOTING_REGISTRY_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_SINGLE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + + # RESERVE + RESERVE_CONTRACT_ADDRESS=$(genaddr "$RESERVE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + DISTRIBUTION_CONTRACT_ADDRESS=$(genaddr "$DISTRIBUTION_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + # SUBDAOS + SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PRE_PROPOSE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_TIMELOCK_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_TIMELOCK_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + + function check_json() { + MSG=$1 + if ! jq -e . >/dev/null 2>&1 <<<"$MSG"; then + echo "Failed to parse JSON for $MSG" >&2 + exit 1 + fi + } + + function json_to_base64() { + MSG=$1 + check_json "$MSG" + echo "$MSG" | base64 | tr -d "\n" + } + + # PRE_PROPOSE_INIT_MSG will be put into the PROPOSAL_SINGLE_INIT_MSG and PROPOSAL_MULTIPLE_INIT_MSG + PRE_PROPOSE_INIT_MSG='{ + "deposit_info":{ + "denom":{ + "token":{ + "denom":{ + "native":"'"$STAKEDENOM"'" + } + } + }, + "amount": "'"$PRE_PROPOSAL_SINGLE_AMOUNT"'", + "refund_policy":"'"$PRE_PROPOSAL_SINGLE_REFUND_POLICY"'" + }, + "open_proposal_submission": '"$PRE_PROPOSAL_SINGLE_OPEN_PROPOSAL_SUBMISSION"' + }' + PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$PRE_PROPOSE_INIT_MSG") + + # -------------------- PROPOSE-SINGLE { PRE-PROPOSE } -------------------- + + PROPOSAL_SINGLE_INIT_MSG='{ + "allow_revoting":'"$PROPOSAL_ALLOW_REVOTING"', + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "core_module": {} + }, + "code_id": '"$PRE_PROPOSAL_CONTRACT_BINARY_ID"', + "msg": "'"$PRE_PROPOSE_INIT_MSG_BASE64"'", + "label": "'"$PRE_PROPOSAL_SINGLE_LABEL"'" + } + } + }, + "only_members_execute":'"$PROPOSAL_SINGLE_ONLY_MEMBERS_EXECUTE"', + "max_voting_period":{ + "time":'"$PROPOSAL_SINGLE_ONLY_MAX_VOTING_PERIOD"' + }, + "close_proposal_on_execution_failure":'"$PROPOSAL_SINGLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE"', + "threshold":{ + "threshold_quorum":{ + "quorum":{ + "percent":"'"$PROPOSAL_SINGLE_QUORUM"'" + }, + "threshold":{ + "percent":"'"$PROPOSAL_SINGLE_THRESHOLD"'" + } + } + } + }' + PROPOSAL_SINGLE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_SINGLE_INIT_MSG") + + # -------------------- PROPOSE-MULTIPLE { PRE-PROPOSE } -------------------- + + PROPOSAL_MULTIPLE_INIT_MSG='{ + "allow_revoting":'"$PROPOSAL_MULTIPLE_ALLOW_REVOTING"', + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "core_module": {} + }, + "code_id": '"$PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID"', + "msg": "'"$PRE_PROPOSE_INIT_MSG_BASE64"'", + "label": "'"$PRE_PROPOSAL_MULTIPLE_LABEL"'" + } + } + }, + "only_members_execute":'"$PROPOSAL_MULTIPLE_ONLY_MEMBERS_EXECUTE"', + "max_voting_period":{ + "time":'"$PROPOSAL_MULTIPLE_ONLY_MAX_VOTING_PERIOD"' + }, + "close_proposal_on_execution_failure": '"$PROPOSAL_MULTIPLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE"', + "voting_strategy":{ + "single_choice": { + "quorum": { + "percent": "'"$PROPOSAL_MULTIPLE_QUORUM"'" + } + } + } + }' + PROPOSAL_MULTIPLE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_MULTIPLE_INIT_MSG") + + # PRE_PROPOSE_OVERRULE_INIT_MSG will be put into the PROPOSAL_OVERRULE_INIT_MSG + PRE_PROPOSE_OVERRULE_INIT_MSG='{}' + PRE_PROPOSE_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 "$PRE_PROPOSE_OVERRULE_INIT_MSG") + + + # -------------------- PROPOSE-OVERRULE { PRE-PROPOSE-OVERRULE } -------------------- + + PROPOSAL_OVERRULE_INIT_MSG='{ + "allow_revoting":'"$PROPOSAL_OVERRULE_ALLOW_REVOTING"', + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "core_module": {} + }, + "code_id": '"$PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID"', + "msg": "'"$PRE_PROPOSE_OVERRULE_INIT_MSG_BASE64"'", + "label": "'"$PRE_PROPOSE_OVERRULE_LABEL"'" + } + } + }, + "only_members_execute": '"$PROPOSAL_OVERRULE_ONLY_MEMBERS_EXECUTE"', + "max_voting_period":{ + "time": '"$PROPOSAL_OVERRULE_ONLY_MAX_VOTING_PERIOD"' + }, + "close_proposal_on_execution_failure": '"$PROPOSAL_OVERRULE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE"', + "threshold":{ + "absolute_percentage":{ + "percentage":{ + "percent": "'"$PROPOSAL_OVERRULE_THRESHOLD"'" + } + } + } + }' + PROPOSAL_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_OVERRULE_INIT_MSG") + + VOTING_REGISTRY_INIT_MSG='{ + "owner": "'"$DAO_CONTRACT_ADDRESS"'", + "voting_vaults": [ + "'"$NEUTRON_VAULT_CONTRACT_ADDRESS"'", + "'"$NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS"'" + ] + }' + VOTING_REGISTRY_INIT_MSG_BASE64=$(json_to_base64 "$VOTING_REGISTRY_INIT_MSG") + + DAO_INIT='{ + "description": "'"$DAO_DESCRIPTION"'", + "name": "'"$DAO_NAME"'", + "proposal_modules_instantiate_info": [ + { + "admin": { + "core_module": {} + }, + "code_id": '"$PROPOSAL_CONTRACT_BINARY_ID"', + "label": "'"$PROPOSAL_SINGLE_LABEL"'", + "msg": "'"$PROPOSAL_SINGLE_INIT_MSG_BASE64"'" + }, + { + "admin": { + "core_module": {} + }, + "code_id": '"$PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID"', + "label": "'"$PROPOSAL_MULTIPLE_LABEL"'", + "msg": "'"$PROPOSAL_MULTIPLE_INIT_MSG_BASE64"'" + }, + { + "admin": { + "core_module": {} + }, + "code_id": '"$PROPOSAL_CONTRACT_BINARY_ID"', + "label": "'"$PROPOSAL_OVERRULE_LABEL"'", + "msg": "'"$PROPOSAL_OVERRULE_INIT_MSG_BASE64"'" + } + ], + "voting_registry_module_instantiate_info": { + "admin": { + "core_module": {} + }, + "code_id": '"$VOTING_REGISTRY_CONTRACT_BINARY_ID"', + "label": "'"$VOTING_REGISTRY_LABEL"'", + "msg": "'"$VOTING_REGISTRY_INIT_MSG_BASE64"'" + } + }' + + # RESERVE + RESERVE_INIT='{ + "main_dao_address": "'"$DAO_CONTRACT_ADDRESS"'", + "security_dao_address": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'", + "denom": "'"$STAKEDENOM"'", + "distribution_rate": "'"$RESERVE_DISTRIBUTION_RATE"'", + "min_period": '"$RESERVE_MIN_PERIOD"', + "distribution_contract": "'"$DISTRIBUTION_CONTRACT_ADDRESS"'", + "treasury_contract": "'"$DAO_CONTRACT_ADDRESS"'", + "vesting_denominator": "'"$RESERVE_VESTING_DENOMINATOR"'" + }' + + DISTRIBUTION_INIT='{ + "main_dao_address": "'"$DAO_CONTRACT_ADDRESS"'", + "security_dao_address": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'", + "denom": "'"$STAKEDENOM"'" + }' + + # VAULTS + + NEUTRON_VAULT_INIT='{ + "owner": "'"$DAO_CONTRACT_ADDRESS"'", + "name": "'"$NEUTRON_VAULT_NAME"'", + "denom": "'"$STAKEDENOM"'", + "description": "'"$NEUTRON_VAULT_DESCRIPTION"'" + }' + + NEUTRON_INVESTORS_VAULT_INIT='{ + "vesting_contract_address": "'"$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES"'", + "owner": "'"$DAO_CONTRACT_ADDRESS"'", + "description": "'"$NEUTRON_INVESTORS_VAULT_DESCRIPTION"'", + "name": "'"$NEUTRON_INVESTORS_VAULT_NAME"'" + }' + + # VESTING + NEUTRON_VESTING_INVESTORS_INIT='{ + "owner": "'"$ADMIN_ADDRESS"'", + "token_info_manager": "'"$ADMIN_ADDRESS"'" + }' + + # CW4 MODULES FOR SUBDAOS + + CW4_VOTE_INIT_MSG='{ + "cw4_group_code_id": '"$CW4_GROUP_CONTRACT_BINARY_ID"', + "initial_members": [ + { + "addr": "'"$ADMIN_ADDRESS"'", + "weight": 1 + }, + { + "addr": "'"$SECOND_MULTISIG_ADDRESS"'", + "weight": 1 + } + ] + }' + CW4_VOTE_INIT_MSG_BASE64=$(json_to_base64 "$CW4_VOTE_INIT_MSG") + + # SECURITY_SUBDAO + + # SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG will be put into the SECURITY_SUBDAO_PROPOSAL_INIT_MSG + SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG='{ + "open_proposal_submission": false + }' + SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG") + + SECURITY_SUBDAO_PROPOSAL_INIT_MSG='{ + "allow_revoting": false, + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$PRE_PROPOSAL_CONTRACT_BINARY_ID"', + "msg": "'"$SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64"'", + "label": "'"$SECURITY_SUBDAO_PRE_PROPOSE_LABEL"'" + } + } + }, + "only_members_execute":false, + "max_voting_period":{ + "height": 1000000000000 + }, + "close_proposal_on_execution_failure":false, + "threshold":{ + "absolute_count":{ + "threshold": "1" + } + } + }' + SECURITY_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 "$SECURITY_SUBDAO_PROPOSAL_INIT_MSG") + + SECURITY_SUBDAO_CORE_INIT_MSG='{ + "name": "'"$SECURITY_SUBDAO_CORE_NAME"'", + "description": "'"$SECURITY_SUBDAO_CORE_DESCRIPTION"'", + "vote_module_instantiate_info": { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$CW4_VOTING_CONTRACT_BINARY_ID"', + "label": "'"$SECURITY_SUBDAO_VOTE_LABEL"'", + "msg": "'"$CW4_VOTE_INIT_MSG_BASE64"'" + }, + "proposal_modules_instantiate_info": [ + { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$SUBDAO_PROPOSAL_BINARY_ID"', + "label": "'"$SECURITY_SUBDAO_PROPOSAL_LABEL"'", + "msg": "'"$SECURITY_SUBDAO_PROPOSAL_INIT_MSG_BASE64"'" + } + ], + "main_dao": "'"$DAO_CONTRACT_ADDRESS"'", + "security_dao": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" + }' + + # GRANTS_SUBDAO + + GRANTS_SUBDAO_TIMELOCK_INIT_MSG='{ + "overrule_pre_propose": "'"$PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS"'" + }' + GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_TIMELOCK_INIT_MSG") + + GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG='{ + "open_proposal_submission": false, + "timelock_module_instantiate_info": { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$SUBDAO_TIMELOCK_BINARY_ID"', + "label": "'"$GRANTS_SUBDAO_TIMELOCK_LABEL"'", + "msg": "'"$GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64"'" + } + }' + GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG") + + GRANTS_SUBDAO_PROPOSAL_INIT_MSG='{ + "allow_revoting": false, + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$SUBDAO_PRE_PROPOSE_BINARY_ID"', + "msg": "'"$GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64"'", + "label": "'"$GRANTS_SUBDAO_PRE_PROPOSE_LABEL"'" + } + } + }, + "only_members_execute":false, + "max_voting_period":{ + "height": 1000000000000 + }, + "close_proposal_on_execution_failure":false, + "threshold":{ + "absolute_count":{ + "threshold": "2" + } + } + }' + GRANTS_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_PROPOSAL_INIT_MSG") + + GRANTS_SUBDAO_CORE_INIT_MSG='{ + "name": "'"$GRANTS_SUBDAO_CORE_NAME"'", + "description": "'"$GRANTS_SUBDAO_CORE_DESCRIPTION"'", + "vote_module_instantiate_info": { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$CW4_VOTING_CONTRACT_BINARY_ID"', + "label": "'"$GRANTS_SUBDAO_VOTING_MODULE_LABEL"'", + "msg": "'"$CW4_VOTE_INIT_MSG_BASE64"'" + }, + "proposal_modules_instantiate_info": [ + { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$SUBDAO_PROPOSAL_BINARY_ID"', + "label": "'"$GRANTS_SUBDAO_PROPOSAL_LABEL"'", + "msg": "'"$GRANTS_SUBDAO_PROPOSAL_INIT_MSG_BASE64"'" + } + ], + "main_dao": "'"$DAO_CONTRACT_ADDRESS"'", + "security_dao": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" + }' + + echo "Instantiate contracts" + + function init_contract() { + BINARY_ID=$1 + INIT_MSG=$2 + LABEL=$3 + check_json "$INIT_MSG" + $BINARY add-wasm-message instantiate-contract "$BINARY_ID" "$INIT_MSG" --label "$LABEL" \ + --run-as "$DAO_CONTRACT_ADDRESS" --admin "$DAO_CONTRACT_ADDRESS" --home "$CHAIN_DIR" + } + + # WARNING! + # The following code is to add contracts instantiations messages to genesis + # It affects the section of predicting contracts addresses at the beginning of the script + # If you're to do any changes, please do it consistently in both sections + init_contract "$NEUTRON_VAULT_CONTRACT_BINARY_ID" "$NEUTRON_VAULT_INIT" "$NEUTRON_VAULT_LABEL" + init_contract "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID" "$NEUTRON_INVESTORS_VAULT_INIT" "$NEUTRON_INVESTORS_VAULT_LABEL" + init_contract "$NEUTRON_VESTING_INVESTORS_BINARY_ID" "$NEUTRON_VESTING_INVESTORS_INIT" "$NEUTRON_VESTING_INVESTORS_LABEL" + init_contract "$DAO_CONTRACT_BINARY_ID" "$DAO_INIT" "$DAO_CORE_LABEL" + init_contract "$RESERVE_CONTRACT_BINARY_ID" "$RESERVE_INIT" "$RESERVE_LABEL" + init_contract "$DISTRIBUTION_CONTRACT_BINARY_ID" "$DISTRIBUTION_INIT" "$DISTRIBUTION_LABEL" + init_contract "$SUBDAO_CORE_BINARY_ID" "$SECURITY_SUBDAO_CORE_INIT_MSG" "$SECURITY_SUBDAO_CORE_LABEL" + init_contract "$SUBDAO_CORE_BINARY_ID" "$GRANTS_SUBDAO_CORE_INIT_MSG" "$GRANTS_SUBDAO_CORE_LABEL" + + ADD_SUBDAOS_MSG='{ + "update_sub_daos": { + "to_add": [ + { + "addr": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" + }, + { + "addr": "'"$GRANTS_SUBDAO_CORE_CONTRACT_ADDRESS"'" + } + ], + "to_remove": [] + } + }' + check_json "$ADD_SUBDAOS_MSG" + + SET_VESTING_TOKEN_MSG='{ + "set_vesting_token": { + "vesting_token": { + "native_token": { + "denom": "'"$STAKEDENOM"'" + } + } + } + }' + + REGISTER_VESTING_ACCOUNTS_MSG='{ + "register_vesting_accounts": { + "vesting_accounts": [ + { + "address": "'"$ADMIN_ADDRESS"'", + "schedules": [ + { + "end_point": { + "amount": "1000", + "time": 1814821200 + }, + "start_point": { + "amount": "0", + "time": 1720213200 + } + } + ] + } + ] + } + }' + + $BINARY add-wasm-message execute "$DAO_CONTRACT_ADDRESS" "$ADD_SUBDAOS_MSG" \ + --run-as "$DAO_CONTRACT_ADDRESS" --home "$CHAIN_DIR" + + $BINARY add-wasm-message execute "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$SET_VESTING_TOKEN_MSG" \ + --run-as "$ADMIN_ADDRESS" --home "$CHAIN_DIR" + + $BINARY add-wasm-message execute "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$REGISTER_VESTING_ACCOUNTS_MSG" \ + --amount 1000untrn --run-as "$ADMIN_ADDRESS" --home "$CHAIN_DIR" + + function set_genesis_param() { + param_name=$1 + param_value=$2 + sed -i -e "s;\"$param_name\":.*;\"$param_name\": $param_value;g" "$GENESIS_PATH" + } + + function set_genesis_param_jq() { + param_path=$1 + param_value=$2 + jq "${param_path} = ${param_value}" > tmp_genesis_file.json < "$GENESIS_PATH" && mv tmp_genesis_file.json "$GENESIS_PATH" + } + + function convert_bech32_base64_esc() { + $BINARY keys parse $1 --output json | jq .bytes | xxd -r -p | base64 | sed -e 's/\//\\\//g' + } + DAO_CONTRACT_ADDRESS_B64=$(convert_bech32_base64_esc "$DAO_CONTRACT_ADDRESS") + echo $DAO_CONTRACT_ADDRESS_B64 + + set_genesis_param admins "[\"$DAO_CONTRACT_ADDRESS\"]" # admin module + set_genesis_param treasury_address "\"$DAO_CONTRACT_ADDRESS\"" # feeburner + set_genesis_param fee_collector_address "\"$DAO_CONTRACT_ADDRESS\"" # tokenfactory + set_genesis_param security_address "\"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS\"," # cron + set_genesis_param limit 5 # cron + #set_genesis_param allow_messages "[\"*\"]" # interchainaccounts + set_genesis_param signed_blocks_window "\"$SLASHING_SIGNED_BLOCKS_WINDOW\"," # slashing + set_genesis_param min_signed_per_window "\"$SLASHING_MIN_SIGNED\"," # slashing + set_genesis_param slash_fraction_double_sign "\"$SLASHING_FRACTION_DOUBLE_SIGN\"," # slashing + set_genesis_param slash_fraction_downtime "\"$SLASHING_FRACTION_DOWNTIME\"" # slashing + set_genesis_param minimum_gas_prices "$MIN_GAS_PRICES," # globalfee + set_genesis_param max_total_bypass_min_fee_msg_gas_usage "\"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE\"" # globalfee + set_genesis_param_jq ".app_state.globalfee.params.bypass_min_fee_msg_types" "$BYPASS_MIN_FEE_MSG_TYPES" # globalfee + set_genesis_param proposer_fee "\"0.25\"" # builder(POB) + set_genesis_param escrow_account_address "\"$DAO_CONTRACT_ADDRESS_B64\"," # builder(POB) + set_genesis_param sudo_call_gas_limit "\"1000000\"" # contractmanager + set_genesis_param max_gas "\"1000000000\"" # consensus_params + + if ! jq -e . "$GENESIS_PATH" >/dev/null 2>&1; then + echo "genesis appears to become incorrect json" >&2 + exit 1 + fi + + echo "DAO $DAO_CONTRACT_ADDRESS" + updateGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + $CHAIN_BIN tendermint show-node-id + updateConfig.sh: | + #!/bin/bash + + STAKEDENOM=${DENOM:-untrn} + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + P2PPORT=${P2PPORT:-26656} + RPCPORT=${RPCPORT:-26657} + RESTPORT=${RESTPORT:-1317} + ROSETTA=${ROSETTA:-8080} + + set -eux + + ls $CHAIN_DIR + + sed -i -e 's/timeout_commit = "5s"/timeout_commit = "1s"/g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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/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/minimum-gas-prices = \"\"/minimum-gas-prices = \"0$STAKEDENOM\"/g" "$CHAIN_DIR/config/app.toml" + sed -i -e 's/enabled = false/enabled = true/g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's/prometheus-retention-time = 0/prometheus-retention-time = 1000/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#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2PPORT"'"#g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPCPORT"'"#g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's#"tcp://localhost:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's#"tcp://0.0.0.0:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's#":8080"#":'"$ROSETTA"'"#g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's#localhost#0.0.0.0#g' "$CHAIN_DIR/config/app.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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/deployment.yaml new file mode 100644 index 000000000..166aeed66 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: neutron-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: neutron,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-neutron-1 + mountPath: /chains/neutron-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-neutron-1 + configMap: + name: registry-neutron-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/neutron-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/neutron-1-configmap.yaml new file mode 100644 index 000000000..56e0447aa --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/neutron-1-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-neutron-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-neutron-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "neutron", + "status": "live", + "network_type": "devnet", + "chain_id": "neutron-1", + "pretty_name": "Neutron Devnet", + "bech32_prefix": "neutron", + "daemon_name": "neutrond", + "node_home": "/root/.neutrond", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "untrn", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "untrn" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/neutron-org/neutron", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "neutron", + "assets": [ + { + "description": "The native token of Neutron chain.", + "denom_units": [ + { + "denom": "untrn", + "exponent": 0 + }, + { + "denom": "ntrn", + "exponent": 6 + } + ], + "base": "untrn", + "name": "Neutron", + "display": "ntrn", + "symbol": "NTRN", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg" + }, + "coingecko_id": "neutron" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-configmap.yaml new file mode 100644 index 000000000..0ae2e9aac --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-neutron-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "neutron-1" + type = "CosmosSdk" + key_name = "neutron-1" + ccv_consumer_chain = true + rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "neutron" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "untrn" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "neutron-1" + type = "CosmosSdk" + key_name = "neutron-1-cli" + ccv_consumer_chain = true + rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "neutron" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "untrn" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-service.yaml new file mode 100644 index 000000000..b934fa2ad --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-neutron-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-neutron-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-statefulset.yaml new file mode 100644 index 000000000..b83d32d49 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/hermes-neutron-cosmos-statefulset.yaml @@ -0,0 +1,300 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-neutron-cosmos +spec: + serviceName: hermes-neutron-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-neutron-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-neutron-cosmos + app.kubernetes.io/rawname: neutron-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for neutron-1..." + hermes keys add \ + --chain neutron-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name neutron-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="untrn" + RLY_ADDR=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for neutron-1-cli..." + hermes keys add \ + --chain neutron-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name neutron-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --a-connection connection-0 \ + --channel-version 1 \ + --order ordered \ + --a-chain neutron-1 \ + --a-port consumer \ + --b-port provider + + hermes create channel \ + --a-connection connection-0 \ + --a-chain neutron-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-neutron-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-configmap.yaml new file mode 100644 index 000000000..04b95afa5 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-configmap.yaml @@ -0,0 +1,50 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: neutron-query-relayer-nqr-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: neutron-query-relayer + app.kubernetes.io/name: neutron-query-relayer-nqr-neutron-cosmos +data: + config.json: |- + { + "relayer": { + "neutron_chain": { + "chain_id": "neutron-1", + "rpc_addr": "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657", + "grpc_addr": "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090", + "websocket_addr": "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", + "account_prefix": "neutron", + "keyring_backend": "test", + "gas_prices": "0.025untrn", + "gas_adjustment": 1.5, + "connection_id": "connection-0", + "debug": false, + "timeout": "10s", + "tx_memo": "neutron-query-relayer" + }, + "target_chain": { + "chain_id": "cosmoshub-4", + "rpc_addr": "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", + "grpc_addr": "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090", + "websocket_addr": "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", + "account_prefix": "cosmos", + "keyring_backend": "test", + "gas_prices": "0.025uatom", + "gas_adjustment": 1.5, + "connection_id": "connection-0", + "debug": false, + "timeout": "10s", + "tx_memo": "neutron-query-relayer" + }, + "queries_file": "/configs/queries.json", + "check_submitted_tx": true, + "storage_path": "./storage", + "log_level": "info" + } + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-service.yaml new file mode 100644 index 000000000..1cc655c39 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-service.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: neutron-query-relayer-nqr-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: neutron-query-relayer + app.kubernetes.io/name: neutron-query-relayer-nqr-neutron-cosmos +spec: + clusterIP: None + ports: + - name: metrics + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app.kubernetes.io/name: neutron-query-relayer-nqr-neutron-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-statefulset.yaml new file mode 100644 index 000000000..0678e81a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron-relayer/relayer/neutron-query-relayer-nqr-neutron-cosmos-statefulset.yaml @@ -0,0 +1,197 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: neutron-query-relayer-nqr-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: neutron-query-relayer + app.kubernetes.io/name: neutron-query-relayer-nqr-neutron-cosmos +spec: + serviceName: neutron-query-relayer-nqr-neutron-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: neutron-query-relayer + app.kubernetes.io/name: neutron-query-relayer-nqr-neutron-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: neutron-query-relayer + app.kubernetes.io/name: neutron-query-relayer-nqr-neutron-cosmos + app.kubernetes.io/rawname: nqr-neutron-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/neutron-query-relayer:v0.2.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_PATH + value: /configs/config.json + - name: STORAGE_PATH + value: ./storage + - name: LOG_LEVEL + value: info + - name: METRICS_PORT + value: '9090' + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $STORAGE_PATH + + NEUTRON_MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + TARGET_MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + + + echo "Setting up keys for neutron-1..." + # Keys will be managed through environment variables for neutron-query-relayer + + DENOM="untrn" + # For neutron-query-relayer, we need to derive the address from mnemonic + # This will be handled by the relayer binary itself + + echo "Chain neutron-1 setup completed" + + echo "Setting up keys for cosmoshub-4..." + # Keys will be managed through environment variables for neutron-query-relayer + + DENOM="uatom" + # For neutron-query-relayer, we need to derive the address from mnemonic + # This will be handled by the relayer binary itself + + echo "Chain cosmoshub-4 setup completed" + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/neutron-query-relayer:v0.2.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_PATH + value: /configs/config.json + - name: STORAGE_PATH + value: ./storage + - name: LOG_LEVEL + value: info + - name: METRICS_PORT + value: '9090' + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + neutron-query-relayer start --config /configs/config.json + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: neutron-query-relayer-nqr-neutron-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..6ae432684 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/genesis-service.yaml new file mode 100644 index 000000000..7a3d9fc86 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: neutron-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: neutron-1-genesis + app.kubernetes.io/type: neutron-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: neutron + starship.io/chain-id: neutron-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: neutron-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/genesis-statefulset.yaml new file mode 100644 index 000000000..c98c68da2 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/genesis-statefulset.yaml @@ -0,0 +1,404 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: neutron-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: neutron-1 + app.kubernetes.io/id: neutron-1 + app.kubernetes.io/name: neutron-1-genesis + app.kubernetes.io/type: neutron-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: neutron +spec: + serviceName: neutron-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: neutron-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: neutron-1 + app.kubernetes.io/name: neutron-1-genesis + app.kubernetes.io/rawname: neutron-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/neutron:v3.0.5 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: untrn + - name: COINS + value: 100000000000000untrn + - name: CHAIN_BIN + value: neutrond + - name: CHAIN_DIR + value: /root/.neutrond + - name: CODE_REPO + value: https://github.com/neutron-org/neutron + - name: DAEMON_HOME + value: /root/.neutrond + - name: DAEMON_NAME + value: neutrond + - name: CHAIN_ID + value: neutron-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/neutron:v3.0.5 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: untrn + - name: COINS + value: 100000000000000untrn + - name: CHAIN_BIN + value: neutrond + - name: CHAIN_DIR + value: /root/.neutrond + - name: CODE_REPO + value: https://github.com/neutron-org/neutron + - name: DAEMON_HOME + value: /root/.neutrond + - name: DAEMON_NAME + value: neutrond + - name: CHAIN_ID + value: neutron-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-ics + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: untrn + - name: COINS + value: 100000000000000untrn + - name: CHAIN_BIN + value: neutrond + - name: CHAIN_DIR + value: /root/.neutrond + - name: CODE_REPO + value: https://github.com/neutron-org/neutron + - name: DAEMON_HOME + value: /root/.neutrond + - name: DAEMON_NAME + value: neutrond + - name: CHAIN_ID + value: neutron-1 + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + export + + echo "Fetching priv keys from provider exposer" + curl -s http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8081/priv_keys | jq > $CHAIN_DIR/config/provider_priv_validator_key.json + cat $CHAIN_DIR/config/provider_priv_validator_key.json + + echo "Replace provider priv validator key with provider keys" + mv $CHAIN_DIR/config/priv_validator_key.json $CHAIN_DIR/config/previous_priv_validator_key.json + mv $CHAIN_DIR/config/provider_priv_validator_key.json $CHAIN_DIR/config/priv_validator_key.json + + echo "Create consumer addition proposal" + DENOM=uatom \ + CHAIN_ID=cosmoshub-4 \ + CHAIN_BIN=gaiad \ + NODE_URL=http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657 \ + PROPOSAL_FILE=/proposal/proposal.json \ + bash -e /scripts/create-ics.sh + + echo "create ccv state file" + gaiad query provider consumer-genesis neutron-1 \ + --node http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657 \ + -o json > $CHAIN_DIR/config/ccv-state.json + cat $CHAIN_DIR/config/ccv-state.json | jq + + echo "Update genesis file with ccv state" + jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/ccv-state.json > $CHAIN_DIR/config/genesis-ccv.json + mv $CHAIN_DIR/config/genesis.json $CHAIN_DIR/config/genesis-no-ccv.json + mv $CHAIN_DIR/config/genesis-ccv.json $CHAIN_DIR/config/genesis.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /proposal + name: proposal + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/neutron:v3.0.5 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: untrn + - name: COINS + value: 100000000000000untrn + - name: CHAIN_BIN + value: neutrond + - name: CHAIN_DIR + value: /root/.neutrond + - name: CODE_REPO + value: https://github.com/neutron-org/neutron + - name: DAEMON_HOME + value: /root/.neutrond + - name: DAEMON_NAME + value: neutrond + - name: CHAIN_ID + value: neutron-1 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: neutron-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.neutrond/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.neutrond/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.neutrond/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.neutrond/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.neutrond/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.neutrond + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-neutron-1 + - name: proposal + configMap: + name: consumer-proposal-neutron-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/ics-proposal-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/ics-proposal-configmap.yaml new file mode 100644 index 000000000..aaeca651e --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/ics-proposal-configmap.yaml @@ -0,0 +1,41 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: consumer-proposal-neutron-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: neutron + app.kubernetes.io/part-of: neutron-1 + app.kubernetes.io/role: ics-proposal + starship.io/chain-name: neutron + starship.io/chain-id: neutron-1 +data: + proposal.json: |- + { + "title": "Add neutron consumer chain", + "summary": "Add neutron consumer chain with id neutron-1", + "chain_id": "neutron-1", + "initial_height": { + "revision_height": 1, + "revision_number": 1 + }, + "genesis_hash": "d86d756e10118e66e6805e9cc476949da2e750098fcc7634fd0cc77f57a0b2b0", + "binary_hash": "376cdbd3a222a3d5c730c9637454cd4dd925e2f9e2e0d0f3702fc922928583f1", + "spawn_time": "2023-02-28T20:40:00.000000Z", + "unbonding_period": 294000000000, + "ccv_timeout_period": 259920000000, + "transfer_timeout_period": 18000000000, + "consumer_redistribution_fraction": "0.75", + "blocks_per_distribution_transmission": 10, + "historical_entries": 100, + "distribution_transmission_channel": "", + "top_N": 95, + "validators_power_cap": 0, + "validator_set_cap": 0, + "allowlist": [], + "denylist": [], + "deposit": "10000uatom" + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/setup-scripts-configmap.yaml new file mode 100644 index 000000000..335df88f2 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/neutron/setup-scripts-configmap.yaml @@ -0,0 +1,1284 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-neutron-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-neutron-1 + app.kubernetes.io/part-of: neutron-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: neutron + starship.io/chain-id: neutron-1 +data: + createGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=untrn}" + STAKEDENOM=${DENOM:-untrn} + COINS="${COINS:=100000000000000000untrn}" + CHAIN_ID="${CHAIN_ID:=neutron-1}" + BINARY="${CHAIN_BIN:=neutrond}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.neutrond}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + BRANCH="${BRANCH:=v3.0.5}" + + FAUCET_ENABLED="${FAUCET_ENABLED:=true}" + NUM_VALIDATORS="${NUM_VALIDATORS:=1}" + NUM_RELAYERS="${NUM_RELAYERS:=0}" + + GENESIS_PATH="$CHAIN_DIR/config/genesis.json" + + CONTRACTS_BINARIES_DIR=${CONTRACTS_BINARIES_DIR:-./contracts} + THIRD_PARTY_CONTRACTS_DIR=${THIRD_PARTY_CONTRACTS_DIR:-./contracts_thirdparty} + + set -euxo pipefail + + mkdir -p $CONTRACTS_BINARIES_DIR $THIRD_PARTY_CONTRACTS_DIR + + function download_contract() { + CONTRACT_NAME="$1" # / + CONTRACT_URI=${CONTRACT_NAME#"./"} + curl https://github.com/neutron-org/neutron/raw/$BRANCH/$CONTRACT_URI -L -o $CONTRACT_NAME + } + + $BINARY init $CHAIN_ID --chain-id $CHAIN_ID + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --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 + # Add relayer key and delegate tokens + RELAYER_KEY_NAME="$(jq -r ".relayers[$i].name" $KEYS_CONFIG)" + echo "Adding relayer key.... $RELAYER_KEY_NAME" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $BINARY keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + # Add test addresses, admin address + echo "Adding key.... demowallet1" + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet1 --index 1 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet1 --keyring-backend="test") $COINS --keyring-backend="test" + # Add test addresses, second multisig address + echo "Adding key.... demowallet2" + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet2 --index 2 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet2 --keyring-backend="test") $COINS --keyring-backend="test" + # Add test addresses, second multisig address + echo "Adding key.... demowallet2" + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet3 --index 3 --recover --keyring-backend="test" + $BINARY add-genesis-account $($BINARY keys show -a demowallet3 --keyring-backend="test") $COINS --keyring-backend="test" + + echo "Update genesis.json file with updated local params" + sed -i "s/\"time_iota_ms\": \".*\"/\"time_iota_ms\": \"$TIME_IOTA_MS\"/" $CHAIN_DIR/config/genesis.json + + sed -i -e "s/\"denom\": \"stake\",/\"denom\": \"$DENOM\",/g" "$GENESIS_PATH" + sed -i -e "s/\"mint_denom\": \"stake\",/\"mint_denom\": \"$DENOM\",/g" "$GENESIS_PATH" + sed -i -e "s/\"bond_denom\": \"stake\"/\"bond_denom\": \"$DENOM\"/g" "$GENESIS_PATH" + + # IMPORTANT! minimum_gas_prices should always contain at least one record, otherwise the chain will not start or halt + MIN_GAS_PRICES_DEFAULT='[{"denom":"untrn","amount":"0"}]' + MIN_GAS_PRICES=${MIN_GAS_PRICES:-"$MIN_GAS_PRICES_DEFAULT"} + + BYPASS_MIN_FEE_MSG_TYPES_DEFAULT='["/ibc.core.channel.v1.Msg/RecvPacket", "/ibc.core.channel.v1.Msg/Acknowledgement", "/ibc.core.client.v1.Msg/UpdateClient"]' + BYPASS_MIN_FEE_MSG_TYPES=${BYPASS_MIN_FEE_MSG_TYPES:-"$BYPASS_MIN_FEE_MSG_TYPES_DEFAULT"} + + MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE_DEFAULT=1000000 + MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE=${MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE:-"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE_DEFAULT"} + + ADMIN_ADDRESS=$($BINARY keys show demowallet1 -a --keyring-backend="test") + SECOND_MULTISIG_ADDRESS=$($BINARY keys show demowallet2 -a --keyring-backend="test") + + ls $CHAIN_DIR/config + + # MAIN_DAO + DAO_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_core.wasm + download_contract $DAO_CONTRACT + PRE_PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_single.wasm + download_contract $PRE_PROPOSAL_CONTRACT + PRE_PROPOSAL_MULTIPLE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_multiple.wasm + download_contract $PRE_PROPOSAL_MULTIPLE_CONTRACT + PRE_PROPOSAL_OVERRULE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_pre_propose_overrule.wasm + download_contract $PRE_PROPOSAL_OVERRULE_CONTRACT + PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_proposal_single.wasm + download_contract $PROPOSAL_CONTRACT + PROPOSAL_MULTIPLE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_proposal_multiple.wasm + download_contract $PROPOSAL_MULTIPLE_CONTRACT + VOTING_REGISTRY_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_voting_registry.wasm + download_contract $VOTING_REGISTRY_CONTRACT + # VAULTS + NEUTRON_VAULT_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_vault.wasm + download_contract $NEUTRON_VAULT_CONTRACT + NEUTRON_INVESTORS_VAULT=$CONTRACTS_BINARIES_DIR/investors_vesting_vault.wasm + download_contract $NEUTRON_INVESTORS_VAULT + # VESTING + NEUTRON_VESTING_INVESTORS=$CONTRACTS_BINARIES_DIR/vesting_investors.wasm + download_contract $NEUTRON_VESTING_INVESTORS + # RESERVE + RESERVE_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_reserve.wasm + download_contract $RESERVE_CONTRACT + DISTRIBUTION_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_distribution.wasm + download_contract $DISTRIBUTION_CONTRACT + # SUBDAOS + SUBDAO_CORE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_core.wasm + download_contract $SUBDAO_CORE_CONTRACT + SUBDAO_TIMELOCK_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_timelock_single.wasm + download_contract $SUBDAO_TIMELOCK_CONTRACT + SUBDAO_PRE_PROPOSE_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_pre_propose_single.wasm + download_contract $SUBDAO_PRE_PROPOSE_CONTRACT + SUBDAO_PROPOSAL_CONTRACT=$CONTRACTS_BINARIES_DIR/cwd_subdao_proposal_single.wasm + download_contract $SUBDAO_PROPOSAL_CONTRACT + CW4_VOTING_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_voting.wasm + download_contract $CW4_VOTING_CONTRACT + CW4_GROUP_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_group.wasm + download_contract $CW4_GROUP_CONTRACT + + echo "Add consumer section..." + $BINARY add-consumer-section --home "$CHAIN_DIR" + ### PARAMETERS SECTION + + ## slashing params + SLASHING_SIGNED_BLOCKS_WINDOW=140000 + SLASHING_MIN_SIGNED=0.050000000000000000 + SLASHING_FRACTION_DOUBLE_SIGN=0.010000000000000000 + SLASHING_FRACTION_DOWNTIME=0.000100000000000000 + + ##pre propose single parameters + PRE_PROPOSAL_SINGLE_AMOUNT=1000 + PRE_PROPOSAL_SINGLE_REFUND_POLICY="only_passed" + PRE_PROPOSAL_SINGLE_OPEN_PROPOSAL_SUBMISSION=false + + ## proposal singe params + PROPOSAL_ALLOW_REVOTING=false # should be true for non-testing env + PROPOSAL_SINGLE_ONLY_MEMBERS_EXECUTE=false + PROPOSAL_SINGLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in production + PROPOSAL_SINGLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false + PROPOSAL_SINGLE_QUORUM=0.05 # quorum to consider proposal's result viable [float] < 1 + PROPOSAL_SINGLE_THRESHOLD=0.5 # % of votes should vote for the proposal to pass [float] <1 + PROPOSAL_SINGLE_LABEL="neutron.proposals.single" + PRE_PROPOSAL_SINGLE_LABEL="neutron.proposals.single.pre_propose" + + ## propose multiple params + PROPOSAL_MULTIPLE_ALLOW_REVOTING=false # should be true for non-testing env + PROPOSAL_MULTIPLE_ONLY_MEMBERS_EXECUTE=false + PROPOSAL_MULTIPLE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 2 weeks in production + PROPOSAL_MULTIPLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false + PROPOSAL_MULTIPLE_QUORUM=0.05 # quorum to consider proposal's result viable [float] < 1 + PROPOSAL_MULTIPLE_LABEL="neutron.proposals.multiple" + PRE_PROPOSAL_MULTIPLE_LABEL="neutron.proposals.multiple.pre_propose" + + ## Propose overrule params + PROPOSAL_OVERRULE_ALLOW_REVOTING=false + PROPOSAL_OVERRULE_ONLY_MEMBERS_EXECUTE=false + PROPOSAL_OVERRULE_ONLY_MAX_VOTING_PERIOD=1200 # seconds; should be 3 days in production + PROPOSAL_OVERRULE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE=false + PROPOSAL_OVERRULE_THRESHOLD=0.005 # around 10 times lower than for regular proposals + PROPOSAL_OVERRULE_LABEL="neutron.proposals.overrule" + PRE_PROPOSE_OVERRULE_LABEL="neutron.proposals.overrule.pre_propose" + + ## Voting registry + VOTING_REGISTRY_LABEL="neutron.voting" + + ## DAO + DAO_NAME="Neutron DAO" + DAO_DESCRIPTION="Neutron DAO is a DAO DAO-based governance of Neutron chain" + DAO_CORE_LABEL="neutron.core" + + ## Neutron vault + NEUTRON_VAULT_NAME="Neutron Vault" + NEUTRON_VAULT_DESCRIPTION="Vault to put NTRN tokens to get voting power" + NEUTRON_VAULT_LABEL="neutron.voting.vaults.neutron" + NEUTRON_INVESTORS_VAULT_NAME="Neutron Investors Vault" + NEUTRON_INVESTORS_VAULT_DESCRIPTION="Vault sourcing voting power form investors vesting" + NEUTRON_INVESTORS_VAULT_LABEL="neutron.voting.vaults.investors" + + # VESTING (for tests purposes) + NEUTRON_VESTING_INVESTORS_LABEL="neutron.vesting.investors" + + ## Reserve + RESERVE_DISTRIBUTION_RATE=0 + RESERVE_MIN_PERIOD=10 + RESERVE_VESTING_DENOMINATOR=1 + RESERVE_LABEL="reserve" + + DISTRIBUTION_LABEL="distribution" + + ## Grants subdao + GRANTS_SUBDAO_CORE_NAME="Grants SubDAO" + GRANTS_SUBDAO_CORE_DESCRIPTION="SubDAO to distribute grants to projects" + GRANTS_SUBDAO_CORE_LABEL="neutron.subdaos.grants.core" + GRANTS_SUBDAO_PROPOSAL_LABEL="neutron.subdaos.grants.proposals.single" + GRANTS_SUBDAO_PRE_PROPOSE_LABEL="neutron.subdaos.grants.proposals.single.pre_propose" + GRANTS_SUBDAO_VOTING_MODULE_LABEL="neutron.subdaos.grants.voting" + + ## Timelock + GRANTS_SUBDAO_TIMELOCK_LABEL="neutron.subdaos.grants.proposals.single.pre_propose.timelock" + + ## Security subdao + SECURITY_SUBDAO_CORE_NAME="Security SubDAO" + SECURITY_SUBDAO_CORE_DESCRIPTION="SubDAO with power to pause specific Neutron DAO modules" + SECURITY_SUBDAO_CORE_LABEL="neutron.subdaos.security.core" + SECURITY_SUBDAO_PROPOSAL_LABEL="neutron.subdaos.security.proposals.single" + SECURITY_SUBDAO_PRE_PROPOSE_LABEL="neutron.subdaos.security.proposals.single.pre_propose" + SECURITY_SUBDAO_VOTE_LABEL="neutron.subdaos.security.voting" + + echo "Initializing dao contract in genesis..." + + function store_binary() { + CONTRACT_BINARY_PATH=$1 + $BINARY add-wasm-message store "$CONTRACT_BINARY_PATH" \ + --output json --run-as "${ADMIN_ADDRESS}" --keyring-backend=test --home "$CHAIN_DIR" + BINARY_ID=$(jq -r "[.app_state.wasm.gen_msgs[] | select(.store_code != null)] | length" "$CHAIN_DIR/config/genesis.json") + echo "$BINARY_ID" + } + + # Upload the dao contracts + # MAIN_DAO + DAO_CONTRACT_BINARY_ID=$(store_binary "$DAO_CONTRACT") + PRE_PROPOSAL_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_CONTRACT") + PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_MULTIPLE_CONTRACT") + PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID=$(store_binary "$PRE_PROPOSAL_OVERRULE_CONTRACT") + PROPOSAL_CONTRACT_BINARY_ID=$(store_binary "$PROPOSAL_CONTRACT") + PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID=$(store_binary "$PROPOSAL_MULTIPLE_CONTRACT") + VOTING_REGISTRY_CONTRACT_BINARY_ID=$(store_binary "$VOTING_REGISTRY_CONTRACT") + # VAULTS + NEUTRON_VAULT_CONTRACT_BINARY_ID=$(store_binary "$NEUTRON_VAULT_CONTRACT") + NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID=$(store_binary "$NEUTRON_INVESTORS_VAULT") + # VESTING + NEUTRON_VESTING_INVESTORS_BINARY_ID=$(store_binary "$NEUTRON_VESTING_INVESTORS") + # RESERVE + DISTRIBUTION_CONTRACT_BINARY_ID=$(store_binary "$DISTRIBUTION_CONTRACT") + RESERVE_CONTRACT_BINARY_ID=$(store_binary "$RESERVE_CONTRACT") + # SUBDAOS + SUBDAO_CORE_BINARY_ID=$(store_binary "$SUBDAO_CORE_CONTRACT") + SUBDAO_TIMELOCK_BINARY_ID=$(store_binary "$SUBDAO_TIMELOCK_CONTRACT") + SUBDAO_PRE_PROPOSE_BINARY_ID=$(store_binary "$SUBDAO_PRE_PROPOSE_CONTRACT") + SUBDAO_PROPOSAL_BINARY_ID=$(store_binary "$SUBDAO_PROPOSAL_CONTRACT") + CW4_VOTING_CONTRACT_BINARY_ID=$(store_binary "$CW4_VOTING_CONTRACT") + CW4_GROUP_CONTRACT_BINARY_ID=$(store_binary "$CW4_GROUP_CONTRACT") + + # WARNING! + # The following code is needed to pre-generate the contract addresses + # Those addresses depend on the ORDER OF CONTRACTS INITIALIZATION + # Thus, this code section depends a lot on the order and content of the instantiate-contract commands at the end script + # It also depends on the implicitly initialized contracts (e.g. DAO core instantiation also instantiate proposals and stuff) + # If you're to do any changes, please do it consistently in both sections + # If you're to do add any implicitly initialized contracts in init messages, please reflect changes here + + function genaddr() { + CODE_ID=$1 + CONTRACT_ADDRESS=$($BINARY debug generate-contract-address "$INSTANCE_ID_COUNTER" "$CODE_ID") + echo "$CONTRACT_ADDRESS" + } + + INSTANCE_ID_COUNTER=1 + + # VAULTS + NEUTRON_VAULT_CONTRACT_ADDRESS=$(genaddr "$NEUTRON_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS=$(genaddr "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + + # VESTING + NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES=$(genaddr "$NEUTRON_VESTING_INVESTORS_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + + # MAIN_DAO + DAO_CONTRACT_ADDRESS=$(genaddr "$DAO_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + VOTING_REGISTRY_CONTRACT_ADDRESS=$(genaddr "$VOTING_REGISTRY_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_SINGLE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_MULTIPLE_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr "$PROPOSAL_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS=$(genaddr "$PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + + # RESERVE + RESERVE_CONTRACT_ADDRESS=$(genaddr "$RESERVE_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + DISTRIBUTION_CONTRACT_ADDRESS=$(genaddr "$DISTRIBUTION_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + # SUBDAOS + SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + SECURITY_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_CORE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_CORE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_VOTING_CONTRACT_ADDRESS=$(genaddr "$CW4_VOTING_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_PROPOSAL_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PROPOSAL_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_PRE_PROPOSE_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_PRE_PROPOSE_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_TIMELOCK_CONTRACT_ADDRESS=$(genaddr "$SUBDAO_TIMELOCK_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + GRANTS_SUBDAO_GROUP_CONTRACT_ADDRESS=$(genaddr "$CW4_GROUP_CONTRACT_BINARY_ID") && (( INSTANCE_ID_COUNTER++ )) + + function check_json() { + MSG=$1 + if ! jq -e . >/dev/null 2>&1 <<<"$MSG"; then + echo "Failed to parse JSON for $MSG" >&2 + exit 1 + fi + } + + function json_to_base64() { + MSG=$1 + check_json "$MSG" + echo "$MSG" | base64 | tr -d "\n" + } + + # PRE_PROPOSE_INIT_MSG will be put into the PROPOSAL_SINGLE_INIT_MSG and PROPOSAL_MULTIPLE_INIT_MSG + PRE_PROPOSE_INIT_MSG='{ + "deposit_info":{ + "denom":{ + "token":{ + "denom":{ + "native":"'"$STAKEDENOM"'" + } + } + }, + "amount": "'"$PRE_PROPOSAL_SINGLE_AMOUNT"'", + "refund_policy":"'"$PRE_PROPOSAL_SINGLE_REFUND_POLICY"'" + }, + "open_proposal_submission": '"$PRE_PROPOSAL_SINGLE_OPEN_PROPOSAL_SUBMISSION"' + }' + PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$PRE_PROPOSE_INIT_MSG") + + # -------------------- PROPOSE-SINGLE { PRE-PROPOSE } -------------------- + + PROPOSAL_SINGLE_INIT_MSG='{ + "allow_revoting":'"$PROPOSAL_ALLOW_REVOTING"', + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "core_module": {} + }, + "code_id": '"$PRE_PROPOSAL_CONTRACT_BINARY_ID"', + "msg": "'"$PRE_PROPOSE_INIT_MSG_BASE64"'", + "label": "'"$PRE_PROPOSAL_SINGLE_LABEL"'" + } + } + }, + "only_members_execute":'"$PROPOSAL_SINGLE_ONLY_MEMBERS_EXECUTE"', + "max_voting_period":{ + "time":'"$PROPOSAL_SINGLE_ONLY_MAX_VOTING_PERIOD"' + }, + "close_proposal_on_execution_failure":'"$PROPOSAL_SINGLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE"', + "threshold":{ + "threshold_quorum":{ + "quorum":{ + "percent":"'"$PROPOSAL_SINGLE_QUORUM"'" + }, + "threshold":{ + "percent":"'"$PROPOSAL_SINGLE_THRESHOLD"'" + } + } + } + }' + PROPOSAL_SINGLE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_SINGLE_INIT_MSG") + + # -------------------- PROPOSE-MULTIPLE { PRE-PROPOSE } -------------------- + + PROPOSAL_MULTIPLE_INIT_MSG='{ + "allow_revoting":'"$PROPOSAL_MULTIPLE_ALLOW_REVOTING"', + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "core_module": {} + }, + "code_id": '"$PRE_PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID"', + "msg": "'"$PRE_PROPOSE_INIT_MSG_BASE64"'", + "label": "'"$PRE_PROPOSAL_MULTIPLE_LABEL"'" + } + } + }, + "only_members_execute":'"$PROPOSAL_MULTIPLE_ONLY_MEMBERS_EXECUTE"', + "max_voting_period":{ + "time":'"$PROPOSAL_MULTIPLE_ONLY_MAX_VOTING_PERIOD"' + }, + "close_proposal_on_execution_failure": '"$PROPOSAL_MULTIPLE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE"', + "voting_strategy":{ + "single_choice": { + "quorum": { + "percent": "'"$PROPOSAL_MULTIPLE_QUORUM"'" + } + } + } + }' + PROPOSAL_MULTIPLE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_MULTIPLE_INIT_MSG") + + # PRE_PROPOSE_OVERRULE_INIT_MSG will be put into the PROPOSAL_OVERRULE_INIT_MSG + PRE_PROPOSE_OVERRULE_INIT_MSG='{}' + PRE_PROPOSE_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 "$PRE_PROPOSE_OVERRULE_INIT_MSG") + + + # -------------------- PROPOSE-OVERRULE { PRE-PROPOSE-OVERRULE } -------------------- + + PROPOSAL_OVERRULE_INIT_MSG='{ + "allow_revoting":'"$PROPOSAL_OVERRULE_ALLOW_REVOTING"', + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "core_module": {} + }, + "code_id": '"$PRE_PROPOSAL_OVERRULE_CONTRACT_BINARY_ID"', + "msg": "'"$PRE_PROPOSE_OVERRULE_INIT_MSG_BASE64"'", + "label": "'"$PRE_PROPOSE_OVERRULE_LABEL"'" + } + } + }, + "only_members_execute": '"$PROPOSAL_OVERRULE_ONLY_MEMBERS_EXECUTE"', + "max_voting_period":{ + "time": '"$PROPOSAL_OVERRULE_ONLY_MAX_VOTING_PERIOD"' + }, + "close_proposal_on_execution_failure": '"$PROPOSAL_OVERRULE_CLOSE_PROPOSAL_ON_EXECUTION_FAILURE"', + "threshold":{ + "absolute_percentage":{ + "percentage":{ + "percent": "'"$PROPOSAL_OVERRULE_THRESHOLD"'" + } + } + } + }' + PROPOSAL_OVERRULE_INIT_MSG_BASE64=$(json_to_base64 "$PROPOSAL_OVERRULE_INIT_MSG") + + VOTING_REGISTRY_INIT_MSG='{ + "owner": "'"$DAO_CONTRACT_ADDRESS"'", + "voting_vaults": [ + "'"$NEUTRON_VAULT_CONTRACT_ADDRESS"'", + "'"$NEUTRON_INVESTORS_VAULT_CONTRACT_ADDRESS"'" + ] + }' + VOTING_REGISTRY_INIT_MSG_BASE64=$(json_to_base64 "$VOTING_REGISTRY_INIT_MSG") + + DAO_INIT='{ + "description": "'"$DAO_DESCRIPTION"'", + "name": "'"$DAO_NAME"'", + "proposal_modules_instantiate_info": [ + { + "admin": { + "core_module": {} + }, + "code_id": '"$PROPOSAL_CONTRACT_BINARY_ID"', + "label": "'"$PROPOSAL_SINGLE_LABEL"'", + "msg": "'"$PROPOSAL_SINGLE_INIT_MSG_BASE64"'" + }, + { + "admin": { + "core_module": {} + }, + "code_id": '"$PROPOSAL_MULTIPLE_CONTRACT_BINARY_ID"', + "label": "'"$PROPOSAL_MULTIPLE_LABEL"'", + "msg": "'"$PROPOSAL_MULTIPLE_INIT_MSG_BASE64"'" + }, + { + "admin": { + "core_module": {} + }, + "code_id": '"$PROPOSAL_CONTRACT_BINARY_ID"', + "label": "'"$PROPOSAL_OVERRULE_LABEL"'", + "msg": "'"$PROPOSAL_OVERRULE_INIT_MSG_BASE64"'" + } + ], + "voting_registry_module_instantiate_info": { + "admin": { + "core_module": {} + }, + "code_id": '"$VOTING_REGISTRY_CONTRACT_BINARY_ID"', + "label": "'"$VOTING_REGISTRY_LABEL"'", + "msg": "'"$VOTING_REGISTRY_INIT_MSG_BASE64"'" + } + }' + + # RESERVE + RESERVE_INIT='{ + "main_dao_address": "'"$DAO_CONTRACT_ADDRESS"'", + "security_dao_address": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'", + "denom": "'"$STAKEDENOM"'", + "distribution_rate": "'"$RESERVE_DISTRIBUTION_RATE"'", + "min_period": '"$RESERVE_MIN_PERIOD"', + "distribution_contract": "'"$DISTRIBUTION_CONTRACT_ADDRESS"'", + "treasury_contract": "'"$DAO_CONTRACT_ADDRESS"'", + "vesting_denominator": "'"$RESERVE_VESTING_DENOMINATOR"'" + }' + + DISTRIBUTION_INIT='{ + "main_dao_address": "'"$DAO_CONTRACT_ADDRESS"'", + "security_dao_address": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'", + "denom": "'"$STAKEDENOM"'" + }' + + # VAULTS + + NEUTRON_VAULT_INIT='{ + "owner": "'"$DAO_CONTRACT_ADDRESS"'", + "name": "'"$NEUTRON_VAULT_NAME"'", + "denom": "'"$STAKEDENOM"'", + "description": "'"$NEUTRON_VAULT_DESCRIPTION"'" + }' + + NEUTRON_INVESTORS_VAULT_INIT='{ + "vesting_contract_address": "'"$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES"'", + "owner": "'"$DAO_CONTRACT_ADDRESS"'", + "description": "'"$NEUTRON_INVESTORS_VAULT_DESCRIPTION"'", + "name": "'"$NEUTRON_INVESTORS_VAULT_NAME"'" + }' + + # VESTING + NEUTRON_VESTING_INVESTORS_INIT='{ + "owner": "'"$ADMIN_ADDRESS"'", + "token_info_manager": "'"$ADMIN_ADDRESS"'" + }' + + # CW4 MODULES FOR SUBDAOS + + CW4_VOTE_INIT_MSG='{ + "cw4_group_code_id": '"$CW4_GROUP_CONTRACT_BINARY_ID"', + "initial_members": [ + { + "addr": "'"$ADMIN_ADDRESS"'", + "weight": 1 + }, + { + "addr": "'"$SECOND_MULTISIG_ADDRESS"'", + "weight": 1 + } + ] + }' + CW4_VOTE_INIT_MSG_BASE64=$(json_to_base64 "$CW4_VOTE_INIT_MSG") + + # SECURITY_SUBDAO + + # SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG will be put into the SECURITY_SUBDAO_PROPOSAL_INIT_MSG + SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG='{ + "open_proposal_submission": false + }' + SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG") + + SECURITY_SUBDAO_PROPOSAL_INIT_MSG='{ + "allow_revoting": false, + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$PRE_PROPOSAL_CONTRACT_BINARY_ID"', + "msg": "'"$SECURITY_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64"'", + "label": "'"$SECURITY_SUBDAO_PRE_PROPOSE_LABEL"'" + } + } + }, + "only_members_execute":false, + "max_voting_period":{ + "height": 1000000000000 + }, + "close_proposal_on_execution_failure":false, + "threshold":{ + "absolute_count":{ + "threshold": "1" + } + } + }' + SECURITY_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 "$SECURITY_SUBDAO_PROPOSAL_INIT_MSG") + + SECURITY_SUBDAO_CORE_INIT_MSG='{ + "name": "'"$SECURITY_SUBDAO_CORE_NAME"'", + "description": "'"$SECURITY_SUBDAO_CORE_DESCRIPTION"'", + "vote_module_instantiate_info": { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$CW4_VOTING_CONTRACT_BINARY_ID"', + "label": "'"$SECURITY_SUBDAO_VOTE_LABEL"'", + "msg": "'"$CW4_VOTE_INIT_MSG_BASE64"'" + }, + "proposal_modules_instantiate_info": [ + { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$SUBDAO_PROPOSAL_BINARY_ID"', + "label": "'"$SECURITY_SUBDAO_PROPOSAL_LABEL"'", + "msg": "'"$SECURITY_SUBDAO_PROPOSAL_INIT_MSG_BASE64"'" + } + ], + "main_dao": "'"$DAO_CONTRACT_ADDRESS"'", + "security_dao": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" + }' + + # GRANTS_SUBDAO + + GRANTS_SUBDAO_TIMELOCK_INIT_MSG='{ + "overrule_pre_propose": "'"$PRE_PROPOSAL_OVERRULE_CONTRACT_ADDRESS"'" + }' + GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_TIMELOCK_INIT_MSG") + + GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG='{ + "open_proposal_submission": false, + "timelock_module_instantiate_info": { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$SUBDAO_TIMELOCK_BINARY_ID"', + "label": "'"$GRANTS_SUBDAO_TIMELOCK_LABEL"'", + "msg": "'"$GRANTS_SUBDAO_TIMELOCK_INIT_MSG_BASE64"'" + } + }' + GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG") + + GRANTS_SUBDAO_PROPOSAL_INIT_MSG='{ + "allow_revoting": false, + "pre_propose_info":{ + "module_may_propose":{ + "info":{ + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$SUBDAO_PRE_PROPOSE_BINARY_ID"', + "msg": "'"$GRANTS_SUBDAO_PRE_PROPOSE_INIT_MSG_BASE64"'", + "label": "'"$GRANTS_SUBDAO_PRE_PROPOSE_LABEL"'" + } + } + }, + "only_members_execute":false, + "max_voting_period":{ + "height": 1000000000000 + }, + "close_proposal_on_execution_failure":false, + "threshold":{ + "absolute_count":{ + "threshold": "2" + } + } + }' + GRANTS_SUBDAO_PROPOSAL_INIT_MSG_BASE64=$(json_to_base64 "$GRANTS_SUBDAO_PROPOSAL_INIT_MSG") + + GRANTS_SUBDAO_CORE_INIT_MSG='{ + "name": "'"$GRANTS_SUBDAO_CORE_NAME"'", + "description": "'"$GRANTS_SUBDAO_CORE_DESCRIPTION"'", + "vote_module_instantiate_info": { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$CW4_VOTING_CONTRACT_BINARY_ID"', + "label": "'"$GRANTS_SUBDAO_VOTING_MODULE_LABEL"'", + "msg": "'"$CW4_VOTE_INIT_MSG_BASE64"'" + }, + "proposal_modules_instantiate_info": [ + { + "admin": { + "address": { + "addr": "'"$DAO_CONTRACT_ADDRESS"'" + } + }, + "code_id": '"$SUBDAO_PROPOSAL_BINARY_ID"', + "label": "'"$GRANTS_SUBDAO_PROPOSAL_LABEL"'", + "msg": "'"$GRANTS_SUBDAO_PROPOSAL_INIT_MSG_BASE64"'" + } + ], + "main_dao": "'"$DAO_CONTRACT_ADDRESS"'", + "security_dao": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" + }' + + echo "Instantiate contracts" + + function init_contract() { + BINARY_ID=$1 + INIT_MSG=$2 + LABEL=$3 + check_json "$INIT_MSG" + $BINARY add-wasm-message instantiate-contract "$BINARY_ID" "$INIT_MSG" --label "$LABEL" \ + --run-as "$DAO_CONTRACT_ADDRESS" --admin "$DAO_CONTRACT_ADDRESS" --home "$CHAIN_DIR" + } + + # WARNING! + # The following code is to add contracts instantiations messages to genesis + # It affects the section of predicting contracts addresses at the beginning of the script + # If you're to do any changes, please do it consistently in both sections + init_contract "$NEUTRON_VAULT_CONTRACT_BINARY_ID" "$NEUTRON_VAULT_INIT" "$NEUTRON_VAULT_LABEL" + init_contract "$NEUTRON_INVESTORS_VAULT_CONTRACT_BINARY_ID" "$NEUTRON_INVESTORS_VAULT_INIT" "$NEUTRON_INVESTORS_VAULT_LABEL" + init_contract "$NEUTRON_VESTING_INVESTORS_BINARY_ID" "$NEUTRON_VESTING_INVESTORS_INIT" "$NEUTRON_VESTING_INVESTORS_LABEL" + init_contract "$DAO_CONTRACT_BINARY_ID" "$DAO_INIT" "$DAO_CORE_LABEL" + init_contract "$RESERVE_CONTRACT_BINARY_ID" "$RESERVE_INIT" "$RESERVE_LABEL" + init_contract "$DISTRIBUTION_CONTRACT_BINARY_ID" "$DISTRIBUTION_INIT" "$DISTRIBUTION_LABEL" + init_contract "$SUBDAO_CORE_BINARY_ID" "$SECURITY_SUBDAO_CORE_INIT_MSG" "$SECURITY_SUBDAO_CORE_LABEL" + init_contract "$SUBDAO_CORE_BINARY_ID" "$GRANTS_SUBDAO_CORE_INIT_MSG" "$GRANTS_SUBDAO_CORE_LABEL" + + ADD_SUBDAOS_MSG='{ + "update_sub_daos": { + "to_add": [ + { + "addr": "'"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS"'" + }, + { + "addr": "'"$GRANTS_SUBDAO_CORE_CONTRACT_ADDRESS"'" + } + ], + "to_remove": [] + } + }' + check_json "$ADD_SUBDAOS_MSG" + + SET_VESTING_TOKEN_MSG='{ + "set_vesting_token": { + "vesting_token": { + "native_token": { + "denom": "'"$STAKEDENOM"'" + } + } + } + }' + + REGISTER_VESTING_ACCOUNTS_MSG='{ + "register_vesting_accounts": { + "vesting_accounts": [ + { + "address": "'"$ADMIN_ADDRESS"'", + "schedules": [ + { + "end_point": { + "amount": "1000", + "time": 1814821200 + }, + "start_point": { + "amount": "0", + "time": 1720213200 + } + } + ] + } + ] + } + }' + + $BINARY add-wasm-message execute "$DAO_CONTRACT_ADDRESS" "$ADD_SUBDAOS_MSG" \ + --run-as "$DAO_CONTRACT_ADDRESS" --home "$CHAIN_DIR" + + $BINARY add-wasm-message execute "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$SET_VESTING_TOKEN_MSG" \ + --run-as "$ADMIN_ADDRESS" --home "$CHAIN_DIR" + + $BINARY add-wasm-message execute "$NEUTRON_VESTING_INVESTORS_CONTRACT_ADDRRES" "$REGISTER_VESTING_ACCOUNTS_MSG" \ + --amount 1000untrn --run-as "$ADMIN_ADDRESS" --home "$CHAIN_DIR" + + function set_genesis_param() { + param_name=$1 + param_value=$2 + sed -i -e "s;\"$param_name\":.*;\"$param_name\": $param_value;g" "$GENESIS_PATH" + } + + function set_genesis_param_jq() { + param_path=$1 + param_value=$2 + jq "${param_path} = ${param_value}" > tmp_genesis_file.json < "$GENESIS_PATH" && mv tmp_genesis_file.json "$GENESIS_PATH" + } + + function convert_bech32_base64_esc() { + $BINARY keys parse $1 --output json | jq .bytes | xxd -r -p | base64 | sed -e 's/\//\\\//g' + } + DAO_CONTRACT_ADDRESS_B64=$(convert_bech32_base64_esc "$DAO_CONTRACT_ADDRESS") + echo $DAO_CONTRACT_ADDRESS_B64 + + set_genesis_param admins "[\"$DAO_CONTRACT_ADDRESS\"]" # admin module + set_genesis_param treasury_address "\"$DAO_CONTRACT_ADDRESS\"" # feeburner + set_genesis_param fee_collector_address "\"$DAO_CONTRACT_ADDRESS\"" # tokenfactory + set_genesis_param security_address "\"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS\"," # cron + set_genesis_param limit 5 # cron + #set_genesis_param allow_messages "[\"*\"]" # interchainaccounts + set_genesis_param signed_blocks_window "\"$SLASHING_SIGNED_BLOCKS_WINDOW\"," # slashing + set_genesis_param min_signed_per_window "\"$SLASHING_MIN_SIGNED\"," # slashing + set_genesis_param slash_fraction_double_sign "\"$SLASHING_FRACTION_DOUBLE_SIGN\"," # slashing + set_genesis_param slash_fraction_downtime "\"$SLASHING_FRACTION_DOWNTIME\"" # slashing + set_genesis_param minimum_gas_prices "$MIN_GAS_PRICES," # globalfee + set_genesis_param max_total_bypass_min_fee_msg_gas_usage "\"$MAX_TOTAL_BYPASS_MIN_FEE_MSG_GAS_USAGE\"" # globalfee + set_genesis_param_jq ".app_state.globalfee.params.bypass_min_fee_msg_types" "$BYPASS_MIN_FEE_MSG_TYPES" # globalfee + set_genesis_param proposer_fee "\"0.25\"" # builder(POB) + set_genesis_param escrow_account_address "\"$DAO_CONTRACT_ADDRESS_B64\"," # builder(POB) + set_genesis_param sudo_call_gas_limit "\"1000000\"" # contractmanager + set_genesis_param max_gas "\"1000000000\"" # consensus_params + + if ! jq -e . "$GENESIS_PATH" >/dev/null 2>&1; then + echo "genesis appears to become incorrect json" >&2 + exit 1 + fi + + echo "DAO $DAO_CONTRACT_ADDRESS" + updateGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + $CHAIN_BIN tendermint show-node-id + updateConfig.sh: | + #!/bin/bash + + STAKEDENOM=${DENOM:-untrn} + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + P2PPORT=${P2PPORT:-26656} + RPCPORT=${RPCPORT:-26657} + RESTPORT=${RESTPORT:-1317} + ROSETTA=${ROSETTA:-8080} + + set -eux + + ls $CHAIN_DIR + + sed -i -e 's/timeout_commit = "5s"/timeout_commit = "1s"/g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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/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/minimum-gas-prices = \"\"/minimum-gas-prices = \"0$STAKEDENOM\"/g" "$CHAIN_DIR/config/app.toml" + sed -i -e 's/enabled = false/enabled = true/g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's/prometheus-retention-time = 0/prometheus-retention-time = 1000/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#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2PPORT"'"#g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPCPORT"'"#g' "$CHAIN_DIR/config/config.toml" + sed -i -e 's#"tcp://localhost:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's#"tcp://0.0.0.0:1317"#"tcp://0.0.0.0:'"$RESTPORT"'"#g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's#":8080"#":'"$ROSETTA"'"#g' "$CHAIN_DIR/config/app.toml" + sed -i -e 's#localhost#0.0.0.0#g' "$CHAIN_DIR/config/app.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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/deployment.yaml new file mode 100644 index 000000000..166aeed66 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: neutron-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: neutron,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-neutron-1 + mountPath: /chains/neutron-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-neutron-1 + configMap: + name: registry-neutron-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/neutron-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/neutron-1-configmap.yaml new file mode 100644 index 000000000..56e0447aa --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/neutron-1-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-neutron-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-neutron-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "neutron", + "status": "live", + "network_type": "devnet", + "chain_id": "neutron-1", + "pretty_name": "Neutron Devnet", + "bech32_prefix": "neutron", + "daemon_name": "neutrond", + "node_home": "/root/.neutrond", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "untrn", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "untrn" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/neutron-org/neutron", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "neutron", + "assets": [ + { + "description": "The native token of Neutron chain.", + "denom_units": [ + { + "denom": "untrn", + "exponent": 0 + }, + { + "denom": "ntrn", + "exponent": 6 + } + ], + "base": "untrn", + "name": "Neutron", + "display": "ntrn", + "symbol": "NTRN", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg" + }, + "coingecko_id": "neutron" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-configmap.yaml new file mode 100644 index 000000000..0ae2e9aac --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-neutron-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "neutron-1" + type = "CosmosSdk" + key_name = "neutron-1" + ccv_consumer_chain = true + rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "neutron" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "untrn" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "neutron-1" + type = "CosmosSdk" + key_name = "neutron-1-cli" + ccv_consumer_chain = true + rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "neutron" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "untrn" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-service.yaml new file mode 100644 index 000000000..b934fa2ad --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-neutron-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-neutron-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-statefulset.yaml new file mode 100644 index 000000000..b83d32d49 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/neutron/relayer/hermes-neutron-cosmos-statefulset.yaml @@ -0,0 +1,300 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-neutron-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-neutron-cosmos +spec: + serviceName: hermes-neutron-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-neutron-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-neutron-cosmos + app.kubernetes.io/rawname: neutron-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for neutron-1..." + hermes keys add \ + --chain neutron-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name neutron-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="untrn" + RLY_ADDR=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for neutron-1-cli..." + hermes keys add \ + --chain neutron-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name neutron-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --a-connection connection-0 \ + --channel-version 1 \ + --order ordered \ + --a-chain neutron-1 \ + --a-port consumer \ + --b-port provider + + hermes create channel \ + --a-connection connection-0 \ + --a-chain neutron-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-neutron-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..6ae432684 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/genesis-service.yaml new file mode 100644 index 000000000..c51e1e9aa --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: noble-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: noble-1-genesis + app.kubernetes.io/type: noble-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: noble + starship.io/chain-id: noble-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: noble-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/genesis-statefulset.yaml new file mode 100644 index 000000000..ad3dbc392 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: noble-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: noble-1 + app.kubernetes.io/id: noble-1 + app.kubernetes.io/name: noble-1-genesis + app.kubernetes.io/type: noble-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: noble +spec: + serviceName: noble-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: noble-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: noble-1 + app.kubernetes.io/name: noble-1-genesis + app.kubernetes.io/rawname: noble-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/noble:v7.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uusdc + - name: COINS + value: 100000000000000uusdc,100000000000000ustake + - name: CHAIN_BIN + value: nobled + - name: CHAIN_DIR + value: /root/.noble + - name: CODE_REPO + value: https://github.com/noble-assets/noble + - name: DAEMON_HOME + value: /root/.noble + - name: DAEMON_NAME + value: nobled + - name: CHAIN_ID + value: noble-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.noble + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/noble:v7.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uusdc + - name: COINS + value: 100000000000000uusdc,100000000000000ustake + - name: CHAIN_BIN + value: nobled + - name: CHAIN_DIR + value: /root/.noble + - name: CODE_REPO + value: https://github.com/noble-assets/noble + - name: DAEMON_HOME + value: /root/.noble + - name: DAEMON_NAME + value: nobled + - name: CHAIN_ID + value: noble-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.noble + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/noble:v7.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uusdc + - name: COINS + value: 100000000000000uusdc,100000000000000ustake + - name: CHAIN_BIN + value: nobled + - name: CHAIN_DIR + value: /root/.noble + - name: CODE_REPO + value: https://github.com/noble-assets/noble + - name: DAEMON_HOME + value: /root/.noble + - name: DAEMON_NAME + value: nobled + - name: CHAIN_ID + value: noble-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.noble + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: noble-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.noble/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.noble/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.noble/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.noble/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.noble/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.noble + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/noble:v7.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: nobled + - name: FAUCET_CHAIN_ID + value: noble-1 + - name: COINS + value: 100000000000000uusdc,100000000000000ustake + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-noble-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/setup-scripts-configmap.yaml new file mode 100644 index 000000000..c739b4d02 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/noble/setup-scripts-configmap.yaml @@ -0,0 +1,934 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-noble-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-noble-1 + app.kubernetes.io/part-of: noble-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: noble + starship.io/chain-id: noble-1 +data: + createGenesis.sh: | + #!/bin/bash + + set -eux + + 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}" + + # 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, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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" + + # 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 + # Add relayer key and delegate tokens + RELAYER_KEY_NAME="$(jq -r ".relayers[$i].name" $KEYS_CONFIG)" + echo "Adding relayer key.... $RELAYER_KEY_NAME" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + updateGenesis.sh: | + #!/bin/bash + + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/deployment.yaml new file mode 100644 index 000000000..3a041cf34 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: noble-1. Waiting for it to start..." + echo "Checking: http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: noble-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: noble,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-noble-1 + mountPath: /chains/noble-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-noble-1 + configMap: + name: registry-noble-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/noble-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/noble-1-configmap.yaml new file mode 100644 index 000000000..6c5c5c47f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/noble-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-noble-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-noble-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "noble", + "status": "live", + "network_type": "devnet", + "chain_id": "noble-1", + "pretty_name": "Noble Devnet", + "bech32_prefix": "noble", + "daemon_name": "nobled", + "node_home": "/root/.noble", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uusdc", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uusdc" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/noble-assets/noble", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "noble", + "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" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-configmap.yaml new file mode 100644 index 000000000..9e8a93313 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-noble-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-noble-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "noble-1" + type = "CosmosSdk" + key_name = "noble-1" + + rpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "noble" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uusdc" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "noble-1" + type = "CosmosSdk" + key_name = "noble-1-cli" + + rpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "noble" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uusdc" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-service.yaml new file mode 100644 index 000000000..1660568bb --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-noble-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-noble-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-noble-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-statefulset.yaml new file mode 100644 index 000000000..9ae2fb04f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/noble/relayer/hermes-noble-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-noble-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-noble-cosmos +spec: + serviceName: hermes-noble-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-noble-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-noble-cosmos + app.kubernetes.io/rawname: noble-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: noble-1. Waiting for it to start..." + echo "Checking: http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for noble-1..." + hermes keys add \ + --chain noble-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name noble-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uusdc" + RLY_ADDR=$(hermes --json keys list --chain noble-1 | tail -1 | jq -r '.result."noble-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://noble-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for noble-1-cli..." + hermes keys add \ + --chain noble-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name noble-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain noble-1 | tail -1 | jq -r '.result."noble-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://noble-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain noble-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-noble-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/cometmock-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/cometmock-service.yaml new file mode 100644 index 000000000..772ca9584 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/cometmock-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: rpc + port: 22331 + protocol: TCP + targetPort: 22331 + selector: + app.kubernetes.io/name: cosmoshub-4-cometmock diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/cometmock-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/cometmock-statefulset.yaml new file mode 100644 index 000000000..86d645a9f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/cometmock-statefulset.yaml @@ -0,0 +1,209 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-cometmock + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/name: cosmoshub-4-cometmock + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/type: cometmock + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/rawname: cosmoshub-4-cometmock + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-wait + image: curlimages/curl + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-comet + image: ghcr.io/informalsystems/cometmock:v0.37.x + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + command: + - bash + - '-c' + - |- + mkdir -p /chain/genesis/config + mkdir -p /chain/genesis/data + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json + echo "Genesis file that we got....." + cat /chain/genesis/config/genesis.json + + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + + echo "copy cometmock binary to shared dir" + cp /usr/local/bin/cometmock /chain/cometmock + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + containers: + - name: comet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" + NODE_HOME_STR="/chain/genesis" + + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + readinessProbe: + httpGet: + path: /status + port: 22331 + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..20d3d7796 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,288 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.3' + memory: 300M + requests: + cpu: '0.3' + memory: 300M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..4271021c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/genesis-statefulset.yaml @@ -0,0 +1,376 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '2' + - name: FAUCET_PORT + value: '8000' + - name: FAUCET_MEMO + value: faucet txn + - name: FAUCET_GAS_PRICE + value: 1.25uosmo + - name: FAUCET_GAS_LIMIT + value: '2000000' + - name: FAUCET_ADDRESS_PREFIX + value: osmo + - name: FAUCET_REFILL_FACTOR + value: '8' + - name: FAUCET_REFILL_THRESHOLD + value: '20' + - name: FAUCET_COOLDOWN_TIME + value: '0' + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: HD_PATH + value: m/44'/118'/0'/0/0 + command: + - bash + - '-c' + - |- + export FAUCET_TOKENS=$(printf '%s\n' ${COINS//[[:digit:]]/}) + for coin in ${COINS//,/ } + do + var="FAUCET_CREDIT_AMOUNT_$(printf '%s\n' ${coin//[[:digit:]]/} | tr '[:lower:]' '[:upper:]')" + amt="${coin//[!0-9]/}" + + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + export $var="$creditAmt" + done + + export FAUCET_PATH_PATTERN="${HD_PATH:0:$((${#HD_PATH}-1))}a" + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + echo "FAUCET_MNEMONIC: $FAUCET_MNEMONIC" + echo "FAUCET_PATH_PATTERN: $FAUCET_PATH_PATTERN" + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10; + done + + /app/packages/faucet/bin/cosmos-faucet-dist start "http://localhost:26657" + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/deployment.yaml new file mode 100644 index 000000000..64508445c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-cosmjs-faucet/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..b5b03f30b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '2' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: osmosisd + - name: FAUCET_CHAIN_ID + value: osmosis-1 + - name: COINS + value: 100000000000000uosmo,100000000000000uion + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..d5ca9cd02 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,554 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + createGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + set -eu + + # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add relayer key and delegate tokens + echo "Adding key...." $(jq -r ".relayers[0].name" $KEYS_CONFIG) + jq -r ".relayers[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".relayers[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + echo "Creating gentx..." + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) 5000000000$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + updateGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + WASM_PERMISSIONLESS="${WASM_PERMISSIONLESS:=true}" + + set -eu + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + jq -r '.app_state.staking.params.unbonding_time |= "15s"' $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 |= "6s"' $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 + + # Set wasm as permissioned or permissionless based on environment variable + wasm_permission="Nobody" + if [ $WASM_PERMISSIONLESS == "true" ] + then + wasm_permission="Everybody" + fi + + jq -r ".app_state.wasm.params.code_upload_access.permission |= \"${wasm_permission}\"" $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r ".app_state.wasm.params.instantiate_default_permission |= \"${wasm_permission}\"" $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + + $CHAIN_BIN tendermint show-node-id + updateConfig.sh: | + #!/bin/bash + + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + set -eu + + 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/timeout_commit = "5s"/timeout_commit = "1s"/g' $CHAIN_DIR/config/config.toml + sed -i -e 's/timeout_propose = "3s"/timeout_propose = "1s"/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 + + + 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#enabled-unsafe-cors = false#enabled-unsafe-cors = true#g' $CHAIN_DIR/config/app.toml + sed -i -e 's#swagger = false#swagger = 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) + echo $((line_number + 1)) + } + + line_number=$(get_next_line_number "Enable defines if the API server should be enabled." $CHAIN_DIR/config/app.toml) + sed -i -e "${line_number}s/enable = false/enable = true/g" $CHAIN_DIR/config/app.toml + + 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 "Enable defines if the gRPC server should be enabled." $CHAIN_DIR/config/app.toml) + sed -i -e "${line_number}s/enable = false/enable = true/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 + + if [ "$METRICS" == "true" ]; then + line_number=$(get_next_line_number "other sinks such as Prometheus." $CHAIN_DIR/config/app.toml) + sed -i -e "${line_number}s/enabled = false/enabled = true/g" $CHAIN_DIR/config/app.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 + + if [ "$METRICS" == "true" ]; then + sed -i -e "s/prometheus = false/prometheus = true/g" $CHAIN_DIR/config/config.toml + fi + + $CHAIN_BIN tendermint show-node-id + createValidator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + + set -eu + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --gas="auto" \ + --gas-adjustment 1.5 --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator \ + --pubkey=$($CHAIN_BIN tendermint show-validator) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --min-self-delegation="1000000" \ + --fees 100000$DENOM \ + --gas="auto" \ + --gas-adjustment 1.5 --yes > /validator.log + + cat /validator.log | jq + } + + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transferTokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + + set -eu + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/deployment.yaml new file mode 100644 index 000000000..64508445c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain-custom-scripts/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-patch-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-patch-configmap.yaml new file mode 100644 index 000000000..1fc12480b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-patch-configmap.yaml @@ -0,0 +1,35 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: patch-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: genesis-patch + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + genesis.json: |- + { + "app_state": { + "staking": { + "params": { + "unbonding_time": "5s" + } + }, + "gamm": { + "params": { + "pool_creation_fee": [ + { + "amount": "500000", + "denom": "uosmo" + } + ] + } + } + } + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-service.yaml new file mode 100644 index 000000000..f7eff332a --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-service.yaml @@ -0,0 +1,55 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + - name: metrics + port: 26660 + protocol: TCP + targetPort: 26660 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..cc08a761c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/genesis-statefulset.yaml @@ -0,0 +1,402 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + echo "Adding balance to osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo --keyring-backend="test" + + echo "Adding balance to osmo10eykchznjdn8jdlwaj5v9wvlmdsp6kxx7u0hv9" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo10eykchznjdn8jdlwaj5v9wvlmdsp6kxx7u0hv9 2000000000000uosmo --keyring-backend="test" + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'true' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - mountPath: /patch + name: patch + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '2' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: osmosisd + - name: FAUCET_CHAIN_ID + value: osmosis-1 + - name: COINS + value: 100000000000000uosmo,100000000000000uion + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: patch + configMap: + name: patch-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/deployment.yaml new file mode 100644 index 000000000..64508445c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-chain/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..047f9b1a4 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,376 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '2' + - name: FAUCET_PORT + value: '8000' + - name: FAUCET_MEMO + value: faucet txn + - name: FAUCET_GAS_PRICE + value: 1.25uatom + - name: FAUCET_GAS_LIMIT + value: '2000000' + - name: FAUCET_ADDRESS_PREFIX + value: cosmos + - name: FAUCET_REFILL_FACTOR + value: '8' + - name: FAUCET_REFILL_THRESHOLD + value: '20' + - name: FAUCET_COOLDOWN_TIME + value: '0' + - name: COINS + value: 100000000000000uatom + - name: HD_PATH + value: m/44'/118'/0'/0/0 + command: + - bash + - '-c' + - |- + export FAUCET_TOKENS=$(printf '%s\n' ${COINS//[[:digit:]]/}) + for coin in ${COINS//,/ } + do + var="FAUCET_CREDIT_AMOUNT_$(printf '%s\n' ${coin//[[:digit:]]/} | tr '[:lower:]' '[:upper:]')" + amt="${coin//[!0-9]/}" + + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + export $var="$creditAmt" + done + + export FAUCET_PATH_PATTERN="${HD_PATH:0:$((${#HD_PATH}-1))}a" + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + echo "FAUCET_MNEMONIC: $FAUCET_MNEMONIC" + echo "FAUCET_PATH_PATTERN: $FAUCET_PATH_PATTERN" + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10; + done + + /app/packages/faucet/bin/cosmos-faucet-dist start "http://localhost:26657" + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/deployment.yaml new file mode 100644 index 000000000..63037117c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-cosmoshub-cosmjs-faucet/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/genesis-service.yaml new file mode 100644 index 000000000..310f5812a --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: custom-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: custom-1-genesis + app.kubernetes.io/type: custom-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: custom + starship.io/chain-id: custom-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: custom-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/genesis-statefulset.yaml new file mode 100644 index 000000000..25e6260a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: custom-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: custom-1 + app.kubernetes.io/id: custom-1 + app.kubernetes.io/name: custom-1-genesis + app.kubernetes.io/type: custom-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: custom +spec: + serviceName: custom-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: custom-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: custom-1 + app.kubernetes.io/name: custom-1-genesis + app.kubernetes.io/rawname: custom-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: anmol1696/osmosis:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: custom-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: anmol1696/osmosis:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: custom-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: anmol1696/osmosis:latest + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: custom-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: custom-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: anmol1696/osmosis:latest + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: osmosisd + - name: FAUCET_CHAIN_ID + value: custom-1 + - name: COINS + value: 100000000000000uosmo,100000000000000uion + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-custom-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/setup-scripts-configmap.yaml new file mode 100644 index 000000000..944c65d6f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/custom/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-custom-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-custom-1 + app.kubernetes.io/part-of: custom-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: custom + starship.io/chain-id: custom-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/custom-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/custom-1-configmap.yaml new file mode 100644 index 000000000..37a022b4c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/custom-1-configmap.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-custom-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-custom-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "custom-1", + "status": "live", + "network_type": "devnet", + "chain_id": "custom-1", + "pretty_name": "undefined Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "custom-1", + "assets": [ + { + "description": "The denom for token uosmo", + "base": "uosmo", + "name": "uosmo", + "display": "uosmo", + "symbol": "UOSMO", + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "uosmo", + "exponent": 6 + } + ], + "coingecko_id": "custom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/deployment.yaml new file mode 100644 index 000000000..7c7d13b25 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://custom-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: custom-1. Waiting for it to start..." + echo "Checking: http://custom-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: custom-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: custom + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://custom-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://custom-1-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://custom-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-custom-1 + mountPath: /chains/custom-1 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-custom-1 + configMap: + name: registry-custom-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/one-custom-chain/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/deployment.yaml new file mode 100644 index 000000000..42d2f4636 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: Always + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: simapp. Waiting for it to start..." + echo "Checking: http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: simapp + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: simapp + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://simapp-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://localhost:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://simapp-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-simapp + mountPath: /chains/simapp + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-simapp + configMap: + name: registry-simapp diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/simapp-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/simapp-configmap.yaml new file mode 100644 index 000000000..9c650b3e2 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/registry/simapp-configmap.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-simapp + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-simapp +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "simapp", + "status": "live", + "network_type": "devnet", + "chain_id": "simapp", + "pretty_name": "Sim App Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "simd", + "node_home": "/root/.simapp", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "stake", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "stake" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/cosmos-sdk/tree/main/simapp", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "simapp", + "assets": [ + { + "description": "The denom for token stake", + "base": "stake", + "name": "stake", + "display": "stake", + "symbol": "STAKE", + "denom_units": [ + { + "denom": "stake", + "exponent": 0 + }, + { + "denom": "stake", + "exponent": 6 + } + ], + "coingecko_id": "simapp" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/genesis-service.yaml new file mode 100644 index 000000000..f7c774b2f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: simapp-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: simapp-genesis + app.kubernetes.io/type: simapp-service + app.kubernetes.io/role: genesis + starship.io/chain-name: simapp + starship.io/chain-id: simapp +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: simapp-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/genesis-statefulset.yaml new file mode 100644 index 000000000..7b83d2ea7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: simapp-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: simapp + app.kubernetes.io/id: simapp + app.kubernetes.io/name: simapp-genesis + app.kubernetes.io/type: simapp-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: simapp +spec: + serviceName: simapp-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: simapp-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: simapp + app.kubernetes.io/name: simapp-genesis + app.kubernetes.io/rawname: simapp + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/simapp:v0.47.3 + imagePullPolicy: Always + env: + - name: DENOM + value: stake + - name: COINS + value: 100000000000000stake + - name: CHAIN_BIN + value: simd + - name: CHAIN_DIR + value: /root/.simapp + - name: CODE_REPO + value: https://github.com/cosmos/cosmos-sdk/tree/main/simapp + - name: DAEMON_HOME + value: /root/.simapp + - name: DAEMON_NAME + value: simd + - name: CHAIN_ID + value: simapp + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - mountPath: /root/.simapp + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/simapp:v0.47.3 + imagePullPolicy: Always + env: + - name: DENOM + value: stake + - name: COINS + value: 100000000000000stake + - name: CHAIN_BIN + value: simd + - name: CHAIN_DIR + value: /root/.simapp + - name: CODE_REPO + value: https://github.com/cosmos/cosmos-sdk/tree/main/simapp + - name: DAEMON_HOME + value: /root/.simapp + - name: DAEMON_NAME + value: simd + - name: CHAIN_ID + value: simapp + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - mountPath: /root/.simapp + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/simapp:v0.47.3 + imagePullPolicy: Always + env: + - name: DENOM + value: stake + - name: COINS + value: 100000000000000stake + - name: CHAIN_BIN + value: simd + - name: CHAIN_DIR + value: /root/.simapp + - name: CODE_REPO + value: https://github.com/cosmos/cosmos-sdk/tree/main/simapp + - name: DAEMON_HOME + value: /root/.simapp + - name: DAEMON_NAME + value: simd + - name: CHAIN_ID + value: simapp + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - mountPath: /root/.simapp + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: Always + env: + - name: GENESIS_HOST + value: simapp-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.simapp/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.simapp/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.simapp/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.simapp/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.simapp/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /root/.simapp + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/simapp:v0.47.3 + imagePullPolicy: Always + env: + - name: FAUCET_CONCURRENCY + value: '2' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: simd + - name: FAUCET_CHAIN_ID + value: simapp + - name: COINS + value: 100000000000000stake + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 200M + requests: + cpu: '0.1' + memory: 200M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-simapp + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/setup-scripts-configmap.yaml new file mode 100644 index 000000000..641c2e189 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-simapp + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-simapp + app.kubernetes.io/part-of: simapp + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: simapp + starship.io/chain-id: simapp +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/validator-service.yaml new file mode 100644 index 000000000..50b342611 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: simapp-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: simapp-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: simapp-service + starship.io/chain-name: simapp + starship.io/chain-id: simapp +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: simapp-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/validator-statefulset.yaml new file mode 100644 index 000000000..001e49f66 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/simapp/simapp/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: simapp-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: simapp + app.kubernetes.io/id: simapp + app.kubernetes.io/name: simapp-validator + app.kubernetes.io/type: simapp-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: simapp +spec: + serviceName: simapp-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: simapp-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: simapp + app.kubernetes.io/name: simapp-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: Always + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: simapp. Waiting for it to start..." + echo "Checking: http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/simapp:v0.47.3 + imagePullPolicy: Always + env: + - name: DENOM + value: stake + - name: COINS + value: 100000000000000stake + - name: CHAIN_BIN + value: simd + - name: CHAIN_DIR + value: /root/.simapp + - name: CODE_REPO + value: https://github.com/cosmos/cosmos-sdk/tree/main/simapp + - name: DAEMON_HOME + value: /root/.simapp + - name: DAEMON_NAME + value: simd + - name: CHAIN_ID + value: simapp + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: simapp-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - mountPath: /root/.simapp + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/simapp:v0.47.3 + imagePullPolicy: Always + env: + - name: DENOM + value: stake + - name: COINS + value: 100000000000000stake + - name: CHAIN_BIN + value: simd + - name: CHAIN_DIR + value: /root/.simapp + - name: CODE_REPO + value: https://github.com/cosmos/cosmos-sdk/tree/main/simapp + - name: DAEMON_HOME + value: /root/.simapp + - name: DAEMON_NAME + value: simd + - name: CHAIN_ID + value: simapp + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: simapp-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - mountPath: /root/.simapp + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/simapp:v0.47.3 + imagePullPolicy: Always + env: + - name: DENOM + value: stake + - name: COINS + value: 100000000000000stake + - name: CHAIN_BIN + value: simd + - name: CHAIN_DIR + value: /root/.simapp + - name: CODE_REPO + value: https://github.com/cosmos/cosmos-sdk/tree/main/simapp + - name: DAEMON_HOME + value: /root/.simapp + - name: DAEMON_NAME + value: simd + - name: CHAIN_ID + value: simapp + - name: GENESIS_HOST + value: simapp-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - mountPath: /root/.simapp + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: Always + env: + - name: DENOM + value: stake + - name: COINS + value: 100000000000000stake + - name: CHAIN_BIN + value: simd + - name: CHAIN_DIR + value: /root/.simapp + - name: CODE_REPO + value: https://github.com/cosmos/cosmos-sdk/tree/main/simapp + - name: DAEMON_HOME + value: /root/.simapp + - name: DAEMON_NAME + value: simd + - name: CHAIN_ID + value: simapp + - name: GENESIS_HOST + value: simapp-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.simapp/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.simapp/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.simapp/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.simapp/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /root/.simapp + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-simapp + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..ff0b9fde7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/genesis-service.yaml new file mode 100644 index 000000000..49d3de57a --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: juno-2-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: juno-2-genesis + app.kubernetes.io/type: juno-2-service + app.kubernetes.io/role: genesis + starship.io/chain-name: juno + starship.io/chain-id: juno-2 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: juno-2-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/genesis-statefulset.yaml new file mode 100644 index 000000000..44f3ce7c3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: juno-2-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: juno-2 + app.kubernetes.io/id: juno-2 + app.kubernetes.io/name: juno-2-genesis + app.kubernetes.io/type: juno-2-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: juno +spec: + serviceName: juno-2-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: juno-2-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: juno-2 + app.kubernetes.io/name: juno-2-genesis + app.kubernetes.io/rawname: juno-2 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/juno:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ujuno + - name: COINS + value: 100000000000000ujuno + - name: CHAIN_BIN + value: junod + - name: CHAIN_DIR + value: /root/.juno + - name: CODE_REPO + value: https://github.com/CosmosContracts/juno + - name: DAEMON_HOME + value: /root/.juno + - name: DAEMON_NAME + value: junod + - name: CHAIN_ID + value: juno-2 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.juno + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/juno:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ujuno + - name: COINS + value: 100000000000000ujuno + - name: CHAIN_BIN + value: junod + - name: CHAIN_DIR + value: /root/.juno + - name: CODE_REPO + value: https://github.com/CosmosContracts/juno + - name: DAEMON_HOME + value: /root/.juno + - name: DAEMON_NAME + value: junod + - name: CHAIN_ID + value: juno-2 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.juno + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/juno:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: ujuno + - name: COINS + value: 100000000000000ujuno + - name: CHAIN_BIN + value: junod + - name: CHAIN_DIR + value: /root/.juno + - name: CODE_REPO + value: https://github.com/CosmosContracts/juno + - name: DAEMON_HOME + value: /root/.juno + - name: DAEMON_NAME + value: junod + - name: CHAIN_ID + value: juno-2 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.juno + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: juno-2-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.juno/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.juno/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.juno/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.juno/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.juno/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.juno + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-juno-2 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/setup-scripts-configmap.yaml new file mode 100644 index 000000000..46a6198bc --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/juno/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-juno-2 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-juno-2 + app.kubernetes.io/part-of: juno-2 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: juno + starship.io/chain-id: juno-2 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..c94e2e408 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/deployment.yaml new file mode 100644 index 000000000..b5f6fc98e --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/deployment.yaml @@ -0,0 +1,132 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4,juno-2 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub,juno + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657,http://localhost:26658 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317,http://localhost:1318 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + - name: registry-juno-2 + mountPath: /chains/juno-2 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 + - name: registry-juno-2 + configMap: + name: registry-juno-2 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/juno-2-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/juno-2-configmap.yaml new file mode 100644 index 000000000..23586e466 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/juno-2-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-juno-2 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-juno-2 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "juno", + "status": "live", + "network_type": "devnet", + "chain_id": "juno-2", + "pretty_name": "Juno Devnet", + "bech32_prefix": "juno", + "daemon_name": "junod", + "node_home": "/root/.juno", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "ujuno", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ujuno" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/CosmosContracts/juno", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "juno", + "assets": [ + { + "base": "ujuno", + "description": "The native token of JUNO Chain", + "name": "Juno", + "display": "juno", + "symbol": "JUNO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg" + }, + "denom_units": [ + { + "denom": "ujuno", + "exponent": 0 + }, + { + "denom": "juno", + "exponent": 6 + } + ], + "coingecko_id": "juno-network" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-configmap.yaml new file mode 100644 index 000000000..9ad846b8f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-configmap.yaml @@ -0,0 +1,223 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-relayer + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-relayer +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + + [[chains]] + id = "juno-2" + type = "CosmosSdk" + key_name = "juno-2" + + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "juno" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "ujuno" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1-cli" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + + [[chains]] + id = "juno-2" + type = "CosmosSdk" + key_name = "juno-2-cli" + + rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "juno" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "ujuno" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-service.yaml new file mode 100644 index 000000000..e5b5200de --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-relayer + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-relayer +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-relayer diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-statefulset.yaml new file mode 100644 index 000000000..def55caf9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/three-chain/relayer/hermes-relayer-statefulset.yaml @@ -0,0 +1,344 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-relayer + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-relayer +spec: + serviceName: hermes-relayer + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-relayer + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-relayer + app.kubernetes.io/rawname: relayer + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for osmosis-1..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name osmosis-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uosmo" + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for juno-2..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name juno-2 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="ujuno" + RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for juno-2-cli..." + hermes keys add \ + --chain juno-2 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name juno-2-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer + + hermes create channel \ + --new-client-connection --yes \ + --b-chain juno-2 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain juno-2 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-relayer + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/cometmock-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/cometmock-service.yaml new file mode 100644 index 000000000..772ca9584 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/cometmock-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: rpc + port: 22331 + protocol: TCP + targetPort: 22331 + selector: + app.kubernetes.io/name: cosmoshub-4-cometmock diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/cometmock-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/cometmock-statefulset.yaml new file mode 100644 index 000000000..2046466e9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/cometmock-statefulset.yaml @@ -0,0 +1,209 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: cometmock + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-cometmock + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/name: cosmoshub-4-cometmock + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: cosmoshub + app.kubernetes.io/type: cometmock + app.kubernetes.io/name: cosmoshub-4-cometmock + app.kubernetes.io/rawname: cosmoshub-4-cometmock + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-wait + image: curlimages/curl + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-comet + image: ghcr.io/informalsystems/cometmock:v0.37.x + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + command: + - bash + - '-c' + - |- + mkdir -p /chain/genesis/config + mkdir -p /chain/genesis/data + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json + echo "Genesis file that we got....." + cat /chain/genesis/config/genesis.json + + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + + echo "copy cometmock binary to shared dir" + cp /usr/local/bin/cometmock /chain/cometmock + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + containers: + - name: comet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" + NODE_HOME_STR="/chain/genesis" + + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + readinessProbe: + httpGet: + path: /status + port: 22331 + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..63c10188b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,288 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/cometmock-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/cometmock-service.yaml new file mode 100644 index 000000000..ef17c101d --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/cometmock-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-cometmock + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: cometmock + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: rpc + port: 22331 + protocol: TCP + targetPort: 22331 + selector: + app.kubernetes.io/name: osmosis-1-cometmock diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/cometmock-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/cometmock-statefulset.yaml new file mode 100644 index 000000000..63ac963b9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/cometmock-statefulset.yaml @@ -0,0 +1,306 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-cometmock + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-cometmock + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: cometmock + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-cometmock + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: osmosis + app.kubernetes.io/name: osmosis-1-cometmock + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: osmosis + app.kubernetes.io/type: cometmock + app.kubernetes.io/name: osmosis-1-cometmock + app.kubernetes.io/rawname: osmosis-1-cometmock + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + for i in $(seq 0 0); do + mkdir -p /chain/validator-$i/config /chain/validator-$i/data + 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" --home /chain/validator-$i + done + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + - name: init-wait + image: curlimages/curl + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + + for i in $(seq 0 0); do + while [ $(curl -sw '%{http_code}' http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Validator does not seem to be ready for: osmosis-1 validator-$i. Waiting for it to start..." + echo "Checking: http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done + done + + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-comet + image: ghcr.io/informalsystems/cometmock:v0.37.x + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + command: + - bash + - '-c' + - |- + mkdir -p /chain/genesis/config + mkdir -p /chain/genesis/data + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json + echo "Genesis file that we got....." + cat /chain/genesis/config/genesis.json + + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + + for i in $(seq 0 0); do + mkdir -p /chain/validator-$i/config + mkdir -p /chain/validator-$i/data + curl http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_key -o /chain/validator-$i/config/node_key.json + curl http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/validator-$i/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/validator-$i/data/priv_validator_state.json + done + + echo "copy cometmock binary to shared dir" + cp /usr/local/bin/cometmock /chain/cometmock + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + containers: + - name: comet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + command: + - bash + - '-c' + - |- + NODE_LISTEN_ADDR_STR="tcp://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26658" + NODE_HOME_STR="/chain/genesis" + + for i in $(seq 0 0); do + NODE_LISTEN_ADDR_STR="tcp://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:26658,$NODE_LISTEN_ADDR_STR" + NODE_HOME_STR="/chain/validator-$i,$NODE_HOME_STR" + done + + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + set -eux + + sleep 10 + + for i in $(seq 0 0); do + $CHAIN_BIN keys list --keyring-backend test --home /chain/validator-$i --output json | jq + VAL_KEY_NAME="$(jq -r '.validators[0].name' $KEYS_CONFIG)-$i" + echo "Create validator.... $VAL_KEY_NAME" + VAL_NAME=$VAL_KEY_NAME \ + NODE_URL="http://0.0.0.0:22331" \ + NODE_ARGS="--home /chain/validator-$i" \ + GAS="1000000" \ + bash -e /scripts/create-validator.sh + done + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /chain + name: node + - mountPath: /scripts + name: scripts + - mountPath: /configs + name: addresses + readinessProbe: + httpGet: + path: /status + port: 22331 + initialDelaySeconds: 10 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..be35e15a2 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/genesis-statefulset.yaml @@ -0,0 +1,288 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/validator-service.yaml new file mode 100644 index 000000000..4269dc589 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: osmosis-1-service + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/validator-statefulset.yaml new file mode 100644 index 000000000..f1e5b4643 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cometmock/osmosis/validator-statefulset.yaml @@ -0,0 +1,368 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..cf70bfa6f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/validator-service.yaml new file mode 100644 index 000000000..59bc68aea --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: cosmoshub-4-service + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/validator-statefulset.yaml new file mode 100644 index 000000000..234796f35 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/cosmoshub/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..688d3c226 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: osmosisd + - name: FAUCET_CHAIN_ID + value: osmosis-1 + - name: COINS + value: 100000000000000uosmo,100000000000000uion + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/validator-service.yaml new file mode 100644 index 000000000..4269dc589 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: osmosis-1-service + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/validator-statefulset.yaml new file mode 100644 index 000000000..a12f59b25 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/osmosis/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/deployment.yaml new file mode 100644 index 000000000..e605110c8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-configmap.yaml new file mode 100644 index 000000000..4c9a162b7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "error" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = false + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'pull', interval = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'pull', interval = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "error" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = false + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1-cli" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'pull', interval = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'pull', interval = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-service.yaml new file mode 100644 index 000000000..1e7de0ebb --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-osmos-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-statefulset.yaml new file mode 100644 index 000000000..7600dadf8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-cosmos/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +spec: + serviceName: hermes-osmos-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmos-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmos-cosmos + app.kubernetes.io/rawname: osmos-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for osmosis-1..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name osmosis-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uosmo" + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-osmos-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..cf70bfa6f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: gaiad + - name: FAUCET_CHAIN_ID + value: cosmoshub-4 + - name: COINS + value: 100000000000000uatom + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/validator-service.yaml new file mode 100644 index 000000000..59bc68aea --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: cosmoshub-4-service + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/validator-statefulset.yaml new file mode 100644 index 000000000..234796f35 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/cosmoshub/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..688d3c226 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: osmosisd + - name: FAUCET_CHAIN_ID + value: osmosis-1 + - name: COINS + value: 100000000000000uosmo,100000000000000uion + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/validator-service.yaml new file mode 100644 index 000000000..4269dc589 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: osmosis-1-service + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/validator-statefulset.yaml new file mode 100644 index 000000000..a12f59b25 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/osmosis/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/deployment.yaml new file mode 100644 index 000000000..e605110c8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-configmap.yaml new file mode 100644 index 000000000..f6ff8e5cc --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-configmap.yaml @@ -0,0 +1,78 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: go-relayer-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: go-relayer + app.kubernetes.io/name: go-relayer-osmos-cosmos +data: + path.json: |- + { + "paths": { + "path0": { + "src": { + "chain-id": "osmosis-1", + "client-id": "", + "connection-id": "", + "channel-id": "", + "port-id": "transfer" + }, + "dst": { + "chain-id": "cosmoshub-4", + "client-id": "", + "connection-id": "", + "channel-id": "", + "port-id": "transfer" + }, + "src-channel-filter": { + "rule": null, + "channel-list": [] + } + } + } + } + osmosis-1.json: |- + { + "type": "cosmos", + "value": { + "key": "osmosis-1", + "chain-id": "osmosis-1", + "rpc-addr": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", + "account-prefix": "osmo", + "keyring-backend": "test", + "gas-adjustment": 1.2, + "gas-prices": "0.01uosmo", + "min-gas-amount": 0, + "debug": false, + "timeout": "20s", + "block-timeout": "", + "output-format": "json", + "sign-mode": "direct", + "extra-codecs": [] + } + } + cosmoshub-4.json: |- + { + "type": "cosmos", + "value": { + "key": "cosmoshub-4", + "chain-id": "cosmoshub-4", + "rpc-addr": "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", + "account-prefix": "cosmos", + "keyring-backend": "test", + "gas-adjustment": 1.2, + "gas-prices": "0.01uatom", + "min-gas-amount": 0, + "debug": false, + "timeout": "20s", + "block-timeout": "", + "output-format": "json", + "sign-mode": "direct", + "extra-codecs": [] + } + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-statefulset.yaml new file mode 100644 index 000000000..e3320e95c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-gorelayer/relayer/go-relayer-osmos-cosmos-statefulset.yaml @@ -0,0 +1,204 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: go-relayer-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: go-relayer + app.kubernetes.io/name: go-relayer-osmos-cosmos +spec: + serviceName: go-relayer-osmos-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: go-relayer + app.kubernetes.io/name: go-relayer-osmos-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: go-relayer + app.kubernetes.io/name: go-relayer-osmos-cosmos + app.kubernetes.io/rawname: osmos-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.relayer + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR/config + cp /configs/path.json $RELAYER_DIR/config/ + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + + + echo "Setting up chain osmosis-1..." + cp /configs/osmosis-1.json $RELAYER_DIR/config/ + rly chains add --file /configs/osmosis-1.json osmosis-1 + + echo "Creating key for osmosis-1..." + echo "$MNEMONIC" | rly keys restore osmosis-1 osmosis-1 --restore-key-type secp256k1 --coin-type 118 + + DENOM="uosmo" + RLY_ADDR=$(rly keys show osmosis-1 osmosis-1) + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Setting up chain cosmoshub-4..." + cp /configs/cosmoshub-4.json $RELAYER_DIR/config/ + rly chains add --file /configs/cosmoshub-4.json cosmoshub-4 + + echo "Creating key for cosmoshub-4..." + echo "$MNEMONIC" | rly keys restore cosmoshub-4 cosmoshub-4 --restore-key-type secp256k1 --coin-type 118 + + DENOM="uatom" + RLY_ADDR=$(rly keys show cosmoshub-4 cosmoshub-4) + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Adding paths..." + rly paths add --file /configs/path.json + + + echo "Creating client, connection and channel for path0..." + rly tx link path0 --src-port transfer --dst-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.relayer + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + rly start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: go-relayer-osmos-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..656eb09e6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/genesis-service.yaml @@ -0,0 +1,55 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + - name: metrics + port: 26660 + protocol: TCP + targetPort: 26660 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..b21df07a1 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'true' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/validator-service.yaml new file mode 100644 index 000000000..f4e01f791 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/validator-service.yaml @@ -0,0 +1,55 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: cosmoshub-4-service + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + - name: metrics + port: 26660 + protocol: TCP + targetPort: 26660 + selector: + app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/validator-statefulset.yaml new file mode 100644 index 000000000..57ade42da --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/cosmoshub/validator-statefulset.yaml @@ -0,0 +1,406 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: METRICS + value: 'true' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'true' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v10.0.1 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-dashboard-providers-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-dashboard-providers-configmap.yaml new file mode 100644 index 000000000..025312b68 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-dashboard-providers-configmap.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-providers + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: grafana-dashboard-providers +data: + default.yaml: |- + { + "apiVersion": 1, + "providers": [ + { + "name": "chain-dashboard", + "orgId": 1, + "type": "file", + "allowUiUpdates": true, + "options": { + "path": "/var/lib/grafana/dashboards" + } + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-dashboards-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-dashboards-configmap.yaml new file mode 100644 index 000000000..027c7c111 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-dashboards-configmap.yaml @@ -0,0 +1,2290 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboards + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: grafana-dashboards +data: + chains.json: | + { + "__inputs": [], + "__elements": {}, + "__requires": [ + { + "type": "panel", + "id": "bargauge", + "name": "Bar gauge", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.0.0" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph (old)", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "text", + "name": "Text", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 37, + "panels": [], + "title": "Tendermint Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "C" + }, + "properties": [ + { + "id": "custom.drawStyle", + "value": "line" + }, + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "percent" + }, + { + "id": "custom.lineWidth", + "value": 1 + }, + { + "id": "custom.fillOpacity", + "value": 10 + }, + { + "id": "max" + }, + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + }, + { + "id": "custom.axisColorMode", + "value": "series" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "A" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 4 + }, + "id": 2, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg by (network,instance) ({__name__=~\"^(tendermint|cometbft)_consensus_missing_validators\",network=\"$network\",instance=\"$instance\"})", + "instant": false, + "interval": "", + "legendFormat": "missing validators", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "avg by (network) ({__name__=~\"^(tendermint|cometbft)_consensus_validators\",network=\"$network\",instance=\"$instance\"})", + "interval": "", + "legendFormat": "total validators", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "avg by (network) ({__name__=~\"^(tendermint|cometbft)_consensus_missing_validators$\",network=\"$network\",instance=\"$instance\"}) / avg by (network) ({__name__=~\"^(tendermint|cometbft)_consensus_validators$\",network=\"$network\",instance=\"$instance\"}) * 100", + "hide": false, + "interval": "", + "legendFormat": "missing %", + "range": true, + "refId": "C" + } + ], + "title": "Number of Validators", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "C" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "A" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "D" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "percent" + }, + { + "id": "custom.axisColorMode", + "value": "series" + }, + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 4 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "max by (network,instance) ({__name__=~\"^(tendermint|cometbft)_consensus_validators_power\",network=\"$network\",instance=\"$instance\"})", + "hide": false, + "legendFormat": "Total", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "max by (network,instance) ({__name__=~\"^(tendermint|cometbft)_consensus_validator_power\",network=\"$network\",instance=\"$instance\"})", + "hide": true, + "interval": "1s", + "legendFormat": "Validator", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "max by (network,instance) ({__name__=~\"^(tendermint|cometbft)_consensus_missing_validators_power\",network=\"$network\",instance=\"$instance\"})", + "hide": false, + "legendFormat": "Missing", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "max by (network,instance) ({__name__=~\"^(tendermint|cometbft)_consensus_missing_validators_power$\",network=\"$network\",instance=\"$instance\"}) / max by (network,instance) ({__name__=~\"^(tendermint|cometbft)_consensus_validators_power$\",network=\"$network\",instance=\"$instance\"}) * 100", + "hide": false, + "legendFormat": "Missing %", + "range": true, + "refId": "D" + } + ], + "title": "Voting power", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.3.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "max by (instance) ({__name__=~\"^(tendermint|cometbft)_consensus_latest_block_height\",network=\"$network\",instance=\"$instance\"})", + "format": "time_series", + "instant": false, + "interval": "1s", + "legendFormat": "{{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "max by (network) ({__name__=~\"^(tendermint|cometbft)_consensus_validator_last_signed_height\",network=\"$network\",instance=\"$instance\"})", + "hide": false, + "legendFormat": "Validator last signed", + "range": true, + "refId": "B" + } + ], + "title": "Consensus Height", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 14, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "{__name__=~\"^(tendermint|cometbft)_p2p_peers\",network=\"$network\",instance=\"$instance\"}", + "interval": "1s", + "legendFormat": "peers {{instance}}", + "queryType": "randomWalk", + "range": true, + "refId": "A" + } + ], + "title": "P2P connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisColorMode", + "value": "series" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "A" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "D" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "avg by (network) (rate({__name__=~\"^(tendermint|cometbft)_state_block_processing_time_sum\",network=\"$network\",instance=\"$instance\"}[1m]))", + "hide": true, + "interval": "", + "legendFormat": "block processing time (1m)", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "avg by (network) (1/rate({__name__=~\"^(tendermint|cometbft)_consensus_height\",network=\"$network\",instance=\"$instance\"}[1m]))", + "hide": false, + "legendFormat": "1m", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "avg by (network) (1/rate({__name__=~\"^(tendermint|cometbft)_consensus_height\",network=\"$network\",instance=\"$instance\"}[1h]))", + "hide": false, + "legendFormat": "1h", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "avg by (network) (1/rate({__name__=~\"^(tendermint|cometbft)_consensus_height\",network=\"$network\",instance=\"$instance\"}[1d]))", + "hide": false, + "legendFormat": "1d", + "range": true, + "refId": "D" + } + ], + "title": "Block Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "A" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisColorMode", + "value": "series" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "custom.drawStyle", + "value": "line" + }, + { + "id": "custom.fillOpacity", + "value": 20 + }, + { + "id": "custom.lineWidth", + "value": 1 + }, + { + "id": "custom.axisColorMode", + "value": "series" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 25, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.5.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "max by (network) ({__name__=~\"^(tendermint|cometbft)_consensus_validator_missed_blocks\",network=\"$network\",instance=\"$instance\"})", + "interval": "", + "legendFormat": "total", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "max by (network) (delta({__name__=~\"^(tendermint|cometbft)_consensus_validator_missed_blocks\",network=\"$network\",instance=\"$instance\"}[1h]))", + "hide": false, + "legendFormat": "1h", + "range": true, + "refId": "B" + } + ], + "title": "Validator Missed Blocks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "bytes" + }, + { + "id": "min" + }, + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + }, + { + "id": "custom.axisColorMode", + "value": "series" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 22 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "{__name__=~\"^(tendermint|cometbft)_mempool_size\",network=\"$network\",instance=\"$instance\"}", + "interval": "1s", + "legendFormat": "{{instance}} - Total Txs", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "rate({__name__=~\"^(tendermint|cometbft)_mempool_tx_size_bytes_sum\",network=\"$network\",instance=\"$instance\"}[1m])", + "hide": false, + "interval": "1s", + "legendFormat": "{{instance}} - Tx Size Inflow (1min)", + "range": true, + "refId": "B" + } + ], + "title": "Mempool", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "C" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "percent" + }, + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + }, + { + "id": "custom.drawStyle", + "value": "line" + }, + { + "id": "custom.pointSize", + "value": 1 + }, + { + "id": "custom.axisColorMode", + "value": "series" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 22 + }, + "id": 56, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_consensus_total_txs\",network=\"$network\",instance=\"$instance\"}[1m])", + "interval": "1s", + "legendFormat": "Confirmed (1min)", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_mempool_failed_txs\",network=\"$network\",instance=\"$instance\"}[1m])", + "hide": false, + "interval": "1s", + "legendFormat": "Failed (1min)", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_mempool_failed_txs$\",network=\"$network\",instance=\"$instance\"}[1m]) / (increase({__name__=~\"^(tendermint|cometbft)_mempool_failed_txs$\",network=\"$network\",instance=\"$instance\"}[1m]) + increase({__name__=~\"^(tendermint|cometbft)_consensus_total_txs$\",network=\"$network\",instance=\"$instance\"}[1m])) * 100", + "hide": false, + "interval": "1s", + "legendFormat": "Total % (1min)", + "range": true, + "refId": "C" + } + ], + "title": "Finalized Transactions", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 57, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_consensus_block_gossip_parts_received\",network=\"$network\",matches_current=\"true\",instance=\"$instance\"}[1m])", + "interval": "1s", + "legendFormat": "Parts Received - Matching current (1m)", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_consensus_block_gossip_parts_received\",network=\"$network\",matches_current=\"false\",instance=\"$instance\"}[1m])", + "hide": false, + "interval": "1s", + "legendFormat": "Parts Received - Not matching (1m)", + "range": true, + "refId": "B" + } + ], + "title": "Block Parts", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 58, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "{__name__=~\"^(tendermint|cometbft)_consensus_block_size_bytes\",network=\"$network\",instance=\"$instance\"}", + "interval": "1s", + "legendFormat": "Block Size", + "range": true, + "refId": "A" + } + ], + "title": "Block Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 34 + }, + "id": 59, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "{__name__=~\"^(tendermint|cometbft)_consensus_rounds\",network=\"$network\",instance=\"$instance\"}", + "interval": "1s", + "legendFormat": "Consensus Rounds", + "range": true, + "refId": "A" + } + ], + "title": "Consensus Rounds", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 34 + }, + "id": 60, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_consensus_step_duration_seconds_sum\",network=\"$network\",step=\"Prevote\",instance=\"$instance\"}[1m]) / 100", + "interval": "1s", + "legendFormat": "Prevote", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_consensus_step_duration_seconds_sum\",network=\"$network\",step=\"Precommit\",instance=\"$instance\"}[1m]) / 100", + "hide": false, + "interval": "1s", + "legendFormat": "Precommit", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_consensus_step_duration_seconds_sum\",network=\"$network\",step=\"Commit\",instance=\"$instance\"}[1m]) / 100", + "hide": false, + "interval": "1s", + "legendFormat": "Commit", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_consensus_step_duration_seconds_sum\",network=\"$network\",step=\"NewHeight\",instance=\"$instance\"}[1m]) / 100", + "hide": false, + "interval": "1s", + "legendFormat": "New Height", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_consensus_step_duration_seconds_sum\",network=\"$network\",step=\"Propose\",instance=\"$instance\"}[1m]) / 100", + "hide": false, + "interval": "1s", + "legendFormat": "Propose", + "range": true, + "refId": "E" + } + ], + "title": "Step duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 39 + }, + "id": 62, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_p2p_message_receive_bytes_total\",network=\"$network\",instance=\"$instance\"}[1m]) / 600", + "interval": "1s", + "legendFormat": "{{message_type}}", + "range": true, + "refId": "A" + } + ], + "title": "Bytes received / s", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 39 + }, + "id": 63, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_p2p_message_send_bytes_total\",network=\"$network\",instance=\"$instance\"}[1m])/600", + "interval": "1s", + "legendFormat": "{{message_type}}", + "range": true, + "refId": "A" + } + ], + "title": "Bytes sent / s", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 44 + }, + "id": 64, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_p2p_message_receive_bytes_total\",network=\"$network\",instance=\"$instance\"}[1d])", + "interval": "1s", + "legendFormat": "{{message_type}}", + "range": true, + "refId": "A" + } + ], + "title": "Bytes received (1d)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 12, + "y": 44 + }, + "id": 65, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.5.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": true, + "expr": "increase({__name__=~\"^(tendermint|cometbft)_p2p_message_send_bytes_total\",network=\"$network\",instance=\"$instance\"}[1d])", + "interval": "1s", + "legendFormat": "{{message_type}}", + "range": true, + "refId": "A" + } + ], + "title": "Bytes sent (1d)", + "type": "timeseries" + } + ], + "refresh": "", + "revision": 1, + "schemaVersion": 38, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "definition": "label_values({__name__=~\"^(tendermint|cometbft)_consensus_latest_block_height\",network=~\".*\"},network)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "network", + "options": [], + "query": { + "query": "label_values({__name__=~\"^(tendermint|cometbft)_consensus_latest_block_height\",network=~\".*\"},network)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "definition": "label_values(up{network=\"$network\"},instance)", + "hide": 0, + "includeAll": false, + "label": "instance", + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(up{network=\"$network\"},instance)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Chain Dashboard", + "uid": "1jUwLdghefUwnk-starship-chain", + "version": 8, + "weekStart": "" + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-datasources-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-datasources-configmap.yaml new file mode 100644 index 000000000..ad90ab2be --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-datasources-configmap.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-datasources + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: grafana-datasources +data: + prometheus.yaml: |- + { + "apiVersion": 1, + "datasources": [ + { + "access": "proxy", + "editable": true, + "name": "prometheus", + "orgId": 1, + "type": "prometheus", + "url": "http://prometheus.aws-starship.svc:9090", + "version": 1 + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-deployment.yaml new file mode 100644 index 000000000..26dcf64d9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-deployment.yaml @@ -0,0 +1,75 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: grafana + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: grafana +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: grafana + template: + metadata: + name: grafana + labels: + app.kubernetes.io/instance: monitoring + app.kubernetes.io/name: grafana + spec: + containers: + - name: grafana + image: grafana/grafana:latest + env: + - name: GF_SERVER_HTTP_PORT + value: '8080' + - name: GF_SERVER_HTTP_ADDR + value: 0.0.0.0 + - name: GF_AUTH_DISABLE_LOGIN_FORM + value: 'true' + - name: GF_AUTH_ANONYMOUS_ENABLED + value: 'true' + - name: GF_AUTH_ANONYMOUS_ORG_NAME + value: Main Org. + - name: GF_AUTH_ANONYMOUS_ORG_ROLE + value: Editor + ports: + - name: grafana + containerPort: 3000 + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - mountPath: /var/lib/grafana + name: grafana-storage + - mountPath: /etc/grafana/provisioning/datasources + name: grafana-datasources + readOnly: false + - mountPath: /etc/grafana/provisioning/dashboards + name: grafana-dashboard-providers + readOnly: false + - mountPath: /var/lib/grafana/dashboards + name: grafana-dashboards + readOnly: false + volumes: + - name: grafana-datasources + configMap: + defaultMode: 420 + name: grafana-datasources + - name: grafana-dashboard-providers + configMap: + defaultMode: 420 + name: grafana-dashboard-providers + - name: grafana-dashboards + configMap: + name: grafana-dashboards + - name: grafana-storage + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-service.yaml new file mode 100644 index 000000000..5400ca146 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/grafana-service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + name: grafana + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: grafana + annotations: + prometheus.io/scrape: 'true' + prometheus.io/port: '8080' +spec: + clusterIP: None + ports: + - name: http + port: 8080 + targetPort: 8080 + selector: + app.kubernetes.io/name: grafana diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-clusterrole.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-clusterrole.yaml new file mode 100644 index 000000000..4600d0b5e --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-clusterrole.yaml @@ -0,0 +1,36 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: prometheus + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: prometheus +rules: + - apiGroups: + - '' + resources: + - nodes + - nodes/proxy + - services + - endpoints + - pods + verbs: + - get + - list + - watch + - apiGroups: + - extensions + resources: + - ingresses + verbs: + - get + - list + - watch + - nonResourceURLs: + - /metrics + verbs: + - get diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-clusterrolebinding.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-clusterrolebinding.yaml new file mode 100644 index 000000000..25ff97543 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-clusterrolebinding.yaml @@ -0,0 +1,19 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: prometheus + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: prometheus +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: prometheus +subjects: + - kind: ServiceAccount + name: default + namespace: $(NAMESPACE) diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-config-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-config-configmap.yaml new file mode 100644 index 000000000..7ece4405e --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-config-configmap.yaml @@ -0,0 +1,184 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus-config + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: prometheus-config +data: + prometheus.yml: | + # my global config + global: + scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. + evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. + # scrape_timeout is set to the global default (10s). + scrape_configs: + # The job name is added as a label `job=` to any timeseries scraped from this config. + - job_name: 'kubernetes-apiservers' + + kubernetes_sd_configs: + - role: endpoints + scheme: https + + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + + relabel_configs: + - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] + action: keep + regex: default;kubernetes;https + + - job_name: 'kubernetes-nodes' + + scheme: https + + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + + kubernetes_sd_configs: + - role: node + + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - target_label: __address__ + replacement: kubernetes.default.svc:443 + - source_labels: [__meta_kubernetes_node_name] + regex: (.+) + target_label: __metrics_path__ + replacement: /api/v1/nodes/${1}/proxy/metrics + + - job_name: 'kubernetes-pods' + + kubernetes_sd_configs: + - role: pod + + relabel_configs: + - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] + action: keep + regex: true + - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] + action: replace + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - source_labels: [__meta_kubernetes_namespace] + action: replace + target_label: kubernetes_namespace + - source_labels: [__meta_kubernetes_pod_name] + action: replace + target_label: kubernetes_pod_name + + - job_name: 'kube-state-metrics' + static_configs: + - targets: ['kube-state-metrics.kube-system.svc.cluster.local:8080'] + + - job_name: kubernetes-nodes-cadvisor + scrape_interval: 10s + scrape_timeout: 10s + scheme: https # remove if you want to scrape metrics on insecure port + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + # Only for Kubernetes ^1.7.3. + # See: https://github.com/prometheus/prometheus/issues/2916 + - target_label: __address__ + replacement: kubernetes.default.svc:443 + - source_labels: [__meta_kubernetes_node_name] + regex: (.+) + target_label: __metrics_path__ + replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor + metric_relabel_configs: + - action: replace + source_labels: [id] + regex: '^/machine\.slice/machine-rkt\\x2d([^\\]+)\\.+/([^/]+)\.service$' + target_label: rkt_container_name + replacement: '${2}-${1}' + - action: replace + source_labels: [id] + regex: '^/system\.slice/(.+)\.service$' + target_label: systemd_service_name + replacement: '${1}' + + - job_name: 'kubernetes-service-endpoints' + + kubernetes_sd_configs: + - role: endpoints + + relabel_configs: + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] + action: keep + regex: true + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] + action: replace + target_label: __scheme__ + regex: (https?) + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] + action: replace + target_label: __address__ + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - source_labels: [__meta_kubernetes_namespace] + action: replace + target_label: kubernetes_namespace + - source_labels: [__meta_kubernetes_service_name] + action: replace + target_label: kubernetes_name + + - job_name: 'prometheus' + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + static_configs: + - targets: ['localhost:9090'] + + - job_name: 'osmosis-genesis' + static_configs: + - targets: ['osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26660'] + labels: + instance: genesis + type: genesis + network: "osmosis" + - job_name: 'osmosis-validator-0' + static_configs: + - targets: ['osmosis-1-validator-0.osmosis-1-validator.$(NAMESPACE).svc.cluster.local:26660'] + labels: + instance: "validator-0" + type: validator + network: "osmosis" + - job_name: 'cosmoshub-genesis' + static_configs: + - targets: ['cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26660'] + labels: + instance: genesis + type: genesis + network: "cosmoshub" + - job_name: 'cosmoshub-validator-0' + static_configs: + - targets: ['cosmoshub-4-validator-0.cosmoshub-4-validator.$(NAMESPACE).svc.cluster.local:26660'] + labels: + instance: "validator-0" + type: validator + network: "cosmoshub" diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-deployment.yaml new file mode 100644 index 000000000..9ef73b949 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: prometheus + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: prometheus + template: + metadata: + labels: + app.kubernetes.io/instance: monitoring + app.kubernetes.io/name: prometheus + annotations: + prometheus.io/scrape: 'true' + prometheus.io/port: '9090' + spec: + containers: + - name: prometheus + image: prom/prometheus + args: + - '--storage.tsdb.retention=6h' + - '--storage.tsdb.path=/prometheus' + - '--config.file=/etc/prometheus/prometheus.yml' + ports: + - name: web + containerPort: 9090 + resources: + limits: + cpu: '0.2' + memory: 400M + requests: + cpu: '0.2' + memory: 400M + volumeMounts: + - name: prometheus-config-volume + mountPath: /etc/prometheus + - name: prometheus-storage-volume + mountPath: /prometheus + restartPolicy: Always + volumes: + - name: prometheus-config-volume + configMap: + defaultMode: 420 + name: prometheus-config + - name: prometheus-storage-volume + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-service.yaml new file mode 100644 index 000000000..d0bf4fed4 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/monitoring/prometheus-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: prometheus + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: monitoring + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: prometheus + annotations: + prometheus.io/scrape: 'true' + prometheus.io/port: '9090' +spec: + clusterIP: None + ports: + - name: http + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app.kubernetes.io/name: prometheus diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/genesis-service.yaml new file mode 100644 index 000000000..f7eff332a --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/genesis-service.yaml @@ -0,0 +1,55 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + - name: metrics + port: 26660 + protocol: TCP + targetPort: 26660 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..ae11b12d1 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'true' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/validator-service.yaml new file mode 100644 index 000000000..ff7be93ac --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/validator-service.yaml @@ -0,0 +1,55 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: osmosis-1-service + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + - name: metrics + port: 26660 + protocol: TCP + targetPort: 26660 + selector: + app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/validator-statefulset.yaml new file mode 100644 index 000000000..0c0618954 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/osmosis/validator-statefulset.yaml @@ -0,0 +1,406 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: METRICS + value: 'true' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'true' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..475abe23c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/deployment.yaml new file mode 100644 index 000000000..e605110c8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..123e63aff --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/osmosis-1-configmap.yaml @@ -0,0 +1,120 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-configmap.yaml new file mode 100644 index 000000000..2fcda86a9 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = true + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1-cli" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-service.yaml new file mode 100644 index 000000000..1e7de0ebb --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-osmos-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-statefulset.yaml new file mode 100644 index 000000000..c249bf90b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain-monitoring/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +spec: + serviceName: hermes-osmos-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmos-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmos-cosmos + app.kubernetes.io/rawname: osmos-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for osmosis-1..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name osmosis-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uosmo" + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/cosmology-tech/starship/hermes:1.10.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-osmos-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/configmaps/keys.yaml new file mode 100644 index 000000000..e9d47b9ae --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..bc50f14a3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/genesis-service.yaml new file mode 100644 index 000000000..a2b1a1662 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-service + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/genesis-statefulset.yaml new file mode 100644 index 000000000..831c9bef3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/genesis-statefulset.yaml @@ -0,0 +1,298 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-genesis + app.kubernetes.io/rawname: cosmoshub-4 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: FAUCET_ENABLED + value: 'false' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.gaia/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/setup-scripts-configmap.yaml new file mode 100644 index 000000000..0fecce232 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-cosmoshub-4 + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/validator-service.yaml new file mode 100644 index 000000000..59bc68aea --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: cosmoshub-4-service + starship.io/chain-name: cosmoshub + starship.io/chain-id: cosmoshub-4 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: cosmoshub-4-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/validator-statefulset.yaml new file mode 100644 index 000000000..0ac01ae3b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/cosmoshub/validator-statefulset.yaml @@ -0,0 +1,406 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cosmoshub-4-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: cosmoshub-4 + app.kubernetes.io/id: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/type: cosmoshub-4-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: cosmoshub +spec: + serviceName: cosmoshub-4-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: cosmoshub-4-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: cosmoshub-4 + app.kubernetes.io/name: cosmoshub-4-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'false' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/gaia:v18.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uatom + - name: COINS + value: 100000000000000uatom + - name: CHAIN_BIN + value: gaiad + - name: CHAIN_DIR + value: /root/.gaia + - name: CODE_REPO + value: https://github.com/cosmos/gaia + - name: DAEMON_HOME + value: /root/.gaia + - name: DAEMON_NAME + value: gaiad + - name: CHAIN_ID + value: cosmoshub-4 + - name: GENESIS_HOST + value: cosmoshub-4-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.gaia/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.gaia/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.gaia/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.gaia/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.gaia + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/configmap.yaml new file mode 100644 index 000000000..27b3ba554 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/configmap.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: explorer + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: explorer + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: explorer +data: + osmosis-1.json: '{"chain_name":"osmosis-1","coingecko":"osmosis","api":"http://localhost:1313","rpc":["http://localhost:26653"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"osmo","logo":"","assets":[{"base":"uosmo","symbol":"OSMO","exponent":"6","coingecko_id":"osmosis-1","logo":""}]}' + cosmoshub-4.json: '{"chain_name":"cosmoshub-4","coingecko":"cosmoshub","api":"http://localhost:1317","rpc":["http://localhost:26657"],"snapshot_provider":"","sdk_version":"0.45.6","coin_type":118,"min_tx_fee":"3000","addr_prefix":"cosmos","logo":"","assets":[{"base":"uatom","symbol":"COSMOS","exponent":"6","coingecko_id":"cosmoshub-4","logo":""}]}' diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/deployment.yaml new file mode 100644 index 000000000..05332fca1 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/deployment.yaml @@ -0,0 +1,57 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: explorer + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: explorer + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: explorer +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: explorer + app.kubernetes.io/name: explorer + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: explorer + app.kubernetes.io/type: ping-pub + app.kubernetes.io/name: explorer + app.kubernetes.io/rawname: explorer + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + containers: + - name: explorer + image: ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db + imagePullPolicy: IfNotPresent + env: + - name: CHAINS_CONFIG_PATH + value: /explorer + ports: + - name: http + containerPort: 8080 + protocol: TCP + volumeMounts: + - name: explorer-config + mountPath: /explorer + resources: + limits: + cpu: 1 + memory: 1Gi + requests: + cpu: 1 + memory: 1Gi + volumes: + - name: explorer-config + configMap: + name: explorer diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/service.yaml new file mode 100644 index 000000000..dc3684ac3 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/explorer/service.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: explorer + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: explorer + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: explorer +spec: + clusterIP: None + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + selector: + app.kubernetes.io/name: explorer diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/genesis-service.yaml new file mode 100644 index 000000000..61dc898c7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/genesis-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/genesis-statefulset.yaml new file mode 100644 index 000000000..688d3c226 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/genesis-statefulset.yaml @@ -0,0 +1,389 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-genesis + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-genesis + app.kubernetes.io/rawname: osmosis-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '2' + - name: NUM_RELAYERS + value: '1' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.osmosisd/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '5' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: osmosisd + - name: FAUCET_CHAIN_ID + value: osmosis-1 + - name: COINS + value: 100000000000000uosmo,100000000000000uion + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/setup-scripts-configmap.yaml new file mode 100644 index 000000000..ca16fceb6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/setup-scripts-configmap.yaml @@ -0,0 +1,628 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-osmosis-1 + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + update-genesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + # 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 + } + + # 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 + } + + if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + fi + + if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 + else + gov_overrides_sdk_v47 + fi + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/validator-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/validator-service.yaml new file mode 100644 index 000000000..4269dc589 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/validator-service.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/role: validator + app.kubernetes.io/type: osmosis-1-service + starship.io/chain-name: osmosis + starship.io/chain-id: osmosis-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + selector: + app.kubernetes.io/name: osmosis-1-validator diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/validator-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/validator-statefulset.yaml new file mode 100644 index 000000000..a12f59b25 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/osmosis/validator-statefulset.yaml @@ -0,0 +1,408 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osmosis-1-validator + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: osmosis-1 + app.kubernetes.io/id: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/type: osmosis-1-statefulset + app.kubernetes.io/role: validator + starship.io/chain-name: osmosis +spec: + serviceName: osmosis-1-validator + podManagementPolicy: Parallel + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/name: osmosis-1-validator + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: starship-e2e-tests + app.kubernetes.io/type: osmosis-1 + app.kubernetes.io/name: osmosis-1-validator + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: validator + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting early" + exit 0 + fi + + VAL_NAME=$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME" + + echo "Recover validator $VAL_NAME" + $CHAIN_BIN init $VAL_NAME --chain-id $CHAIN_ID + jq -r ".validators[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $VAL_NAME --index $VAL_INDEX --recover --keyring-backend="test" + + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o $CHAIN_DIR/config/genesis.json + echo "Genesis file that we got....." + cat $CHAIN_DIR/config/genesis.json + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'false' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + + echo "Running setup config script..." + bash -e /scripts/update-config.sh + + curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id + NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") + if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" + exit 1 + fi + + GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 + echo "Node P2P: $GENESIS_NODE_P2P" + sed -i "s/persistent_peers = \"\"/persistent_peers = \"$GENESIS_NODE_P2P\"/g" $CHAIN_DIR/config/config.toml + + echo "Printing the whole config.toml file" + cat $CHAIN_DIR/config/config.toml + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + containers: + - name: validator + image: ghcr.io/cosmology-tech/starship/osmosis:v25.0.0 + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KEYS_CONFIG + value: /configs/keys.json + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + set -eux + START_ARGS="" + + + # Starting the chain + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + lifecycle: + postStart: + exec: + command: + - bash + - '-c' + - '-e' + - |- + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + set -eux + export + VAL_INDEX=${HOSTNAME##*-} + VAL_NAME="$(jq -r ".validators[0].name" $KEYS_CONFIG)-$VAL_INDEX" + echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME. Chain bin $CHAIN_BIN" + + VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test") + echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort" + bash -e /scripts/transfer-tokens.sh \ + $VAL_ADDR \ + $DENOM \ + http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + $CHAIN_BIN keys list --keyring-backend test | jq + VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: uosmo + - name: COINS + value: 100000000000000uosmo,100000000000000uion + - name: CHAIN_BIN + value: osmosisd + - name: CHAIN_DIR + value: /root/.osmosisd + - name: CODE_REPO + value: https://github.com/osmosis-labs/osmosis + - name: DAEMON_HOME + value: /root/.osmosisd + - name: DAEMON_NAME + value: osmosisd + - name: CHAIN_ID + value: osmosis-1 + - name: GENESIS_HOST + value: osmosis-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.osmosisd/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.osmosisd/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.osmosisd/config/node_key.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.osmosisd/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.osmosisd + name: node + - mountPath: /configs + name: addresses + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-osmosis-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/cosmoshub-4-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/cosmoshub-4-configmap.yaml new file mode 100644 index 000000000..bfbbeae2f --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/cosmoshub-4-configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-cosmoshub-4 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-cosmoshub-4 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/deployment.yaml new file mode 100644 index 000000000..e605110c8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/deployment.yaml @@ -0,0 +1,121 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: osmosis-1,cosmoshub-4 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: osmosis,cosmoshub + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26653,http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9091,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9091 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1313,http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-osmosis-1 + mountPath: /chains/osmosis-1 + - name: registry-cosmoshub-4 + mountPath: /chains/cosmoshub-4 + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-osmosis-1 + configMap: + name: registry-osmosis-1 + - name: registry-cosmoshub-4 + configMap: + name: registry-cosmoshub-4 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/osmosis-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/osmosis-1-configmap.yaml new file mode 100644 index 000000000..14c583ed8 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/osmosis-1-configmap.yaml @@ -0,0 +1,126 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-osmosis-1 + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-osmosis-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/service.yaml new file mode 100644 index 000000000..f27f68271 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-configmap.yaml new file mode 100644 index 000000000..38e679b3b --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-configmap.yaml @@ -0,0 +1,175 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +data: + config.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = false + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'pull', interval = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'pull', interval = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } + config-cli.toml: | + # The global section has parameters that apply globally to the relayer operation. + [global] + log_level = "info" + + [mode] + [mode.clients] + enabled = true + refresh = true + misbehaviour = true + + [mode.connections] + enabled = true + + [mode.channels] + enabled = true + + [mode.packets] + enabled = true + clear_interval = 100 + clear_on_start = true + tx_confirmation = true + + [rest] + enabled = true + host = "0.0.0.0" + port = 3000 + + [telemetry] + enabled = false + host = "0.0.0.0" + port = 3001 + + + [[chains]] + id = "osmosis-1" + type = "CosmosSdk" + key_name = "osmosis-1-cli" + + rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'pull', interval = '500ms' } + trusted_node = false + account_prefix = "osmo" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uosmo" } + + [[chains]] + id = "cosmoshub-4" + type = "CosmosSdk" + key_name = "cosmoshub-4-cli" + + rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" + grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" + event_source = { mode = 'pull', interval = '500ms' } + trusted_node = false + account_prefix = "cosmos" + default_gas = 500000000 + max_gas = 1000000000 + rpc_timeout = "10s" + store_prefix = "ibc" + gas_multiplier = 2 + max_msg_num = 30 + max_tx_size = 2097152 + clock_drift = "5s" + max_block_time = "30s" + trusting_period = "75s" + trust_threshold = { numerator = "2", denominator = "3" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = "uatom" } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-service.yaml new file mode 100644 index 000000000..1e7de0ebb --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +spec: + clusterIP: None + ports: + - name: rest + port: 3000 + protocol: TCP + targetPort: 3000 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + selector: + app.kubernetes.io/name: hermes-osmos-cosmos diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-statefulset.yaml new file mode 100644 index 000000000..82042f86c --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/two-chain/relayer/hermes-osmos-cosmos-statefulset.yaml @@ -0,0 +1,293 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hermes-osmos-cosmos + labels: + starship.io/name: starship-e2e-tests + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: relayer + app.kubernetes.io/part-of: starship + app.kubernetes.io/role: hermes + app.kubernetes.io/name: hermes-osmos-cosmos +spec: + serviceName: hermes-osmos-cosmos + replicas: 1 + podManagementPolicy: Parallel + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmos-cosmos + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: relayer + app.kubernetes.io/type: hermes + app.kubernetes.io/name: hermes-osmos-cosmos + app.kubernetes.io/rawname: osmos-cosmos + app.kubernetes.io/version: 4.0.0-alpha.0 + spec: + initContainers: + - name: init-exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + args: + - |- + # Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + volumeMounts: + - mountPath: /exposer + name: exposer + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + - name: init-relayer + image: ghcr.io/hyperweb-io/starship/hermes:1.12.0 + imagePullPolicy: IfNotPresent + env: + - name: KEYS_CONFIG + value: /keys/keys.json + - name: RELAYER_DIR + value: /root/.hermes + - name: RELAYER_INDEX + value: ${HOSTNAME##*-} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - | + set -ux + + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml + + # Replace namespace placeholder with actual namespace environment variable + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml + sed -i "s|\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt + MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + + + echo "Creating key for osmosis-1..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name osmosis-1 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uosmo" + RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for osmosis-1-cli..." + hermes keys add \ + --chain osmosis-1 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name osmosis-1-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "true" || true + + echo "Creating key for cosmoshub-4..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \ + --key-name cosmoshub-4 \ + --hd-path "m/44'/118'/0'/0/0" + DENOM="uatom" + RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') + + echo "Transfer tokens to address $RLY_ADDR" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + echo "Creating key for cosmoshub-4-cli..." + hermes keys add \ + --chain cosmoshub-4 \ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \ + --key-name cosmoshub-4-cli \ + --hd-path "m/44'/118'/0'/0/0" + RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + + echo "Transfer tokens to address $RLY_ADDR_CLI" + bash -e /scripts/transfer-tokens.sh \ + $RLY_ADDR_CLI \ + $DENOM \ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \ + "false" || true + + hermes create channel \ + --new-client-connection --yes \ + --b-chain cosmoshub-4 \ + --a-chain osmosis-1 \ + --a-port transfer \ + --b-port transfer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /keys + name: keys + - mountPath: /scripts + name: scripts + containers: + - name: relayer + image: ghcr.io/hyperweb-io/starship/hermes:1.12.0 + imagePullPolicy: IfNotPresent + env: + - name: RELAYER_DIR + value: /root/.hermes + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - bash + - '-c' + args: + - |- + RLY_INDEX=${HOSTNAME##*-} + echo "Relayer Index: $RLY_INDEX" + hermes start + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - name: exposer + image: ghcr.io/hyperweb-io/starship/hermes:1.12.0 + imagePullPolicy: IfNotPresent + env: + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + command: + - bash + - '-c' + args: + - /exposer/exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + volumeMounts: + - mountPath: /root + name: relayer + - mountPath: /configs + name: relayer-config + - mountPath: /exposer + name: exposer + volumes: + - name: relayer + emptyDir: {} + - name: relayer-config + configMap: + name: hermes-osmos-cosmos + - name: keys + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts + - name: exposer + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/configmaps/keys.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/configmaps/keys.yaml new file mode 100644 index 000000000..863b359c1 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/configmaps/keys.yaml @@ -0,0 +1,107 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: keys + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: keys +data: + keys.json: | + { + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/configmaps/setup-scripts.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/configmaps/setup-scripts.yaml new file mode 100644 index 000000000..a9e1fd0e6 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/configmaps/setup-scripts.yaml @@ -0,0 +1,219 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: configmap + app.kubernetes.io/part-of: global + app.kubernetes.io/name: setup-scripts +data: + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/deployment.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/deployment.yaml new file mode 100644 index 000000000..c964d6817 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/deployment.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: registry + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/name: registry + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry + spec: + initContainers: + - name: wait-for-chains + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: + - /bin/sh + - '-c' + - |- + + while [ $(curl -sw '%{http_code}' http://xpla-1-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: xpla_1-1. Waiting for it to start..." + echo "Checking: http://xpla-1-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; + done + echo "Ready to start" + exit 0 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + containers: + - name: registry + image: ghcr.io/hyperweb-io/starship/registry:20250205-544757d + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: REGISTRY_CHAIN_CLIENT_IDS + value: xpla_1-1 + - name: REGISTRY_CHAIN_CLIENT_NAMES + value: xpla + - name: REGISTRY_CHAIN_CLIENT_RPCS + value: http://xpla-1-1-genesis.$(NAMESPACE).svc.cluster.local:26657 + - name: REGISTRY_CHAIN_API_RPCS + value: http://localhost:26657 + - name: REGISTRY_CHAIN_API_GRPCS + value: http://localhost:9090 + - name: REGISTRY_CHAIN_API_RESTS + value: http://localhost:1317 + - name: REGISTRY_CHAIN_CLIENT_EXPOSERS + value: http://xpla-1-1-genesis.$(NAMESPACE).svc.cluster.local:8081 + - name: REGISTRY_CHAIN_REGISTRY + value: /chains + volumeMounts: + - name: registry-xpla-1-1 + mountPath: /chains/xpla_1-1 + resources: + limits: + cpu: '0.1' + memory: 100M + requests: + cpu: '0.1' + memory: 100M + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 20 + volumes: + - name: registry-xpla-1-1 + configMap: + name: registry-xpla-1-1 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/service.yaml new file mode 100644 index 000000000..bb5761cfb --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: registry + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry +spec: + clusterIP: None + selector: + app.kubernetes.io/name: registry + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/xpla-1-1-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/xpla-1-1-configmap.yaml new file mode 100644 index 000000000..d2d9cc7f7 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/registry/xpla-1-1-configmap.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: registry-xpla-1-1 + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: registry + app.kubernetes.io/part-of: starship + app.kubernetes.io/name: registry-xpla-1-1 +data: + chain.json: |- + { + "$schema": "../chain.schema.json", + "chain_name": "xpla", + "status": "live", + "network_type": "devnet", + "chain_id": "xpla_1-1", + "pretty_name": "XPLA Chain Devnet", + "bech32_prefix": "xpla", + "daemon_name": "xplad", + "node_home": "/root/.xpla", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "axpla", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "axpla" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/xpladev/xpla", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } + } + assetlist.json: |- + { + "$schema": "../assetlist.schema.json", + "chain_name": "xpla", + "assets": [ + { + "base": "axpla", + "description": "The XPLA token is the native governance token for the XPLA chain.", + "denom_units": [ + { + "denom": "axpla", + "exponent": 0 + } + ], + "name": "XPLA", + "display": "XPLA", + "symbol": "XPLA", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.svg" + }, + "coingecko_id": "xpla" + } + ] + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-patch-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-patch-configmap.yaml new file mode 100644 index 000000000..3f78a3b27 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-patch-configmap.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: patch-xpla-1-1 + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: xpla + app.kubernetes.io/part-of: xpla_1-1 + app.kubernetes.io/role: genesis-patch + starship.io/chain-name: xpla + starship.io/chain-id: xpla_1-1 +data: + genesis.json: |- + { + "app_state": { + "staking": { + "params": { + "unbonding_time": "300s" + } + } + } + } diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-service.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-service.yaml new file mode 100644 index 000000000..47358ad29 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-service.yaml @@ -0,0 +1,55 @@ +apiVersion: v1 +kind: Service +metadata: + name: xpla-1-1-genesis + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: xpla_1-1-genesis + app.kubernetes.io/type: xpla_1-1-service + app.kubernetes.io/role: genesis + starship.io/chain-name: xpla + starship.io/chain-id: xpla_1-1 +spec: + clusterIP: None + ports: + - name: address + port: 26658 + protocol: TCP + targetPort: 26658 + - name: grpc + port: 9090 + protocol: TCP + targetPort: 9090 + - name: grpc-web + port: 9091 + protocol: TCP + targetPort: 9091 + - name: p2p + port: 26656 + protocol: TCP + targetPort: 26656 + - name: rest + port: 1317 + protocol: TCP + targetPort: 1317 + - name: rpc + port: 26657 + protocol: TCP + targetPort: 26657 + - name: exposer + port: 8081 + protocol: TCP + targetPort: 8081 + - name: faucet + port: 8000 + protocol: TCP + targetPort: 8000 + - name: metrics + port: 26660 + protocol: TCP + targetPort: 26660 + selector: + app.kubernetes.io/name: xpla_1-1-genesis diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-statefulset.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-statefulset.yaml new file mode 100644 index 000000000..84ef49ed4 --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/genesis-statefulset.yaml @@ -0,0 +1,399 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: xpla-1-1-genesis + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/part-of: xpla_1-1 + app.kubernetes.io/id: xpla_1-1 + app.kubernetes.io/name: xpla_1-1-genesis + app.kubernetes.io/type: xpla_1-1-statefulset + app.kubernetes.io/role: genesis + starship.io/chain-name: xpla +spec: + serviceName: xpla-1-1-genesis + replicas: 1 + revisionHistoryLimit: 3 + selector: + matchLabels: + app.kubernetes.io/instance: xpla + app.kubernetes.io/name: xpla_1-1-genesis + template: + metadata: + annotations: + quality: release + role: api-gateway + sla: high + tier: gateway + labels: + app.kubernetes.io/instance: xpla + app.kubernetes.io/type: xpla_1-1 + app.kubernetes.io/name: xpla_1-1-genesis + app.kubernetes.io/rawname: xpla_1-1 + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/role: genesis + spec: + initContainers: + - name: init-genesis + image: ghcr.io/hyperweb-io/starship/xpla:main + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: axpla + - name: COINS + value: 100000000000000000000000000axpla + - name: CHAIN_BIN + value: xplad + - name: CHAIN_DIR + value: /root/.xpla + - name: CODE_REPO + value: https://github.com/xpladev/xpla + - name: DAEMON_HOME + value: /root/.xpla + - name: DAEMON_NAME + value: xplad + - name: CHAIN_ID + value: xpla_1-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: FAUCET_ENABLED + value: 'true' + - name: NUM_VALIDATORS + value: '1' + - name: NUM_RELAYERS + value: '0' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 + fi + + echo "Running setup genesis script..." + bash -e /scripts/create-genesis.sh + bash -e /scripts/update-genesis.sh + + echo "Create node id json file" + NODE_ID=$($CHAIN_BIN tendermint show-node-id) + echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + + echo "Create consensus key json file" + $CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json + cat $CHAIN_DIR/config/consensus_key.json + + echo "Add custom accounts and balances" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + echo "Adding balance to xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g 100000000000000000000000axpla --keyring-backend="test" + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.xpla + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - name: init-config + image: ghcr.io/hyperweb-io/starship/xpla:main + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: axpla + - name: COINS + value: 100000000000000000000000000axpla + - name: CHAIN_BIN + value: xplad + - name: CHAIN_DIR + value: /root/.xpla + - name: CODE_REPO + value: https://github.com/xpladev/xpla + - name: DAEMON_HOME + value: /root/.xpla + - name: DAEMON_NAME + value: xplad + - name: CHAIN_ID + value: xpla_1-1 + - name: TIME_IOTA_MS + value: '10' + - name: TIMEOUT_PROPOSE + value: 400ms + - name: TIMEOUT_PROPOSE_DELTA + value: 400ms + - name: TIMEOUT_PREVOTE + value: 400ms + - name: TIMEOUT_PREVOTE_DELTA + value: 400ms + - name: TIMEOUT_PRECOMMIT + value: 400ms + - name: TIMEOUT_PRECOMMIT_DELTA + value: 400ms + - name: TIMEOUT_COMMIT + value: 800ms + - name: KEYS_CONFIG + value: /configs/keys.json + - name: METRICS + value: 'true' + command: + - bash + - '-c' + - |- + VAL_INDEX=${HOSTNAME##*-} + echo "Validator Index: $VAL_INDEX" + + echo "Running setup config script..." + + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json + + bash -e /scripts/update-config.sh + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.xpla + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + - mountPath: /patch + name: patch + - name: init-faucet + image: ghcr.io/hyperweb-io/starship/faucet:20250325-2207109 + imagePullPolicy: IfNotPresent + command: + - bash + - '-c' + - cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /faucet + name: faucet + containers: + - name: validator + image: ghcr.io/hyperweb-io/starship/xpla:main + imagePullPolicy: IfNotPresent + env: + - name: DENOM + value: axpla + - name: COINS + value: 100000000000000000000000000axpla + - name: CHAIN_BIN + value: xplad + - name: CHAIN_DIR + value: /root/.xpla + - name: CODE_REPO + value: https://github.com/xpladev/xpla + - name: DAEMON_HOME + value: /root/.xpla + - name: DAEMON_NAME + value: xplad + - name: CHAIN_ID + value: xpla_1-1 + - name: FAUCET_ENABLED + value: 'true' + - name: SLOGFILE + value: slog.slog + command: + - bash + - '-c' + - |- + #!/bin/bash + set -euo pipefail + + START_ARGS="" + + + $CHAIN_BIN start $START_ARGS + resources: + limits: + cpu: '0.5' + memory: 500M + requests: + cpu: '0.5' + memory: 500M + volumeMounts: + - mountPath: /root/.xpla + name: node + - mountPath: /configs + name: addresses + - mountPath: /scripts + name: scripts + readinessProbe: + exec: + command: + - bash + - '-e' + - /scripts/chain-rpc-ready.sh + - http://localhost:26657 + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 15 + - name: exposer + image: ghcr.io/hyperweb-io/starship/exposer:20250205-544757d + imagePullPolicy: IfNotPresent + env: + - name: GENESIS_HOST + value: xpla-1-1-genesis + - name: GENESIS_PORT + value: '8081' + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EXPOSER_HTTP_PORT + value: '8081' + - name: EXPOSER_GRPC_PORT + value: '9099' + - name: EXPOSER_GENESIS_FILE + value: /root/.xpla/config/genesis.json + - name: EXPOSER_MNEMONIC_FILE + value: /configs/keys.json + - name: EXPOSER_PRIV_VAL_FILE + value: /root/.xpla/config/priv_validator_key.json + - name: EXPOSER_NODE_KEY_FILE + value: /root/.xpla/config/node_key.json + - name: EXPOSER_NODE_ID_FILE + value: /root/.xpla/config/node_id.json + - name: EXPOSER_PRIV_VAL_STATE_FILE + value: /root/.xpla/data/priv_validator_state.json + command: + - exposer + resources: + limits: + cpu: '0.2' + memory: 200M + requests: + cpu: '0.2' + memory: 200M + volumeMounts: + - mountPath: /root/.xpla + name: node + - mountPath: /configs + name: addresses + - name: faucet + image: ghcr.io/hyperweb-io/starship/xpla:main + imagePullPolicy: IfNotPresent + env: + - name: FAUCET_CONCURRENCY + value: '2' + - name: FAUCET_HTTP_PORT + value: '8000' + - name: FAUCET_CHAIN_BINARY + value: xplad + - name: FAUCET_CHAIN_ID + value: xpla_1-1 + - name: COINS + value: 100000000000000000000000000axpla + command: + - bash + - '-c' + - |- + CREDIT_COINS="" + FEES="" + for coin in ${COINS//,/ } + do + amt="${coin//[!0-9]/}" + denom="${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ ${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="${CREDIT_COINS},$creditAmt$denom" + fi + done + + export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + + export | grep "FAUCET" + + until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 + done + + /faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES" + resources: + limits: + cpu: '0.1' + memory: 128M + requests: + cpu: '0.1' + memory: 128M + volumeMounts: + - mountPath: /configs + name: addresses + - mountPath: /faucet + name: faucet + - mountPath: /scripts + name: scripts + readinessProbe: + httpGet: + path: /status + port: 8000 + initialDelaySeconds: 30 + periodSeconds: 10 + volumes: + - name: node + emptyDir: {} + - name: addresses + configMap: + name: keys + - name: scripts + configMap: + name: setup-scripts-xpla-1-1 + - name: patch + configMap: + name: patch-xpla-1-1 + - name: faucet + emptyDir: {} diff --git a/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/setup-scripts-configmap.yaml b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/setup-scripts-configmap.yaml new file mode 100644 index 000000000..047afc57d --- /dev/null +++ b/packages/packages/generator/__tests__/__output__/manifest-comparison/xpla/xpla/setup-scripts-configmap.yaml @@ -0,0 +1,607 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: setup-scripts-xpla-1-1 + labels: + starship.io/name: xpla + app.kubernetes.io/version: 4.0.0-alpha.0 + app.kubernetes.io/managed-by: starship + app.kubernetes.io/component: chain + app.kubernetes.io/name: setup-scripts-xpla-1-1 + app.kubernetes.io/part-of: xpla_1-1 + app.kubernetes.io/role: setup-scripts + starship.io/chain-name: xpla + starship.io/chain-id: xpla_1-1 +data: + create-genesis.sh: | + #!/bin/bash + + set -eux + + DENOM="${DENOM:=uosmo}" + COINS="${COINS:=100000000000000000uosmo}" + CHAIN_ID="${CHAIN_ID:=osmosis}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + 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 + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + + CHAIN_INIT_ID="$CHAIN_ID" + if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" + fi + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover + sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + + # Add genesis keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) + jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add faucet key to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) + jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + + # Add test keys to the keyring and self delegate initial coins + 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 relayers keys and delegate tokens + 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" + jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + # Add relayer-cli key and delegate tokens + RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" + echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" + jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + 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 + ## Add validators key and delegate tokens + 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" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" + done + fi + + echo "Creating gentx..." + COIN=$(echo $COINS | cut -d ',' -f1) + AMT=$(echo ${COIN//[!0-9]/} | sed -e "s/0000$//") + $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + + echo "Output of gentx" + cat $CHAIN_DIR/config/gentx/*.json | jq + + echo "Running collect-gentxs" + $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs + + ls $CHAIN_DIR/config + updateGenesis.sh: | + #!/bin/bash + + DENOM="${DENOM:=axpla}" + CHAIN_BIN="${CHAIN_BIN:=xplad}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.xpla}" + + set -eux + + ls $CHAIN_DIR/config + + echo "Update genesis.json file with updated local params" + 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 + + 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 + + echo "Update gov params" + 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 + + echo "Update evm params" + jq -r '.app_state.evm.params.evm_denom |= "'$DENOM'"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + + $CHAIN_BIN tendermint show-node-id + update-config.sh: | + #!/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 + create-validator.sh: | + #!/bin/bash + + DENOM="${DENOM:=uosmo}" + CHAIN_BIN="${CHAIN_BIN:=osmosisd}" + CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + VAL_NAME="${VAL_NAME:=osmosis}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + NODE_ARGS="${NODE_ARGS}" + GAS="${GAS:=auto}" + + set -eux + + # Wait for the node to be synced + max_tries=10 + while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] + do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 + done + + # Function to compare version numbers + version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi + } + + # Check if cosmos_sdk_version is greater than a specified version + is_greater() { + version_compare "$1" "$2" + return $? + } + + function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.json + + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \ + --node $NODE_URL \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --fees 100000$DENOM \ + --keyring-backend="test" \ + --output json \ + --gas $GAS \ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \ + --node $NODE_URL \ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \ + --moniker $VAL_NAME \ + --amount 5000000000$DENOM \ + --chain-id $CHAIN_ID \ + --from $VAL_NAME \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --keyring-backend test \ + --home $CHAIN_DIR \ + --fees 100000$DENOM \ + --gas $GAS \ + --output json \ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq + } + + set +e + # Fetch the cosmos-sdk version to be able to perform the create-validator tx + cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \(.*\)/\1/p') + echo "cosmos_sdk_version: $cosmos_sdk_version" + set -e + + if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 + else + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default + fi + transfer-tokens.sh: | + #!/bin/bash + + ADDRESS="$1" + DENOM="$2" + FAUCET_URL="$3" + FAUCET_ENABLED="$4" + + set -eux + + function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \ + --request POST --write-out %{http_code} --silent --output /dev/null \ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \ + $FAUCET_URL) + echo $status_code + } + + if [[ $FAUCET_ENABLED == "false" ]]; + then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 + fi + + echo "Try to send tokens, if failed, wait for 5 seconds and try again" + max_tries=5 + while [[ max_tries -gt 0 ]] + do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 + done + build-chain.sh: | + #!/bin/bash + + set -euxo pipefail + + mkdir -p /tmp/chains $UPGRADE_DIR + + echo "Fetching code from tag" + mkdir -p /tmp/chains/$CHAIN_NAME + cd /tmp/chains/$CHAIN_NAME + + if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG} + elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-${CODE_TAG#"v"} + else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=${CODE_REPO##*/}-${CODE_TAG/\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi + fi + + echo "Fetch wasmvm if needed" + cd /tmp/chains/$CHAIN_NAME/$code_dir + WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) + if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a + fi + + echo "Build chain binary" + cd /tmp/chains/$CHAIN_NAME/$code_dir + CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + + echo "Copy created binary to the upgrade directories" + if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin + else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + fi + + echo "Cleanup" + rm -rf /tmp/chains/$CHAIN_NAME + chain-rpc-ready.sh: | + #!/bin/bash + # chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready + # Usage: chain-rpc-ready.sh [RPC_URL] + + set -euo pipefail + + RPC_URL=${1:-"http://localhost:26657"} + + echo 1>&2 "Checking if $RPC_URL is ready..." + + # Check if the RPC URL is reachable, + json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + + # and the bootstrap block state has been validated, + if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 + fi + + # and the node is not catching up. + if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 + fi + + echo "$json" | jq -r .result + exit 0 + ibc-connection.sh: | + #!/bin/bash + + REGISTRY_URL="$1" + CHAIN_1="$2" + CHAIN_2="$3" + + set -eux + + function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID + } + + echo "Try to get connection id, if failed, wait for 2 seconds and try again" + max_tries=20 + while [[ max_tries -gt 0 ]] + do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 + done + create-ics.sh: | + #!/bin/bash + + set -euxo pipefail + + DENOM="${DENOM:=uatom}" + CHAIN_ID="${CHAIN_ID:=cosmoshub-1}" + CHAIN_BIN="${CHAIN_BIN:=gaiad}" + NODE_URL="${NODE_URL:=http://0.0.0.0:26657}" + KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}" + + PROPOSAL_FILE="${PROPOSAL_FILE}" + KEY_NAME="ics-setup" + MAX_RETRIES=3 + RETRY_INTERVAL=30 + SUBMIT_PROPOSAL_CMD="" + + add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") + } + + get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" + } + + stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." + } + + submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi + + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes) + echo $PROPOSAL_TX + + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi + + sleep 5 + } + + get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 + } + + vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \ + --from $KEY_NAME \ + --chain-id $CHAIN_ID \ + --node $NODE_URL \ + --keyring-backend="test" \ + --gas auto --gas-adjustment 2 \ + --output json \ + --yes + sleep 5 + } + + wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 + } + + main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass + } + + main diff --git a/packages/packages/generator/__tests__/__snapshots__/builder.config.test.ts.snap b/packages/packages/generator/__tests__/__snapshots__/builder.config.test.ts.snap index 7272d2f7a..a3bcdbe61 100644 --- a/packages/packages/generator/__tests__/__snapshots__/builder.config.test.ts.snap +++ b/packages/packages/generator/__tests__/__snapshots__/builder.config.test.ts.snap @@ -22,59 +22,53 @@ exports[`BuilderManager Config Files Tests Config: agoric should generate valid "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -278,17 +272,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.agoric/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -369,7 +363,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -461,6 +455,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "agoric-3", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -550,6 +576,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "agoric-3", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -1388,178 +1446,6 @@ $CHAIN_BIN tendermint show-node-id "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -1702,118 +1588,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -1878,128 +1652,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -2035,59 +1687,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -2291,17 +1937,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -2382,7 +2028,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -2474,6 +2120,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -2563,6 +2241,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -3286,23 +2996,222 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-cosmoshub-4", }, }, - "registry/config-configmap.yaml": { + "registry/agoric-3-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "agoric", + "assets": [ + { + "base": "ubld", + "description": "The native token of Agoric", + "name": "Agoric", + "display": "bld", + "symbol": "BLD", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.svg" + }, + "denom_units": [ + { + "denom": "ubld", + "exponent": 0 + }, + { + "denom": "bld", + "exponent": 6 + } + ], + "coingecko_id": "agoric", + "keywords": [ + "agoric" + ] + }, + { + "base": "uist", + "description": "IST is the stable token used by the Agoric chain for execution fees and commerce.", + "name": "Inter Stable Token", + "display": "ist", + "symbol": "IST", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.svg" + }, + "denom_units": [ + { + "denom": "uist", + "exponent": 0 + }, + { + "denom": "ist", + "exponent": 6 + } + ], + "coingecko_id": "inter-stable-token", + "keywords": [ + "inter-stable-token" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "agoric", + "status": "live", + "network_type": "devnet", + "chain_id": "agoric-3", + "pretty_name": "Agoric Devnet", + "bech32_prefix": "agoric", + "daemon_name": "agd", + "node_home": "/root/.agoric", + "key_algos": [ + "secp256k1" + ], + "slip44": "564", + "fees": { + "fee_tokens": [ + { + "denom": "ubld", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ubld" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/Agoric/agoric-sdk", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-agoric-3", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-agoric-3", + }, + }, + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "agoric-3.json": "{"chain_name":"agoric","assets":[{"base":"ubld","description":"The native token of Agoric","name":"Agoric","display":"bld","symbol":"BLD","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.svg"},"denom_units":[{"denom":"ubld","exponent":0},{"denom":"bld","exponent":6}],"coingecko_id":"agoric","keywords":["agoric"]},{"base":"uist","description":"IST is the stable token used by the Agoric chain for execution fees and commerce.","name":"Inter Stable Token","display":"ist","symbol":"IST","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.svg"},"denom_units":[{"denom":"uist","exponent":0},{"denom":"ist","exponent":6}],"coingecko_id":"inter-stable-token","keywords":["inter-stable-token"]}]}", - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -3323,14 +3232,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -3339,9 +3250,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "agoric-3,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "agoric,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -3359,34 +3286,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -3401,27 +3320,76 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/agoric-3", - "name": "chain-agoric-3", + "name": "registry-agoric-3", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: agoric-3. Waiting for it to start..." + echo "Checking: http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-agoric-3", + "name": "registry-agoric-3", }, - "name": "chain-agoric-3", + "name": "registry-agoric-3", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, @@ -3443,20 +3411,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -3501,9 +3470,9 @@ id = "agoric-3" type = "CosmosSdk" key_name = "agoric-3-cli" -rpc_addr = "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "agoric" default_gas = 500000000 @@ -3525,9 +3494,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -3582,9 +3551,9 @@ id = "agoric-3" type = "CosmosSdk" key_name = "agoric-3" -rpc_addr = "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "agoric" default_gas = 500000000 @@ -3606,9 +3575,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -3736,6 +3705,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -3788,12 +3765,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -3827,7 +3804,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -3848,38 +3825,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for agoric-3 service..." -wait-for-service agoric-3-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: agoric-3. Waiting for it to start..." + echo "Checking: http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-agoric-3", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -3889,9 +3857,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -3904,6 +3882,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -3916,7 +3898,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name agoric-3 \\ --hd-path "m/44'/564'/0'/0/0" - DENOM="ubld" RLY_ADDR=$(hermes --json keys list --chain agoric-3 | tail -1 | jq -r '.result."agoric-3".account') @@ -3927,13 +3908,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true +echo "Creating key for agoric-3-cli..." +hermes keys add \\ + --chain agoric-3 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name agoric-3-cli \\ + --hd-path "m/44'/564'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain agoric-3 | tail -1 | jq -r '.result."agoric-3-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -3943,6 +3938,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain agoric-3 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -4056,7 +4073,8 @@ exports[`BuilderManager Config Files Tests Config: agoric should have proper fil "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "agoric-3-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", "service.yaml", ], @@ -4070,7 +4088,7 @@ exports[`BuilderManager Config Files Tests Config: agoric should have proper fil exports[`BuilderManager Config Files Tests Config: agoric should have proper file organization for agoric: agoric-resource-counts 1`] = ` { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 4, "StatefulSet": 3, @@ -4194,178 +4212,6 @@ exports[`BuilderManager Config Files Tests Config: build-chain should generate v "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -4508,118 +4354,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -4684,128 +4418,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -4841,59 +4453,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -5097,17 +4703,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -5188,7 +4794,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -5280,6 +4886,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -5369,6 +5007,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -6112,59 +5782,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -6443,17 +6107,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -6474,11 +6138,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -6502,11 +6166,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -6571,6 +6235,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -6686,6 +6382,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -6786,59 +6514,53 @@ cat $CHAIN_DIR/config/config.toml", "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -7050,17 +6772,17 @@ START_ARGS="" "value": "/root/.persistenceCore/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -7141,7 +6863,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -7319,6 +7041,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "core-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -7410,6 +7164,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "core-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -8153,59 +7939,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -8485,17 +8265,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.persistenceCore/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -8600,11 +8380,11 @@ UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." - echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -8628,11 +8408,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -8697,6 +8477,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "core-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "core-1-genesis", @@ -8812,6 +8624,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "core-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "core-1-genesis", @@ -8892,23 +8736,190 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { + "registry/core-1-configmap.yaml": { "apiVersion": "v1", "data": { - "core-1.json": "{"chain_name":"persistencecore","assets":[]}", - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "persistencecore", + "assets": [ + { + "description": "The denom for token uxprt", + "base": "uxprt", + "name": "uxprt", + "display": "uxprt", + "symbol": "UXPRT", + "denom_units": [ + { + "denom": "uxprt", + "exponent": 0 + }, + { + "denom": "uxprt", + "exponent": 6 + } + ], + "coingecko_id": "persistencecore" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "persistencecore", + "status": "live", + "network_type": "devnet", + "chain_id": "core-1", + "pretty_name": "Persistence Devnet", + "bech32_prefix": "persistence", + "daemon_name": "persistenceCore", + "node_home": "/root/.persistenceCore", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uxprt", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uxprt" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/persistenceOne/persistenceCore", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-core-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-core-1", + }, + }, + "registry/cosmoshub-4-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -8929,14 +8940,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -8945,9 +8958,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "cosmoshub-4,core-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "cosmoshub,persistencecore", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26657,http://localhost:26658", + "value": "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -8965,34 +8994,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://core-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -9007,27 +9028,76 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, { "mountPath": "/chains/core-1", - "name": "chain-core-1", + "name": "registry-core-1", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, { "configMap": { - "name": "chain-core-1", + "name": "registry-core-1", }, - "name": "chain-core-1", + "name": "registry-core-1", }, ], }, @@ -9049,20 +9119,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -9107,9 +9178,9 @@ id = "core-1" type = "CosmosSdk" key_name = "core-1-cli" -rpc_addr = "http://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://core-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://core-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "persistence" default_gas = 500000000 @@ -9131,9 +9202,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -9188,9 +9259,9 @@ id = "core-1" type = "CosmosSdk" key_name = "core-1" -rpc_addr = "http://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://core-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://core-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://core-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://core-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "persistence" default_gas = 500000000 @@ -9212,9 +9283,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -9342,6 +9413,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -9394,12 +9473,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -9433,7 +9512,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -9454,38 +9533,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for core-1 service..." -wait-for-service core-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-core-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -9495,9 +9565,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -9510,6 +9590,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -9522,7 +9606,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name core-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uxprt" RLY_ADDR=$(hermes --json keys list --chain core-1 | tail -1 | jq -r '.result."core-1".account') @@ -9533,13 +9616,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://core-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true +echo "Creating key for core-1-cli..." +hermes keys add \\ + --chain core-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name core-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain core-1 | tail -1 | jq -r '.result."core-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://core-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -9549,6 +9646,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain core-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -9666,7 +9785,8 @@ exports[`BuilderManager Config Files Tests Config: build-chain should have prope "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "core-1-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", "service.yaml", ], @@ -9680,7 +9800,7 @@ exports[`BuilderManager Config Files Tests Config: build-chain should have prope exports[`BuilderManager Config Files Tests Config: build-chain should have proper file organization for build-chain: build-chain-resource-counts 1`] = ` { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 6, "StatefulSet": 5, @@ -9890,8 +10010,14 @@ geth --datadir /ethereum/execution --http \\ "periodSeconds": 10, }, "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -9947,14 +10073,20 @@ beacon-chain \\ "readinessProbe": { "httpGet": { "path": "/eth/v1/node/health", - "port": "3500", + "port": 3500, }, "initialDelaySeconds": 15, "periodSeconds": 20, }, "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -10006,14 +10138,20 @@ validator \\ "readinessProbe": { "httpGet": { "path": "/metrics", - "port": "8081", + "port": 8081, }, "initialDelaySeconds": 20, "periodSeconds": 30, }, "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -10055,8 +10193,14 @@ cp /config/jwt.hex /etc/secrets/jwt.hex", "imagePullPolicy": "IfNotPresent", "name": "init-genesis-beacon", "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -10086,8 +10230,14 @@ geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", "imagePullPolicy": "IfNotPresent", "name": "init-genesis-execution", "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -10149,19 +10299,19 @@ geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", "name": "http", "port": 8545, "protocol": "TCP", - "targetPort": "8545", + "targetPort": 8545, }, { "name": "ws", "port": 8546, "protocol": "TCP", - "targetPort": "8546", + "targetPort": 8546, }, { "name": "rpc", "port": 8551, "protocol": "TCP", - "targetPort": "8551", + "targetPort": 8551, }, ], "selector": { @@ -10459,7 +10609,7 @@ beacon-chain \\ "readinessProbe": { "httpGet": { "path": "/eth/v1/node/health", - "port": "3500", + "port": 3500, }, "initialDelaySeconds": 15, "periodSeconds": 20, @@ -10524,7 +10674,7 @@ validator \\ "readinessProbe": { "httpGet": { "path": "/metrics", - "port": "8081", + "port": 8081, }, "initialDelaySeconds": 20, "periodSeconds": 30, @@ -10685,19 +10835,19 @@ geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", "name": "http", "port": 8545, "protocol": "TCP", - "targetPort": "8545", + "targetPort": 8545, }, { "name": "ws", "port": 8546, "protocol": "TCP", - "targetPort": "8546", + "targetPort": 8546, }, { "name": "rpc", "port": 8551, "protocol": "TCP", - "targetPort": "8551", + "targetPort": 8551, }, ], "selector": { @@ -10843,178 +10993,6 @@ exports[`BuilderManager Config Files Tests Config: evmos should generate valid Y "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -11157,118 +11135,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -11333,128 +11199,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -11490,59 +11234,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -11746,17 +11484,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -11837,7 +11575,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -11929,6 +11667,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -12018,6 +11788,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -12748,7 +12550,7 @@ $CHAIN_BIN tendermint show-node-id "labels": { "app.kubernetes.io/component": "chain", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "evmos-9000-1-genesis", + "app.kubernetes.io/name": "evmos_9000-1-genesis", "app.kubernetes.io/role": "genesis", "app.kubernetes.io/type": "evmos_9000-1-service", "app.kubernetes.io/version": "4.0.0-alpha.0", @@ -12761,63 +12563,57 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { - "app.kubernetes.io/name": "evmos-9000-1-genesis", + "app.kubernetes.io/name": "evmos_9000-1-genesis", }, }, }, @@ -12829,7 +12625,7 @@ $CHAIN_BIN tendermint show-node-id "app.kubernetes.io/component": "chain", "app.kubernetes.io/id": "evmos_9000-1", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "evmos-9000-1-genesis", + "app.kubernetes.io/name": "evmos_9000-1-genesis", "app.kubernetes.io/part-of": "evmos_9000-1", "app.kubernetes.io/role": "genesis", "app.kubernetes.io/type": "evmos_9000-1-statefulset", @@ -13017,17 +12813,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.evmosd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -13108,7 +12904,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -13200,6 +12996,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "evmos_9000-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -13289,6 +13117,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "evmos_9000-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -14019,7 +13879,7 @@ $CHAIN_BIN tendermint show-node-id "labels": { "app.kubernetes.io/component": "chain", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "evmos-9000-1-validator", + "app.kubernetes.io/name": "evmos_9000-1-validator", "app.kubernetes.io/role": "validator", "app.kubernetes.io/type": "evmos_9000-1-service", "app.kubernetes.io/version": "4.0.0-alpha.0", @@ -14032,63 +13892,57 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { - "app.kubernetes.io/name": "evmos-9000-1-validator", + "app.kubernetes.io/name": "evmos_9000-1-validator", }, }, }, @@ -14100,7 +13954,7 @@ $CHAIN_BIN tendermint show-node-id "app.kubernetes.io/component": "chain", "app.kubernetes.io/id": "evmos_9000-1", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "evmos-9000-1-validator", + "app.kubernetes.io/name": "evmos_9000-1-validator", "app.kubernetes.io/part-of": "evmos_9000-1", "app.kubernetes.io/role": "validator", "app.kubernetes.io/type": "evmos_9000-1-statefulset", @@ -14363,17 +14217,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.evmosd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -14394,11 +14248,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." - echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -14422,11 +14276,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -14491,6 +14345,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "evmos_9000-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "evmos-9000-1-genesis", @@ -14606,6 +14492,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "evmos_9000-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "evmos-9000-1-genesis", @@ -14686,23 +14604,99 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "evmos-9000-1.json": "{"chain_name":"evmos","assets":[{"base":"aevmos","description":"The native EVM, governance and staking token of the Evmos Hub","denom_units":[{"denom":"aevmos","exponent":0},{"denom":"evmos","exponent":18}],"name":"Evmos","display":"evmos","symbol":"EVMOS","logo_URIs":{"svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.svg","png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png"},"coingecko_id":"evmos"}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -14723,14 +14717,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -14739,9 +14735,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "evmos_9000-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "evmos,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -14759,34 +14771,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -14801,33 +14805,177 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/evmos_9000-1", - "name": "chain-evmos-9000-1", + "name": "registry-evmos-9000-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-evmos-9000-1", + "name": "registry-evmos-9000-1", }, - "name": "chain-evmos-9000-1", + "name": "registry-evmos-9000-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/evmos-9000-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "evmos", + "assets": [ + { + "base": "aevmos", + "description": "The native EVM, governance and staking token of the Evmos Hub", + "denom_units": [ + { + "denom": "aevmos", + "exponent": 0 + }, + { + "denom": "evmos", + "exponent": 18 + } + ], + "name": "Evmos", + "display": "evmos", + "symbol": "EVMOS", + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.svg", + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png" + }, + "coingecko_id": "evmos" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "evmos", + "status": "live", + "network_type": "devnet", + "chain_id": "evmos_9000-1", + "pretty_name": "Evmos Devnet", + "bech32_prefix": "evmos", + "daemon_name": "evmosd", + "node_home": "/root/.evmosd", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "aevmos", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "aevmos" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/evmos/evmos", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-evmos-9000-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-evmos-9000-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -14843,20 +14991,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -14901,9 +15050,9 @@ id = "evmos_9000-1" type = "CosmosSdk" key_name = "evmos_9000-1-cli" -rpc_addr = "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "evmos" default_gas = 500000000 @@ -14925,9 +15074,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -14982,9 +15131,9 @@ id = "evmos_9000-1" type = "CosmosSdk" key_name = "evmos_9000-1" -rpc_addr = "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "evmos" default_gas = 500000000 @@ -15006,9 +15155,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -15136,6 +15285,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -15188,12 +15345,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -15227,7 +15384,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -15248,38 +15405,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for evmos-9000-1 service..." -wait-for-service evmos-9000-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: evmos_9000-1. Waiting for it to start..." + echo "Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-evmos-9000-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -15289,9 +15437,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -15304,6 +15462,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -15316,7 +15478,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name evmos_9000-1 \\ --hd-path "m/44'/60'/0'/0/0" - DENOM="aevmos" RLY_ADDR=$(hermes --json keys list --chain evmos_9000-1 | tail -1 | jq -r '.result."evmos_9000-1".account') @@ -15327,13 +15488,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true +echo "Creating key for evmos_9000-1-cli..." +hermes keys add \\ + --chain evmos_9000-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name evmos_9000-1-cli \\ + --hd-path "m/44'/60'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain evmos_9000-1 | tail -1 | jq -r '.result."evmos_9000-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -15343,6 +15518,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain evmos_9000-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -15458,8 +15655,9 @@ exports[`BuilderManager Config Files Tests Config: evmos should have proper file "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "evmos-9000-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -15472,7 +15670,7 @@ exports[`BuilderManager Config Files Tests Config: evmos should have proper file exports[`BuilderManager Config Files Tests Config: evmos should have proper file organization for evmos: evmos-resource-counts 1`] = ` { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 5, "StatefulSet": 4, @@ -15596,178 +15794,6 @@ exports[`BuilderManager Config Files Tests Config: hyperweb should generate vali "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -15910,118 +15936,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -16086,128 +16000,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -16348,59 +16140,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -16604,17 +16390,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.hyperd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "Always", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -16695,7 +16481,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -16787,6 +16573,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "test-hyperweb-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -16876,6 +16694,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "test-hyperweb-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -17619,59 +17469,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -17950,17 +17794,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.hyperd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "Always", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -17981,11 +17825,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: test-hyperweb-1. Waiting for it to start..." - echo "Checking: http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: test-hyperweb-1. Waiting for it to start..." + echo "Checking: http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -18009,11 +17853,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -18078,6 +17922,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "test-hyperweb-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "test-hyperweb-1-genesis", @@ -18193,6 +18069,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "test-hyperweb-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "test-hyperweb-1-genesis", @@ -18273,24 +18181,6 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "test-hyperweb-1.json": "{"chain_name":"hyperweb","assets":[{"base":"uhyper","description":"The meme coin for Hyperweb chain.","name":"Hyper","display":"hyper","symbol":"HYPR","logo_URIs":{"png":"https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-png.png","svg":"https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-svg.svg"},"denom_units":[{"denom":"uhyper","exponent":0},{"denom":"hyper","exponent":6}],"coingecko_id":"hyper","keywords":["hyper"]}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -18309,14 +18199,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -18325,9 +18217,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "test-hyperweb-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "hyperweb", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26657", + "value": "http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -18345,34 +18253,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://test-hyperweb-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -18387,17 +18287,60 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/test-hyperweb-1", - "name": "chain-test-hyperweb-1", + "name": "registry-test-hyperweb-1", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: test-hyperweb-1. Waiting for it to start..." + echo "Checking: http://test-hyperweb-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "Always", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-test-hyperweb-1", + "name": "registry-test-hyperweb-1", }, - "name": "chain-test-hyperweb-1", + "name": "registry-test-hyperweb-1", }, ], }, @@ -18419,21 +18362,120 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", + }, + }, + }, + "registry/test-hyperweb-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "hyperweb", + "assets": [ + { + "base": "uhyper", + "description": "The meme coin for Hyperweb chain.", + "name": "Hyper", + "display": "hyper", + "symbol": "HYPR", + "logo_URIs": { + "png": "https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-png.png", + "svg": "https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-svg.svg" + }, + "denom_units": [ + { + "denom": "uhyper", + "exponent": 0 + }, + { + "denom": "hyper", + "exponent": 6 + } + ], + "coingecko_id": "hyper", + "keywords": [ + "hyper" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "hyperweb", + "status": "live", + "network_type": "devnet", + "chain_id": "test-hyperweb-1", + "pretty_name": "Hyperweb Devnet", + "bech32_prefix": "hyper", + "daemon_name": "hyperd", + "node_home": "/root/.hyperd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uhyper", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uhyper" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/hyperweb-io/hyperweb", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-test-hyperweb-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", }, + "name": "registry-test-hyperweb-1", }, }, } @@ -18457,9 +18499,9 @@ exports[`BuilderManager Config Files Tests Config: hyperweb should have proper f "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", "service.yaml", + "test-hyperweb-1-configmap.yaml", ], } `; @@ -18590,178 +18632,6 @@ exports[`BuilderManager Config Files Tests Config: ingress-monitoring-full shoul "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -18904,118 +18774,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -19080,128 +18838,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -19237,65 +18873,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -19499,17 +19129,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -19590,7 +19220,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -19682,6 +19312,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -19771,6 +19433,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -20514,65 +20208,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -20851,17 +20539,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -20882,11 +20570,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -20910,11 +20598,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -20979,6 +20667,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -21094,6 +20814,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -21302,7 +21054,7 @@ cat $CHAIN_DIR/config/config.toml", "name": "http", "port": 8080, "protocol": "TCP", - "targetPort": "8080", + "targetPort": 8080, }, ], "selector": { @@ -24611,7 +24363,7 @@ scrape_configs: "name": "http", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { @@ -24639,65 +24391,59 @@ scrape_configs: "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -24901,17 +24647,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -24992,7 +24738,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -25084,6 +24830,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -25173,6 +24951,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -25916,65 +25726,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -26253,17 +26057,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -26284,11 +26088,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -26312,11 +26116,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -26381,6 +26185,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -26496,6 +26332,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -26576,23 +26444,105 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests-full-stack", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -26613,14 +26563,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests-full-stack", }, @@ -26629,9 +26581,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -26649,34 +26617,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -26691,33 +26651,211 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests-full-stack", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -26733,20 +26871,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -26791,9 +26930,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -26815,9 +26954,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -26872,9 +27011,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -26896,9 +27035,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -27026,6 +27165,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -27078,12 +27225,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -27117,7 +27264,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -27138,38 +27285,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -27179,9 +27317,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -27194,6 +27342,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -27206,7 +27358,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -27217,13 +27368,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -27233,6 +27398,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain osmosis-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -27375,8 +27562,9 @@ exports[`BuilderManager Config Files Tests Config: ingress-monitoring-full shoul "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -27391,7 +27579,7 @@ exports[`BuilderManager Config Files Tests Config: ingress-monitoring-full shoul { "ClusterRole": 1, "ClusterRoleBinding": 1, - "ConfigMap": 11, + "ConfigMap": 12, "Deployment": 5, "Ingress": 1, "Issuer": 1, @@ -27517,178 +27705,6 @@ exports[`BuilderManager Config Files Tests Config: ingress-only should generate "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -27831,118 +27847,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -28007,128 +27911,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -28271,7 +28053,7 @@ $CHAIN_BIN tendermint show-node-id "name": "http", "port": 8080, "protocol": "TCP", - "targetPort": "8080", + "targetPort": 8080, }, ], "selector": { @@ -28593,59 +28375,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -28849,17 +28625,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -28940,7 +28716,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -29032,6 +28808,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -29121,6 +28929,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -29844,24 +29684,6 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-osmosis-1", }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-ingress-test", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -29880,14 +29702,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-ingress-test", }, @@ -29896,9 +29720,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -29916,34 +29756,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -29958,23 +29790,195 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-ingress-test", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -29990,20 +29994,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -30035,8 +30040,8 @@ exports[`BuilderManager Config Files Tests Config: ingress-only should have prop "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], } @@ -30170,178 +30175,6 @@ exports[`BuilderManager Config Files Tests Config: injective should generate val "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -30484,118 +30317,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -30660,128 +30381,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -30817,59 +30416,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -31073,17 +30666,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -31164,7 +30757,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -31256,6 +30849,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -31345,6 +30970,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -32088,59 +31745,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -32344,17 +31995,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.injectived/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -32435,7 +32086,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -32527,6 +32178,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "injective-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -32616,6 +32299,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "injective-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -33368,59 +33083,53 @@ $CHAIN_BIN validate-genesis "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -33699,17 +33408,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.injectived/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -33730,11 +33439,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." - echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -33758,11 +33467,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -33827,6 +33536,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "injective-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "injective-1-genesis", @@ -33942,6 +33683,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "injective-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "injective-1-genesis", @@ -34022,23 +33795,99 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "injective-1.json": "{"chain_name":"injective","assets":[{"base":"inj","description":"The INJ token is the native governance token for the Injective chain.","denom_units":[{"denom":"inj","exponent":0},{"denom":"INJ","exponent":18}],"name":"Injective","display":"INJ","symbol":"INJ","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.svg"},"coingecko_id":"injective-protocol"}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -34059,14 +33908,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -34075,9 +33926,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "injective-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "injective,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -34095,34 +33962,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -34137,33 +33996,177 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/injective-1", - "name": "chain-injective-1", + "name": "registry-injective-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-injective-1", + "name": "registry-injective-1", }, - "name": "chain-injective-1", + "name": "registry-injective-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/injective-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "injective", + "assets": [ + { + "base": "inj", + "description": "The INJ token is the native governance token for the Injective chain.", + "denom_units": [ + { + "denom": "inj", + "exponent": 0 + }, + { + "denom": "INJ", + "exponent": 18 + } + ], + "name": "Injective", + "display": "INJ", + "symbol": "INJ", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.svg" + }, + "coingecko_id": "injective-protocol" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "injective", + "status": "live", + "network_type": "devnet", + "chain_id": "injective-1", + "pretty_name": "Injective Devnet", + "bech32_prefix": "inj", + "daemon_name": "injectived", + "node_home": "/root/.injectived", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "inj", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "inj" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/InjectiveLabs/injective-chain-releases", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-injective-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-injective-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -34179,20 +34182,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -34237,9 +34241,9 @@ id = "injective-1" type = "CosmosSdk" key_name = "injective-1-cli" -rpc_addr = "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "inj" default_gas = 500000000 @@ -34261,9 +34265,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -34318,9 +34322,9 @@ id = "injective-1" type = "CosmosSdk" key_name = "injective-1" -rpc_addr = "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://injective-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://injective-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "inj" default_gas = 500000000 @@ -34342,9 +34346,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -34472,6 +34476,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -34524,12 +34536,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -34563,7 +34575,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -34584,38 +34596,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for injective-1 service..." -wait-for-service injective-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: injective-1. Waiting for it to start..." + echo "Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-injective-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -34625,9 +34628,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -34640,6 +34653,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -34652,7 +34669,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name injective-1 \\ --hd-path "m/44'/60'/0'/0/0" - DENOM="inj" RLY_ADDR=$(hermes --json keys list --chain injective-1 | tail -1 | jq -r '.result."injective-1".account') @@ -34663,13 +34679,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://injective-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true +echo "Creating key for injective-1-cli..." +hermes keys add \\ + --chain injective-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name injective-1-cli \\ + --hd-path "m/44'/60'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain injective-1 | tail -1 | jq -r '.result."injective-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://injective-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -34679,6 +34709,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain injective-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -34794,8 +34846,9 @@ exports[`BuilderManager Config Files Tests Config: injective should have proper "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "injective-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -34808,7 +34861,7 @@ exports[`BuilderManager Config Files Tests Config: injective should have proper exports[`BuilderManager Config Files Tests Config: injective should have proper file organization for injective: injective-resource-counts 1`] = ` { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 5, "StatefulSet": 4, @@ -34932,178 +34985,6 @@ exports[`BuilderManager Config Files Tests Config: multi-relayer should generate "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -35246,118 +35127,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -35422,128 +35191,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -35579,59 +35226,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -35835,17 +35476,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -35921,6 +35562,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -36010,6 +35683,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -36723,59 +36428,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -36979,17 +36678,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.juno/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -37065,6 +36764,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "juno-2", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -37154,6 +36885,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "juno-2", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -37867,59 +37630,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -38123,17 +37880,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -38209,6 +37966,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -38298,6 +38087,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -38991,24 +38812,99 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-osmosis-1", }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "juno-2.json": "{"chain_name":"juno","assets":[{"base":"ujuno","description":"The native token of JUNO Chain","name":"Juno","display":"juno","symbol":"JUNO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg"},"denom_units":[{"denom":"ujuno","exponent":0},{"denom":"juno","exponent":6}],"coingecko_id":"juno-network"}]}", - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -39029,14 +38925,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -39045,9 +38943,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1,cosmoshub-4,juno-2", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis,cosmoshub,juno", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657,http://localhost:26658", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -39065,34 +38979,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -39107,43 +39013,316 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, { "mountPath": "/chains/juno-2", - "name": "chain-juno-2", + "name": "registry-juno-2", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, { "configMap": { - "name": "chain-juno-2", + "name": "registry-juno-2", }, - "name": "chain-juno-2", + "name": "registry-juno-2", }, ], }, }, }, }, + "registry/juno-2-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "juno", + "assets": [ + { + "base": "ujuno", + "description": "The native token of JUNO Chain", + "name": "Juno", + "display": "juno", + "symbol": "JUNO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg" + }, + "denom_units": [ + { + "denom": "ujuno", + "exponent": 0 + }, + { + "denom": "juno", + "exponent": 6 + } + ], + "coingecko_id": "juno-network" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "juno", + "status": "live", + "network_type": "devnet", + "chain_id": "juno-2", + "pretty_name": "Juno Devnet", + "bech32_prefix": "juno", + "daemon_name": "junod", + "node_home": "/root/.juno", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "ujuno", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ujuno" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/CosmosContracts/juno", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-juno-2", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-juno-2", + }, + }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -39159,20 +39338,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -39217,9 +39397,9 @@ id = "juno-2" type = "CosmosSdk" key_name = "juno-2-cli" -rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "juno" default_gas = 500000000 @@ -39241,9 +39421,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -39298,9 +39478,9 @@ id = "juno-2" type = "CosmosSdk" key_name = "juno-2" -rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "juno" default_gas = 500000000 @@ -39322,9 +39502,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -39452,6 +39632,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -39504,12 +39692,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -39543,7 +39731,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -39564,38 +39752,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for juno-2 service..." -wait-for-service juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-juno-2", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -39605,9 +39784,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -39620,6 +39809,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -39632,7 +39825,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name juno-2 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="ujuno" RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') @@ -39643,13 +39835,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for juno-2-cli..." +hermes keys add \\ + --chain juno-2 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name juno-2-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -39659,6 +39865,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain juno-2 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -39793,9 +40021,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -39817,9 +40045,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -39874,9 +40102,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -39898,9 +40126,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -40028,6 +40256,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -40080,12 +40316,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -40119,7 +40355,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -40140,38 +40376,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -40181,9 +40408,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -40196,6 +40433,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -40208,7 +40449,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -40219,13 +40459,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -40235,6 +40489,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain osmosis-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -40369,9 +40645,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -40393,9 +40669,9 @@ id = "juno-2" type = "CosmosSdk" key_name = "juno-2-cli" -rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "juno" default_gas = 500000000 @@ -40450,9 +40726,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -40474,9 +40750,9 @@ id = "juno-2" type = "CosmosSdk" key_name = "juno-2" -rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "juno" default_gas = 500000000 @@ -40604,6 +40880,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -40656,12 +40940,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -40695,7 +40979,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -40716,38 +41000,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for juno-2 service..." -wait-for-service juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -40757,9 +41032,19 @@ wait-for-service juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-juno-2", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -40772,6 +41057,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -40784,7 +41073,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -40795,13 +41083,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + echo "Creating key for juno-2..." hermes keys add \\ --chain juno-2 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name juno-2 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="ujuno" RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') @@ -40811,6 +41113,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for juno-2-cli..." +hermes keys add \\ + --chain juno-2 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name juno-2-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain juno-2 \\ + --a-chain osmosis-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -40929,8 +41253,10 @@ exports[`BuilderManager Config Files Tests Config: multi-relayer should have pro "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "juno-2-configmap.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -40949,7 +41275,7 @@ exports[`BuilderManager Config Files Tests Config: multi-relayer should have pro exports[`BuilderManager Config Files Tests Config: multi-relayer should have proper file organization for multi-relayer: multi-relayer-resource-counts 1`] = ` { - "ConfigMap": 9, + "ConfigMap": 11, "Deployment": 1, "Service": 7, "StatefulSet": 6, @@ -41073,178 +41399,6 @@ exports[`BuilderManager Config Files Tests Config: multi-validator should genera "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -41387,118 +41541,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -41563,128 +41605,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -41720,59 +41640,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -42067,7 +41981,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -42159,6 +42073,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -42248,6 +42194,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -42991,59 +42969,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -43353,11 +43325,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -43450,6 +43422,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -43565,6 +43569,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -43645,24 +43681,6 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -43681,14 +43699,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -43697,9 +43717,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -43717,34 +43753,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -43759,23 +43787,189 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -43791,20 +43985,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -43825,8 +44020,8 @@ exports[`BuilderManager Config Files Tests Config: multi-validator should have p "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], } @@ -43958,178 +44153,6 @@ exports[`BuilderManager Config Files Tests Config: multi-validator-starship-fauc "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -44272,118 +44295,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -44448,128 +44359,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -44605,59 +44394,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -44952,7 +44735,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -45044,6 +44827,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -45133,6 +44948,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -45876,59 +45723,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -46238,11 +46079,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -46335,6 +46176,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -46450,6 +46323,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -46530,24 +46435,6 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -46566,14 +46453,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -46582,9 +46471,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -46602,34 +46507,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -46644,23 +46541,189 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -46676,20 +46739,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -46710,8 +46774,8 @@ exports[`BuilderManager Config Files Tests Config: multi-validator-starship-fauc "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], } @@ -46843,178 +46907,6 @@ exports[`BuilderManager Config Files Tests Config: neutron should generate valid "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -47157,118 +47049,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -47333,128 +47113,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -47490,59 +47148,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -47746,17 +47398,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -47837,7 +47489,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -47929,6 +47581,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -48018,6 +47702,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -48761,59 +48477,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -49017,17 +48727,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.neutrond/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -49103,6 +48813,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "neutron-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -49192,6 +48934,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "neutron-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -49234,11 +49008,11 @@ bash -e /scripts/update-config.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -49262,11 +49036,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -50744,23 +50518,99 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-neutron-1", }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "neutron-1.json": "{"chain_name":"neutron","assets":[{"description":"The native token of Neutron chain.","denom_units":[{"denom":"untrn","exponent":0},{"denom":"ntrn","exponent":6}],"base":"untrn","name":"Neutron","display":"ntrn","symbol":"NTRN","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg"},"coingecko_id":"neutron"}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -50781,14 +50631,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -50797,9 +50649,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "neutron-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "neutron,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -50817,34 +50685,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -50859,33 +50719,177 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/neutron-1", - "name": "chain-neutron-1", + "name": "registry-neutron-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-neutron-1", + "name": "registry-neutron-1", }, - "name": "chain-neutron-1", + "name": "registry-neutron-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/neutron-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "neutron", + "assets": [ + { + "description": "The native token of Neutron chain.", + "denom_units": [ + { + "denom": "untrn", + "exponent": 0 + }, + { + "denom": "ntrn", + "exponent": 6 + } + ], + "base": "untrn", + "name": "Neutron", + "display": "ntrn", + "symbol": "NTRN", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg" + }, + "coingecko_id": "neutron" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "neutron", + "status": "live", + "network_type": "devnet", + "chain_id": "neutron-1", + "pretty_name": "Neutron Devnet", + "bech32_prefix": "neutron", + "daemon_name": "neutrond", + "node_home": "/root/.neutrond", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "untrn", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "untrn" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/neutron-org/neutron", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-neutron-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-neutron-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -50901,20 +50905,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -50959,9 +50964,9 @@ id = "neutron-1" type = "CosmosSdk" key_name = "neutron-1-cli" ccv_consumer_chain = true -rpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "neutron" default_gas = 500000000 @@ -50983,9 +50988,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -51040,9 +51045,9 @@ id = "neutron-1" type = "CosmosSdk" key_name = "neutron-1" ccv_consumer_chain = true -rpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "neutron" default_gas = 500000000 @@ -51064,9 +51069,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -51194,6 +51199,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -51246,12 +51259,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -51285,7 +51298,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -51306,38 +51319,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for neutron-1 service..." -wait-for-service neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-neutron-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -51347,9 +51351,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -51362,6 +51376,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -51374,7 +51392,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name neutron-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="untrn" RLY_ADDR=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1".account') @@ -51385,13 +51402,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for neutron-1-cli..." +hermes keys add \\ + --chain neutron-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name neutron-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -51401,6 +51432,35 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --a-connection connection-0 \\ + --channel-version 1 \\ + --order ordered \\ + --a-chain neutron-1 \\ + --a-port consumer \\ + --b-port provider + +hermes create channel \\ + --a-connection connection-0 \\ + --a-chain neutron-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -51515,8 +51575,9 @@ exports[`BuilderManager Config Files Tests Config: neutron should have proper fi "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "neutron-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -51529,7 +51590,7 @@ exports[`BuilderManager Config Files Tests Config: neutron should have proper fi exports[`BuilderManager Config Files Tests Config: neutron should have proper file organization for neutron: neutron-resource-counts 1`] = ` { - "ConfigMap": 7, + "ConfigMap": 8, "Deployment": 1, "Service": 4, "StatefulSet": 3, @@ -51653,178 +51714,6 @@ exports[`BuilderManager Config Files Tests Config: neutron-relayer should genera "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -51967,118 +51856,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -52143,128 +51920,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -52300,59 +51955,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -52556,17 +52205,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -52647,7 +52296,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -52739,6 +52388,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -52828,6 +52509,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -53571,59 +53284,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -53827,17 +53534,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.neutrond/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -53913,6 +53620,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "neutron-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -54002,6 +53741,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "neutron-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -54044,11 +53815,11 @@ bash -e /scripts/update-config.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -54072,11 +53843,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -55554,23 +55325,99 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-neutron-1", }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "neutron-1.json": "{"chain_name":"neutron","assets":[{"description":"The native token of Neutron chain.","denom_units":[{"denom":"untrn","exponent":0},{"denom":"ntrn","exponent":6}],"base":"untrn","name":"Neutron","display":"ntrn","symbol":"NTRN","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg"},"coingecko_id":"neutron"}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -55591,14 +55438,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -55607,9 +55456,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "neutron-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "neutron,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -55627,34 +55492,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -55669,33 +55526,177 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/neutron-1", - "name": "chain-neutron-1", + "name": "registry-neutron-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-neutron-1", + "name": "registry-neutron-1", }, - "name": "chain-neutron-1", + "name": "registry-neutron-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/neutron-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "neutron", + "assets": [ + { + "description": "The native token of Neutron chain.", + "denom_units": [ + { + "denom": "untrn", + "exponent": 0 + }, + { + "denom": "ntrn", + "exponent": 6 + } + ], + "base": "untrn", + "name": "Neutron", + "display": "ntrn", + "symbol": "NTRN", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg" + }, + "coingecko_id": "neutron" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "neutron", + "status": "live", + "network_type": "devnet", + "chain_id": "neutron-1", + "pretty_name": "Neutron Devnet", + "bech32_prefix": "neutron", + "daemon_name": "neutrond", + "node_home": "/root/.neutrond", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "untrn", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "untrn" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/neutron-org/neutron", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-neutron-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-neutron-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -55711,20 +55712,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -55769,9 +55771,9 @@ id = "neutron-1" type = "CosmosSdk" key_name = "neutron-1-cli" ccv_consumer_chain = true -rpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "neutron" default_gas = 500000000 @@ -55793,9 +55795,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -55850,9 +55852,9 @@ id = "neutron-1" type = "CosmosSdk" key_name = "neutron-1" ccv_consumer_chain = true -rpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "neutron" default_gas = 500000000 @@ -55874,9 +55876,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -56004,6 +56006,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -56056,12 +56066,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -56095,7 +56105,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -56116,38 +56126,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for neutron-1 service..." -wait-for-service neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-neutron-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -56157,9 +56158,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -56172,6 +56183,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -56184,7 +56199,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name neutron-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="untrn" RLY_ADDR=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1".account') @@ -56195,13 +56209,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for neutron-1-cli..." +hermes keys add \\ + --chain neutron-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name neutron-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain neutron-1 | tail -1 | jq -r '.result."neutron-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -56211,6 +56239,35 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --a-connection connection-0 \\ + --channel-version 1 \\ + --order ordered \\ + --a-chain neutron-1 \\ + --a-port consumer \\ + --b-port provider + +hermes create channel \\ + --a-connection connection-0 \\ + --a-chain neutron-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -56508,38 +56565,29 @@ neutron-query-relayer start --config /configs/config.json", ], "initContainers": [ { - "args": [ - "echo "Waiting for neutron-1 service..." -wait-for-service neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-neutron-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -56549,9 +56597,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -56705,8 +56763,9 @@ exports[`BuilderManager Config Files Tests Config: neutron-relayer should have p "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "neutron-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -56722,7 +56781,7 @@ exports[`BuilderManager Config Files Tests Config: neutron-relayer should have p exports[`BuilderManager Config Files Tests Config: neutron-relayer should have proper file organization for neutron-relayer: neutron-relayer-resource-counts 1`] = ` { - "ConfigMap": 8, + "ConfigMap": 9, "Deployment": 1, "Service": 5, "StatefulSet": 4, @@ -56846,178 +56905,6 @@ exports[`BuilderManager Config Files Tests Config: noble should generate valid Y "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -57160,118 +57047,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -57336,128 +57111,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -57493,59 +57146,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -57749,17 +57396,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -57840,7 +57487,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -57932,6 +57579,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -58021,6 +57700,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -58764,59 +58475,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -59020,17 +58725,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.noble/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -59111,7 +58816,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -59203,6 +58908,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "noble-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -59292,6 +59029,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "noble-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -60321,23 +60090,99 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-noble-1", }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "noble-1.json": "{"chain_name":"noble","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"]}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -60358,14 +60203,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -60374,9 +60221,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "noble-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "noble,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -60394,34 +60257,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -60436,33 +60291,205 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/noble-1", - "name": "chain-noble-1", + "name": "registry-noble-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: noble-1. Waiting for it to start..." + echo "Checking: http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-noble-1", + "name": "registry-noble-1", }, - "name": "chain-noble-1", + "name": "registry-noble-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/noble-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "noble", + "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" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "noble", + "status": "live", + "network_type": "devnet", + "chain_id": "noble-1", + "pretty_name": "Noble Devnet", + "bech32_prefix": "noble", + "daemon_name": "nobled", + "node_home": "/root/.noble", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uusdc", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uusdc" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/noble-assets/noble", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-noble-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-noble-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -60478,20 +60505,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -60536,9 +60564,9 @@ id = "noble-1" type = "CosmosSdk" key_name = "noble-1-cli" -rpc_addr = "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "noble" default_gas = 500000000 @@ -60560,9 +60588,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -60617,9 +60645,9 @@ id = "noble-1" type = "CosmosSdk" key_name = "noble-1" -rpc_addr = "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://noble-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://noble-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "noble" default_gas = 500000000 @@ -60641,9 +60669,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -60771,6 +60799,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -60823,12 +60859,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -60862,7 +60898,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -60883,38 +60919,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for noble-1 service..." -wait-for-service noble-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: noble-1. Waiting for it to start..." + echo "Checking: http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-noble-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -60924,9 +60951,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -60939,6 +60976,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -60951,7 +60992,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name noble-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uusdc" RLY_ADDR=$(hermes --json keys list --chain noble-1 | tail -1 | jq -r '.result."noble-1".account') @@ -60962,13 +61002,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://noble-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true +echo "Creating key for noble-1-cli..." +hermes keys add \\ + --chain noble-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name noble-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain noble-1 | tail -1 | jq -r '.result."noble-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://noble-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -60978,6 +61032,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain noble-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -61091,8 +61167,9 @@ exports[`BuilderManager Config Files Tests Config: noble should have proper file "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "noble-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -61105,7 +61182,7 @@ exports[`BuilderManager Config Files Tests Config: noble should have proper file exports[`BuilderManager Config Files Tests Config: noble should have proper file organization for noble: noble-resource-counts 1`] = ` { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 4, "StatefulSet": 3, @@ -61229,178 +61306,6 @@ exports[`BuilderManager Config Files Tests Config: one-chain should generate val "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -61543,118 +61448,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -61719,128 +61512,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -61915,65 +61586,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -62177,17 +61842,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -62268,7 +61933,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -62366,6 +62031,38 @@ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo10eykchznjdn8jdlwaj5v9wvlm "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -62457,6 +62154,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -63190,24 +62919,6 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-osmosis-1", }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -63226,14 +62937,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -63242,9 +62955,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -63262,34 +62991,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -63304,23 +63025,189 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -63336,20 +63223,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -63369,8 +63257,8 @@ exports[`BuilderManager Config Files Tests Config: one-chain should have proper "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], } @@ -63502,178 +63390,6 @@ exports[`BuilderManager Config Files Tests Config: one-chain-cometmock should ge "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -63816,118 +63532,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -63992,128 +63596,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -64129,87 +63611,39 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts", }, }, - "cosmoshub/genesis-service.yaml": { + "cosmoshub/cometmock-service.yaml": { "apiVersion": "v1", "kind": "Service", "metadata": { "labels": { "app.kubernetes.io/component": "chain", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "cosmoshub-4-genesis", - "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/role": "cometmock", "app.kubernetes.io/type": "cosmoshub-4-service", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/chain-id": "cosmoshub-4", "starship.io/chain-name": "cosmoshub", "starship.io/name": "starship-e2e-tests", }, - "name": "cosmoshub-4-genesis", + "name": "cosmoshub-4-cometmock", }, "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, - { - "name": "address", - "port": 26658, - "protocol": "TCP", - "targetPort": "26658", - }, - { - "name": "grpc", - "port": 9090, - "protocol": "TCP", - "targetPort": "9090", - }, - { - "name": "grpc-web", - "port": 9091, - "protocol": "TCP", - "targetPort": "9091", - }, - { - "name": "rest", - "port": 1317, - "protocol": "TCP", - "targetPort": "1317", - }, { "name": "rpc", - "port": 26657, - "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", - }, - { - "name": "exposer", - "port": 8081, - "protocol": "TCP", - "targetPort": "8081", - }, - { - "name": "faucet", - "port": 8000, + "port": 22331, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 22331, }, ], "selector": { - "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", }, }, }, - "cosmoshub/genesis-statefulset.yaml": { + "cosmoshub/cometmock-statefulset.yaml": { "apiVersion": "apps/v1", "kind": "StatefulSet", "metadata": { @@ -64217,26 +63651,26 @@ $CHAIN_BIN tendermint show-node-id "app.kubernetes.io/component": "chain", "app.kubernetes.io/id": "cosmoshub-4", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", "app.kubernetes.io/part-of": "cosmoshub-4", - "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/role": "cometmock", "app.kubernetes.io/type": "cosmoshub-4-statefulset", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/chain-name": "cosmoshub", "starship.io/name": "starship-e2e-tests", }, - "name": "cosmoshub-4-genesis", + "name": "cosmoshub-4-cometmock", }, "spec": { "replicas": 1, "revisionHistoryLimit": 3, "selector": { "matchLabels": { - "app.kubernetes.io/instance": "starship-e2e-tests", - "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/instance": "cosmoshub", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", }, }, - "serviceName": "cosmoshub-4-genesis", + "serviceName": "cosmoshub-4-cometmock", "template": { "metadata": { "annotations": { @@ -64246,11 +63680,10 @@ $CHAIN_BIN tendermint show-node-id "tier": "gateway", }, "labels": { - "app.kubernetes.io/instance": "starship-e2e-tests", - "app.kubernetes.io/name": "cosmoshub-4-genesis", - "app.kubernetes.io/rawname": "cosmoshub-4", - "app.kubernetes.io/role": "genesis", - "app.kubernetes.io/type": "cosmoshub-4", + "app.kubernetes.io/instance": "cosmoshub", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/rawname": "cosmoshub-4-cometmock", + "app.kubernetes.io/type": "cometmock", "app.kubernetes.io/version": "4.0.0-alpha.0", }, }, @@ -64260,13 +63693,10 @@ $CHAIN_BIN tendermint show-node-id "command": [ "bash", "-c", - "#!/bin/bash -set -euo pipefail - -START_ARGS="" -START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" - -$CHAIN_BIN start $START_ARGS", + "NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" +NODE_HOME_STR="/chain/genesis" + +/chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc", ], "env": [ { @@ -64302,17 +63732,37 @@ $CHAIN_BIN start $START_ARGS", "value": "cosmoshub-4", }, { - "name": "FAUCET_ENABLED", - "value": "false", + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", }, { - "name": "SLOGFILE", - "value": "slog.slog", + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", }, ], "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", "imagePullPolicy": "IfNotPresent", - "name": "validator", + "name": "comet", + "readinessProbe": { + "httpGet": { + "path": "/status", + "port": 22331, + }, + "initialDelaySeconds": 10, + "periodSeconds": 10, + }, "resources": { "limits": { "cpu": "0.3", @@ -64325,28 +63775,35 @@ $CHAIN_BIN start $START_ARGS", }, "volumeMounts": [ { - "mountPath": "/root/.gaia", + "mountPath": "/chain", "name": "node", }, - { - "mountPath": "/configs", - "name": "addresses", - }, { "mountPath": "/scripts", "name": "scripts", }, + { + "mountPath": "/configs", + "name": "addresses", + }, ], }, + ], + "initContainers": [ { "command": [ - "exposer", + "/bin/sh", + "-c", + "while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; +done + +echo "Ready to start" +exit 0", ], "env": [ - { - "name": "GENESIS_HOST", - "value": "cosmoshub-4-genesis", - }, { "name": "GENESIS_PORT", "value": "8081", @@ -64359,91 +63816,37 @@ $CHAIN_BIN start $START_ARGS", }, }, }, - { - "name": "EXPOSER_HTTP_PORT", - "value": "8081", - }, - { - "name": "EXPOSER_GRPC_PORT", - "value": "9099", - }, - { - "name": "EXPOSER_GENESIS_FILE", - "value": "/root/.gaia/config/genesis.json", - }, - { - "name": "EXPOSER_MNEMONIC_FILE", - "value": "/configs/keys.json", - }, - { - "name": "EXPOSER_PRIV_VAL_FILE", - "value": "/root/.gaia/config/priv_validator_key.json", - }, - { - "name": "EXPOSER_NODE_KEY_FILE", - "value": "/root/.gaia/config/node_key.json", - }, - { - "name": "EXPOSER_NODE_ID_FILE", - "value": "/root/.gaia/config/node_id.json", - }, - { - "name": "EXPOSER_PRIV_VAL_STATE_FILE", - "value": "/root/.gaia/data/priv_validator_state.json", - }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "curlimages/curl", "imagePullPolicy": "IfNotPresent", - "name": "exposer", + "name": "init-wait", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, - "volumeMounts": [ - { - "mountPath": "/root/.gaia", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", - }, - ], }, - ], - "initContainers": [ { "command": [ "bash", "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -if [ -f $CHAIN_DIR/config/genesis.json ]; then - echo "Genesis file exists, exiting init container" - exit 0 -fi - -echo "Running setup genesis script..." -bash -e /scripts/create-genesis.sh -bash -e /scripts/update-genesis.sh - -echo "Create node id json file" -NODE_ID=$($CHAIN_BIN tendermint show-node-id) -echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - -echo "Create consensus key json file" -$CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json -cat $CHAIN_DIR/config/consensus_key.json + "mkdir -p /chain/genesis/config +mkdir -p /chain/genesis/data +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json +echo "Genesis file that we got....." +cat /chain/genesis/config/genesis.json -echo "Add custom accounts and balances" -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "")", +## fetch priv_validator and priv_validator_state of all validators +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json +echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + +echo "copy cometmock binary to shared dir" +cp /usr/local/bin/cometmock /chain/cometmock", ], "env": [ { @@ -64479,106 +63882,57 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "value": "cosmoshub-4", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", - }, - { - "name": "FAUCET_ENABLED", - "value": "false", - }, - { - "name": "NUM_VALIDATORS", - "value": "1", - }, - { - "name": "NUM_RELAYERS", - "value": "0", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-genesis", - "resources": { - "limits": { - "cpu": "0.3", - "memory": "300M", - }, - "requests": { - "cpu": "0.3", - "memory": "300M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.gaia", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", - }, - { - "mountPath": "/scripts", - "name": "scripts", + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -echo "Running setup config script..." - -bash -e /scripts/update-config.sh", - ], - "env": [ { - "name": "DENOM", - "value": "uatom", + "name": "GENESIS_PORT", + "value": "8081", }, { - "name": "COINS", - "value": "100000000000000uatom", + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, { - "name": "CHAIN_BIN", - "value": "gaiad", + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "CHAIN_DIR", - "value": "/root/.gaia", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "CODE_REPO", - "value": "https://github.com/cosmos/gaia", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "DAEMON_HOME", - "value": "/root/.gaia", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "name": "DAEMON_NAME", - "value": "gaiad", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "CHAIN_ID", - "value": "cosmoshub-4", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "METRICS", - "value": "false", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "image": "ghcr.io/informalsystems/cometmock:v0.37.x", "imagePullPolicy": "IfNotPresent", - "name": "init-config", + "name": "init-comet", "resources": { "limits": { "cpu": "0.3", @@ -64591,13 +63945,569 @@ bash -e /scripts/update-config.sh", }, "volumeMounts": [ { - "mountPath": "/root/.gaia", + "mountPath": "/chain", "name": "node", }, - { - "mountPath": "/configs", - "name": "addresses", - }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "volumes": [ + { + "emptyDir": {}, + "name": "node", + }, + { + "configMap": { + "name": "keys", + }, + "name": "addresses", + }, + { + "configMap": { + "name": "setup-scripts-cosmoshub-4", + }, + "name": "scripts", + }, + ], + }, + }, + }, + }, + "cosmoshub/genesis-service.yaml": { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4-service", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-id": "cosmoshub-4", + "starship.io/chain-name": "cosmoshub", + "starship.io/name": "starship-e2e-tests", + }, + "name": "cosmoshub-4-genesis", + }, + "spec": { + "clusterIP": "None", + "ports": [ + { + "name": "address", + "port": 26658, + "protocol": "TCP", + "targetPort": 26658, + }, + { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + "targetPort": 9090, + }, + { + "name": "grpc-web", + "port": 9091, + "protocol": "TCP", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, + }, + { + "name": "rest", + "port": 1317, + "protocol": "TCP", + "targetPort": 1317, + }, + { + "name": "rpc", + "port": 26657, + "protocol": "TCP", + "targetPort": 26657, + }, + { + "name": "exposer", + "port": 8081, + "protocol": "TCP", + "targetPort": 8081, + }, + { + "name": "faucet", + "port": 8000, + "protocol": "TCP", + "targetPort": 8000, + }, + ], + "selector": { + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, + }, + "cosmoshub/genesis-statefulset.yaml": { + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/id": "cosmoshub-4", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/part-of": "cosmoshub-4", + "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4-statefulset", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-name": "cosmoshub", + "starship.io/name": "starship-e2e-tests", + }, + "name": "cosmoshub-4-genesis", + }, + "spec": { + "replicas": 1, + "revisionHistoryLimit": 3, + "selector": { + "matchLabels": { + "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, + "serviceName": "cosmoshub-4-genesis", + "template": { + "metadata": { + "annotations": { + "quality": "release", + "role": "api-gateway", + "sla": "high", + "tier": "gateway", + }, + "labels": { + "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", + "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", + "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": { + "containers": [ + { + "command": [ + "bash", + "-c", + "#!/bin/bash +set -euo pipefail + +START_ARGS="" +START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" + +$CHAIN_BIN start $START_ARGS", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "FAUCET_ENABLED", + "value": "false", + }, + { + "name": "SLOGFILE", + "value": "slog.slog", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "validator", + "resources": { + "limits": { + "cpu": "0.3", + "memory": "300M", + }, + "requests": { + "cpu": "0.3", + "memory": "300M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "exposer", + ], + "env": [ + { + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "EXPOSER_HTTP_PORT", + "value": "8081", + }, + { + "name": "EXPOSER_GRPC_PORT", + "value": "9099", + }, + { + "name": "EXPOSER_GENESIS_FILE", + "value": "/root/.gaia/config/genesis.json", + }, + { + "name": "EXPOSER_MNEMONIC_FILE", + "value": "/configs/keys.json", + }, + { + "name": "EXPOSER_PRIV_VAL_FILE", + "value": "/root/.gaia/config/priv_validator_key.json", + }, + { + "name": "EXPOSER_NODE_KEY_FILE", + "value": "/root/.gaia/config/node_key.json", + }, + { + "name": "EXPOSER_NODE_ID_FILE", + "value": "/root/.gaia/config/node_id.json", + }, + { + "name": "EXPOSER_PRIV_VAL_STATE_FILE", + "value": "/root/.gaia/data/priv_validator_state.json", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "exposer", + "resources": { + "limits": { + "cpu": "0.2", + "memory": "200M", + }, + "requests": { + "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 +fi + +echo "Running setup genesis script..." +bash -e /scripts/create-genesis.sh +bash -e /scripts/update-genesis.sh + +echo "Create node id json file" +NODE_ID=$($CHAIN_BIN tendermint show-node-id) +echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + +echo "Create consensus key json file" +$CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json +cat $CHAIN_DIR/config/consensus_key.json + +echo "Add custom accounts and balances" +CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "")", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "FAUCET_ENABLED", + "value": "false", + }, + { + "name": "NUM_VALIDATORS", + "value": "1", + }, + { + "name": "NUM_RELAYERS", + "value": "0", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis", + "resources": { + "limits": { + "cpu": "0.3", + "memory": "300M", + }, + "requests": { + "cpu": "0.3", + "memory": "300M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +echo "Running setup config script..." + +bash -e /scripts/update-config.sh", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "METRICS", + "value": "false", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-config", + "resources": { + "limits": { + "cpu": "0.3", + "memory": "300M", + }, + "requests": { + "cpu": "0.3", + "memory": "300M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, { "mountPath": "/scripts", "name": "scripts", @@ -65270,6 +65180,8 @@ exports[`BuilderManager Config Files Tests Config: one-chain-cometmock should ha "setup-scripts.yaml", ], "cosmoshub": [ + "cometmock-service.yaml", + "cometmock-statefulset.yaml", "genesis-service.yaml", "genesis-statefulset.yaml", "setup-scripts-configmap.yaml", @@ -65280,8 +65192,8 @@ exports[`BuilderManager Config Files Tests Config: one-chain-cometmock should ha exports[`BuilderManager Config Files Tests Config: one-chain-cometmock should have proper file organization for one-chain-cometmock: one-chain-cometmock-resource-counts 1`] = ` { "ConfigMap": 3, - "Service": 1, - "StatefulSet": 1, + "Service": 2, + "StatefulSet": 2, } `; @@ -65402,178 +65314,6 @@ exports[`BuilderManager Config Files Tests Config: one-chain-cosmjs-faucet shoul "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -65716,118 +65456,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -65892,128 +65520,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -66049,59 +65555,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -66305,17 +65805,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -66416,7 +65916,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -66504,6 +66004,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -66593,6 +66125,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -67286,24 +66850,6 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-osmosis-1", }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -67322,14 +66868,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -67338,9 +66886,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -67358,34 +66922,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -67400,23 +66956,189 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -67432,20 +67154,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -67464,8 +67187,8 @@ exports[`BuilderManager Config Files Tests Config: one-chain-cosmjs-faucet shoul "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], } @@ -67597,178 +67320,6 @@ exports[`BuilderManager Config Files Tests Config: one-chain-custom-scripts shou "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -67911,118 +67462,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -68087,128 +67526,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -68244,59 +67561,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -68500,17 +67811,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -68591,7 +67902,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -68683,6 +67994,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -68772,6 +68115,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -69421,24 +68796,6 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-osmosis-1", }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -69457,14 +68814,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -69473,9 +68832,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -69493,34 +68868,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -69535,23 +68902,189 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -69567,20 +69100,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -69599,8 +69133,8 @@ exports[`BuilderManager Config Files Tests Config: one-chain-custom-scripts shou "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], } @@ -69732,178 +69266,6 @@ exports[`BuilderManager Config Files Tests Config: one-cosmoshub-cosmjs-faucet s "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -70046,118 +69408,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -70222,128 +69472,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -70379,59 +69507,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -70635,17 +69757,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -70746,7 +69868,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -70834,6 +69956,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -70923,6 +70077,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -71616,22 +70802,99 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-cosmoshub-4", }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -71652,14 +70915,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -71668,9 +70933,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -71688,34 +70969,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -71730,17 +71003,60 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, @@ -71762,20 +71078,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -71794,7 +71111,7 @@ exports[`BuilderManager Config Files Tests Config: one-cosmoshub-cosmjs-faucet s "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", "service.yaml", ], @@ -71927,178 +71244,6 @@ exports[`BuilderManager Config Files Tests Config: one-custom-chain should gener "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -72241,118 +71386,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -72417,128 +71450,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -72574,59 +71485,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -72830,17 +71735,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -72921,7 +71826,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -73013,6 +71918,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "custom-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -73102,6 +72039,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "custom-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -73825,22 +72794,95 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-custom-1", }, }, - "registry/config-configmap.yaml": { + "registry/custom-1-configmap.yaml": { "apiVersion": "v1", "data": { - "custom-1.json": "{"chain_name":"custom","assets":[]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "custom-1", + "assets": [ + { + "description": "The denom for token uosmo", + "base": "uosmo", + "name": "uosmo", + "display": "uosmo", + "symbol": "UOSMO", + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "uosmo", + "exponent": 6 + } + ], + "coingecko_id": "custom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "custom-1", + "status": "live", + "network_type": "devnet", + "chain_id": "custom-1", + "pretty_name": "undefined Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-custom-1", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-custom-1", }, }, "registry/deployment.yaml": { @@ -73861,14 +72903,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -73877,9 +72921,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "custom-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "custom", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://custom-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -73897,34 +72957,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://custom-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -73939,17 +72991,60 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/custom-1", - "name": "chain-custom-1", + "name": "registry-custom-1", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://custom-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: custom-1. Waiting for it to start..." + echo "Checking: http://custom-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-custom-1", + "name": "registry-custom-1", }, - "name": "chain-custom-1", + "name": "registry-custom-1", }, ], }, @@ -73971,20 +73066,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -74003,7 +73099,7 @@ exports[`BuilderManager Config Files Tests Config: one-custom-chain should have "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "custom-1-configmap.yaml", "deployment.yaml", "service.yaml", ], @@ -74136,178 +73232,6 @@ exports[`BuilderManager Config Files Tests Config: simapp should generate valid "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -74450,118 +73374,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -74626,128 +73438,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -74763,24 +73453,6 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts", }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "simapp.json": "{"chain_name":"simapp","assets":[]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -74799,14 +73471,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -74815,9 +73489,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "simapp", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "simapp", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26657", + "value": "http://simapp-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -74835,34 +73525,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://simapp-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -74877,17 +73559,60 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/simapp", - "name": "chain-simapp", + "name": "registry-simapp", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: simapp. Waiting for it to start..." + echo "Checking: http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "Always", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-simapp", + "name": "registry-simapp", }, - "name": "chain-simapp", + "name": "registry-simapp", }, ], }, @@ -74909,23 +73634,115 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, + "registry/simapp-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "simapp", + "assets": [ + { + "description": "The denom for token stake", + "base": "stake", + "name": "stake", + "display": "stake", + "symbol": "STAKE", + "denom_units": [ + { + "denom": "stake", + "exponent": 0 + }, + { + "denom": "stake", + "exponent": 6 + } + ], + "coingecko_id": "simapp" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "simapp", + "status": "live", + "network_type": "devnet", + "chain_id": "simapp", + "pretty_name": "Sim App Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "simd", + "node_home": "/root/.simapp", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "stake", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "stake" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/cosmos-sdk/tree/main/simapp", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-simapp", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-simapp", + }, + }, "simapp/genesis-service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -74946,59 +73763,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -75293,7 +74104,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -75385,6 +74196,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "simapp", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -75474,6 +74317,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "simapp", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -76217,59 +75092,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -76579,11 +75448,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: simapp. Waiting for it to start..." - echo "Checking: http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: simapp. Waiting for it to start..." + echo "Checking: http://simapp-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -76607,11 +75476,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -76676,6 +75545,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "simapp", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "simapp-genesis", @@ -76791,6 +75692,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "simapp", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "simapp-genesis", @@ -76874,325 +75807,153 @@ cat $CHAIN_DIR/config/config.toml", } `; -exports[`BuilderManager Config Files Tests Config: simapp should have proper file organization for simapp: simapp-file-structure 1`] = ` -{ - "configmaps": [ - "keys.yaml", - "setup-scripts.yaml", - ], - "registry": [ - "config-configmap.yaml", - "deployment.yaml", - "service.yaml", - ], - "simapp": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], -} -`; - -exports[`BuilderManager Config Files Tests Config: simapp should have proper file organization for simapp: simapp-resource-counts 1`] = ` -{ - "ConfigMap": 4, - "Deployment": 1, - "Service": 3, - "StatefulSet": 2, -} -`; - -exports[`BuilderManager Config Files Tests Config: three-chain should generate valid YAML manifests for three-chain: three-chain-yaml-files 1`] = ` -{ - "configmaps/keys.yaml": { - "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] -} -", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "configmap", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "keys", - }, - }, - "configmaps/setup-scripts.yaml": { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +exports[`BuilderManager Config Files Tests Config: simapp should have proper file organization for simapp: simapp-file-structure 1`] = ` +{ + "configmaps": [ + "keys.yaml", + "setup-scripts.yaml", + ], + "registry": [ + "deployment.yaml", + "service.yaml", + "simapp-configmap.yaml", + ], + "simapp": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], +} +`; -ls $CHAIN_DIR/config +exports[`BuilderManager Config Files Tests Config: simapp should have proper file organization for simapp: simapp-resource-counts 1`] = ` +{ + "ConfigMap": 4, + "Deployment": 1, + "Service": 3, + "StatefulSet": 2, +} +`; + +exports[`BuilderManager Config Files Tests Config: three-chain should generate valid YAML manifests for three-chain: three-chain-yaml-files 1`] = ` +{ + "configmaps/keys.yaml": { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -77335,118 +76096,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -77511,128 +76160,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -77668,59 +76195,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -77924,17 +76445,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -78011,93 +76532,157 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "value": "cosmoshub-4", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", - }, - { - "name": "FAUCET_ENABLED", - "value": "false", - }, - { - "name": "NUM_VALIDATORS", - "value": "1", - }, - { - "name": "NUM_RELAYERS", - "value": "1", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v10.0.1", - "imagePullPolicy": "IfNotPresent", - "name": "init-genesis", - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", - }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.gaia", - "name": "node", + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "FAUCET_ENABLED", + "value": "false", + }, + { + "name": "NUM_VALIDATORS", + "value": "1", + }, + { + "name": "NUM_RELAYERS", + "value": "1", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v10.0.1", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +echo "Running setup config script..." + +bash -e /scripts/update-config.sh", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", }, { - "mountPath": "/configs", - "name": "addresses", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -echo "Running setup config script..." - -bash -e /scripts/update-config.sh", - ], - "env": [ - { - "name": "DENOM", - "value": "uatom", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "COINS", - "value": "100000000000000uatom", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "name": "CHAIN_BIN", - "value": "gaiad", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "CHAIN_DIR", - "value": "/root/.gaia", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "CODE_REPO", - "value": "https://github.com/cosmos/gaia", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "DAEMON_HOME", - "value": "/root/.gaia", - }, - { - "name": "DAEMON_NAME", - "value": "gaiad", - }, - { - "name": "CHAIN_ID", - "value": "cosmoshub-4", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -78812,59 +77397,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -79068,17 +77647,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.juno/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -79154,6 +77733,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "juno-2", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -79243,6 +77854,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "juno-2", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -79956,59 +78599,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -80212,17 +78849,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -80299,93 +78936,157 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "value": "osmosis-1", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", - }, - { - "name": "FAUCET_ENABLED", - "value": "false", - }, - { - "name": "NUM_VALIDATORS", - "value": "1", - }, - { - "name": "NUM_RELAYERS", - "value": "1", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-genesis", - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", - }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.osmosisd", - "name": "node", + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "FAUCET_ENABLED", + "value": "false", + }, + { + "name": "NUM_VALIDATORS", + "value": "1", + }, + { + "name": "NUM_RELAYERS", + "value": "1", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.osmosisd", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +echo "Running setup config script..." + +bash -e /scripts/update-config.sh", + ], + "env": [ + { + "name": "DENOM", + "value": "uosmo", + }, + { + "name": "COINS", + "value": "100000000000000uosmo,100000000000000uion", + }, + { + "name": "CHAIN_BIN", + "value": "osmosisd", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.osmosisd", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/osmosis-labs/osmosis", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.osmosisd", + }, + { + "name": "DAEMON_NAME", + "value": "osmosisd", + }, + { + "name": "CHAIN_ID", + "value": "osmosis-1", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", }, { - "mountPath": "/configs", - "name": "addresses", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -echo "Running setup config script..." - -bash -e /scripts/update-config.sh", - ], - "env": [ - { - "name": "DENOM", - "value": "uosmo", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "COINS", - "value": "100000000000000uosmo,100000000000000uion", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "name": "CHAIN_BIN", - "value": "osmosisd", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "CHAIN_DIR", - "value": "/root/.osmosisd", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "CODE_REPO", - "value": "https://github.com/osmosis-labs/osmosis", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "DAEMON_HOME", - "value": "/root/.osmosisd", - }, - { - "name": "DAEMON_NAME", - "value": "osmosisd", - }, - { - "name": "CHAIN_ID", - "value": "osmosis-1", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -81080,24 +79781,99 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-osmosis-1", }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "juno-2.json": "{"chain_name":"juno","assets":[{"base":"ujuno","description":"The native token of JUNO Chain","name":"Juno","display":"juno","symbol":"JUNO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg"},"denom_units":[{"denom":"ujuno","exponent":0},{"denom":"juno","exponent":6}],"coingecko_id":"juno-network"}]}", - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -81118,14 +79894,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -81134,9 +79912,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1,cosmoshub-4,juno-2", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis,cosmoshub,juno", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657,http://localhost:26658", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -81154,34 +79948,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081,http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -81196,43 +79982,316 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, { "mountPath": "/chains/juno-2", - "name": "chain-juno-2", + "name": "registry-juno-2", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, { "configMap": { - "name": "chain-juno-2", + "name": "registry-juno-2", }, - "name": "chain-juno-2", + "name": "registry-juno-2", }, ], }, }, }, }, + "registry/juno-2-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "juno", + "assets": [ + { + "base": "ujuno", + "description": "The native token of JUNO Chain", + "name": "Juno", + "display": "juno", + "symbol": "JUNO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg" + }, + "denom_units": [ + { + "denom": "ujuno", + "exponent": 0 + }, + { + "denom": "juno", + "exponent": 6 + } + ], + "coingecko_id": "juno-network" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "juno", + "status": "live", + "network_type": "devnet", + "chain_id": "juno-2", + "pretty_name": "Juno Devnet", + "bech32_prefix": "juno", + "daemon_name": "junod", + "node_home": "/root/.juno", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "ujuno", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "ujuno" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/CosmosContracts/juno", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-juno-2", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-juno-2", + }, + }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -81248,20 +80307,21 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -81306,9 +80366,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -81330,9 +80390,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -81354,9 +80414,9 @@ id = "juno-2" type = "CosmosSdk" key_name = "juno-2-cli" -rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "juno" default_gas = 500000000 @@ -81411,9 +80471,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -81435,9 +80495,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -81459,9 +80519,9 @@ id = "juno-2" type = "CosmosSdk" key_name = "juno-2" -rpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://juno-2-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "juno" default_gas = 500000000 @@ -81589,6 +80649,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -81641,12 +80709,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -81680,7 +80748,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -81701,38 +80769,35 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: juno-2. Waiting for it to start..." + echo "Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -81742,32 +80807,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", - }, - { - "args": [ - "echo "Waiting for juno-2 service..." -wait-for-service juno-2-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ - { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-juno-2", + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -81780,6 +80832,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -81792,7 +80848,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -81803,13 +80858,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -81820,13 +80889,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + echo "Creating key for juno-2..." hermes keys add \\ --chain juno-2 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name juno-2 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="ujuno" RLY_ADDR=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2".account') @@ -81837,12 +80920,24 @@ bash -e /scripts/transfer-tokens.sh \\ http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for juno-2-cli..." +hermes keys add \\ + --chain juno-2 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name juno-2-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain juno-2 | tail -1 | jq -r '.result."juno-2-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + hermes create channel \\ --new-client-connection --yes \\ --b-chain cosmoshub-4 \\ - - - --a-chain osmosis-1 \\ --a-port transfer \\ --b-port transfer @@ -81850,9 +80945,6 @@ hermes create channel \\ hermes create channel \\ --new-client-connection --yes \\ --b-chain juno-2 \\ - - - --a-chain osmosis-1 \\ --a-port transfer \\ --b-port transfer @@ -81860,9 +80952,6 @@ hermes create channel \\ hermes create channel \\ --new-client-connection --yes \\ --b-chain cosmoshub-4 \\ - - - --a-chain juno-2 \\ --a-port transfer \\ --b-port transfer @@ -81984,8 +81073,10 @@ exports[`BuilderManager Config Files Tests Config: three-chain should have prope "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "juno-2-configmap.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -81998,7 +81089,7 @@ exports[`BuilderManager Config Files Tests Config: three-chain should have prope exports[`BuilderManager Config Files Tests Config: three-chain should have proper file organization for three-chain: three-chain-resource-counts 1`] = ` { - "ConfigMap": 7, + "ConfigMap": 9, "Deployment": 1, "Service": 5, "StatefulSet": 4, @@ -82122,178 +81213,6 @@ exports[`BuilderManager Config Files Tests Config: two-chain should generate val "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -82436,118 +81355,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -82612,128 +81419,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -82769,59 +81454,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -83025,17 +81704,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -83111,6 +81790,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -83200,6 +81911,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -83913,59 +82656,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -84244,17 +82981,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -84275,11 +83012,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -84303,11 +83040,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -84372,6 +83109,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -84487,6 +83256,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -84691,7 +83492,7 @@ cat $CHAIN_DIR/config/config.toml", "name": "http", "port": 8080, "protocol": "TCP", - "targetPort": "8080", + "targetPort": 8080, }, ], "selector": { @@ -84719,59 +83520,53 @@ cat $CHAIN_DIR/config/config.toml", "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -84975,17 +83770,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -85066,7 +83861,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -85158,6 +83953,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -85247,6 +84074,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -85990,59 +84849,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -86321,17 +85174,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -86352,11 +85205,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -86380,11 +85233,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -86449,6 +85302,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -86564,6 +85449,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -86644,23 +85561,105 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -86681,14 +85680,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -86697,9 +85698,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -86717,34 +85734,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -86759,33 +85768,211 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -86801,20 +85988,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -86859,8 +86047,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "osmo" @@ -86883,8 +86071,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "cosmos" @@ -86940,8 +86128,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "osmo" @@ -86964,8 +86152,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "cosmos" @@ -87094,6 +86282,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/hyperweb-io/starship/hermes:1.12.0", "imagePullPolicy": "IfNotPresent", @@ -87146,12 +86342,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -87185,7 +86381,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -87206,38 +86402,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -87247,9 +86434,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -87262,6 +86459,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -87274,7 +86475,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -87285,13 +86485,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -87301,6 +86515,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain osmosis-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -87423,8 +86659,9 @@ exports[`BuilderManager Config Files Tests Config: two-chain should have proper "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -87437,7 +86674,7 @@ exports[`BuilderManager Config Files Tests Config: two-chain should have proper exports[`BuilderManager Config Files Tests Config: two-chain should have proper file organization for two-chain: two-chain-resource-counts 1`] = ` { - "ConfigMap": 7, + "ConfigMap": 8, "Deployment": 2, "Service": 7, "StatefulSet": 5, @@ -87561,178 +86798,6 @@ exports[`BuilderManager Config Files Tests Config: two-chain-cometmock should ge "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -87864,129 +86929,17 @@ wait_for_proposal_to_pass() { } main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass } -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi +main ", "ibc-connection.sh": "#!/bin/bash @@ -88051,128 +87004,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -88188,6 +87019,376 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts", }, }, + "cosmoshub/cometmock-service.yaml": { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/role": "cometmock", + "app.kubernetes.io/type": "cosmoshub-4-service", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-id": "cosmoshub-4", + "starship.io/chain-name": "cosmoshub", + "starship.io/name": "starship-e2e-tests", + }, + "name": "cosmoshub-4-cometmock", + }, + "spec": { + "clusterIP": "None", + "ports": [ + { + "name": "rpc", + "port": 22331, + "protocol": "TCP", + "targetPort": 22331, + }, + ], + "selector": { + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + }, + }, + }, + "cosmoshub/cometmock-statefulset.yaml": { + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/id": "cosmoshub-4", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/part-of": "cosmoshub-4", + "app.kubernetes.io/role": "cometmock", + "app.kubernetes.io/type": "cosmoshub-4-statefulset", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-name": "cosmoshub", + "starship.io/name": "starship-e2e-tests", + }, + "name": "cosmoshub-4-cometmock", + }, + "spec": { + "replicas": 1, + "revisionHistoryLimit": 3, + "selector": { + "matchLabels": { + "app.kubernetes.io/instance": "cosmoshub", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + }, + }, + "serviceName": "cosmoshub-4-cometmock", + "template": { + "metadata": { + "annotations": { + "quality": "release", + "role": "api-gateway", + "sla": "high", + "tier": "gateway", + }, + "labels": { + "app.kubernetes.io/instance": "cosmoshub", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/rawname": "cosmoshub-4-cometmock", + "app.kubernetes.io/type": "cometmock", + "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": { + "containers": [ + { + "command": [ + "bash", + "-c", + "NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" +NODE_HOME_STR="/chain/genesis" + +/chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "comet", + "readinessProbe": { + "httpGet": { + "path": "/status", + "port": 22331, + }, + "initialDelaySeconds": 10, + "periodSeconds": 10, + }, + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/chain", + "name": "node", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + "while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; +done + +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl", + "imagePullPolicy": "IfNotPresent", + "name": "init-wait", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + { + "command": [ + "bash", + "-c", + "mkdir -p /chain/genesis/config +mkdir -p /chain/genesis/data +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json +echo "Genesis file that we got....." +cat /chain/genesis/config/genesis.json + +## fetch priv_validator and priv_validator_state of all validators +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json +echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + +echo "copy cometmock binary to shared dir" +cp /usr/local/bin/cometmock /chain/cometmock", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + ], + "image": "ghcr.io/informalsystems/cometmock:v0.37.x", + "imagePullPolicy": "IfNotPresent", + "name": "init-comet", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/chain", + "name": "node", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "volumes": [ + { + "emptyDir": {}, + "name": "node", + }, + { + "configMap": { + "name": "keys", + }, + "name": "addresses", + }, + { + "configMap": { + "name": "setup-scripts-cosmoshub-4", + }, + "name": "scripts", + }, + ], + }, + }, + }, + }, "cosmoshub/genesis-service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -88208,59 +87409,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -88451,17 +87646,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -88537,6 +87732,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -88626,6 +87853,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -89319,6 +88578,515 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-cosmoshub-4", }, }, + "osmosis/cometmock-service.yaml": { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "osmosis-1-cometmock", + "app.kubernetes.io/role": "cometmock", + "app.kubernetes.io/type": "osmosis-1-service", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-id": "osmosis-1", + "starship.io/chain-name": "osmosis", + "starship.io/name": "starship-e2e-tests", + }, + "name": "osmosis-1-cometmock", + }, + "spec": { + "clusterIP": "None", + "ports": [ + { + "name": "rpc", + "port": 22331, + "protocol": "TCP", + "targetPort": 22331, + }, + ], + "selector": { + "app.kubernetes.io/name": "osmosis-1-cometmock", + }, + }, + }, + "osmosis/cometmock-statefulset.yaml": { + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/id": "osmosis-1", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "osmosis-1-cometmock", + "app.kubernetes.io/part-of": "osmosis-1", + "app.kubernetes.io/role": "cometmock", + "app.kubernetes.io/type": "osmosis-1-statefulset", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-name": "osmosis", + "starship.io/name": "starship-e2e-tests", + }, + "name": "osmosis-1-cometmock", + }, + "spec": { + "replicas": 1, + "revisionHistoryLimit": 3, + "selector": { + "matchLabels": { + "app.kubernetes.io/instance": "osmosis", + "app.kubernetes.io/name": "osmosis-1-cometmock", + }, + }, + "serviceName": "osmosis-1-cometmock", + "template": { + "metadata": { + "annotations": { + "quality": "release", + "role": "api-gateway", + "sla": "high", + "tier": "gateway", + }, + "labels": { + "app.kubernetes.io/instance": "osmosis", + "app.kubernetes.io/name": "osmosis-1-cometmock", + "app.kubernetes.io/rawname": "osmosis-1-cometmock", + "app.kubernetes.io/type": "cometmock", + "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": { + "containers": [ + { + "command": [ + "bash", + "-c", + "NODE_LISTEN_ADDR_STR="tcp://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26658" +NODE_HOME_STR="/chain/genesis" + +for i in $(seq 0 0); do + NODE_LISTEN_ADDR_STR="tcp://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:26658,$NODE_LISTEN_ADDR_STR" + NODE_HOME_STR="/chain/validator-$i,$NODE_HOME_STR" +done + +/chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc", + ], + "env": [ + { + "name": "DENOM", + "value": "uosmo", + }, + { + "name": "COINS", + "value": "100000000000000uosmo,100000000000000uion", + }, + { + "name": "CHAIN_BIN", + "value": "osmosisd", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.osmosisd", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/osmosis-labs/osmosis", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.osmosisd", + }, + { + "name": "DAEMON_NAME", + "value": "osmosisd", + }, + { + "name": "CHAIN_ID", + "value": "osmosis-1", + }, + { + "name": "GENESIS_HOST", + "value": "osmosis-1-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", + "imagePullPolicy": "IfNotPresent", + "lifecycle": { + "postStart": { + "exec": { + "command": [ + "bash", + "-c", + "-e", + "set -eux + +sleep 10 + +for i in $(seq 0 0); do + $CHAIN_BIN keys list --keyring-backend test --home /chain/validator-$i --output json | jq + VAL_KEY_NAME="$(jq -r '.validators[0].name' $KEYS_CONFIG)-$i" + echo "Create validator.... $VAL_KEY_NAME" + VAL_NAME=$VAL_KEY_NAME \\ + NODE_URL="http://0.0.0.0:22331" \\ + NODE_ARGS="--home /chain/validator-$i" \\ + GAS="1000000" \\ + bash -e /scripts/create-validator.sh +done", + ], + }, + }, + }, + "name": "comet", + "readinessProbe": { + "httpGet": { + "path": "/status", + "port": 22331, + }, + "initialDelaySeconds": 10, + "periodSeconds": 10, + }, + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/chain", + "name": "node", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "bash", + "-c", + "for i in $(seq 0 0); do + mkdir -p /chain/validator-$i/config /chain/validator-$i/data + 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" --home /chain/validator-$i +done", + ], + "env": [ + { + "name": "DENOM", + "value": "uosmo", + }, + { + "name": "COINS", + "value": "100000000000000uosmo,100000000000000uion", + }, + { + "name": "CHAIN_BIN", + "value": "osmosisd", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.osmosisd", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/osmosis-labs/osmosis", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.osmosisd", + }, + { + "name": "DAEMON_NAME", + "value": "osmosisd", + }, + { + "name": "CHAIN_ID", + "value": "osmosis-1", + }, + { + "name": "GENESIS_HOST", + "value": "osmosis-1-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-validator", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/chain", + "name": "node", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + { + "command": [ + "/bin/sh", + "-c", + "while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; +done + +for i in $(seq 0 0); do + while [ $(curl -sw '%{http_code}' http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Validator does not seem to be ready for: osmosis-1 validator-$i. Waiting for it to start..." + echo "Checking: http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done +done + +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl", + "imagePullPolicy": "IfNotPresent", + "name": "init-wait", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + { + "command": [ + "bash", + "-c", + "mkdir -p /chain/genesis/config +mkdir -p /chain/genesis/data +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json +echo "Genesis file that we got....." +cat /chain/genesis/config/genesis.json + +## fetch priv_validator and priv_validator_state of all validators +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json +echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + +for i in $(seq 0 0); do + mkdir -p /chain/validator-$i/config + mkdir -p /chain/validator-$i/data + curl http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_key -o /chain/validator-$i/config/node_key.json + curl http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/validator-$i/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/validator-$i/data/priv_validator_state.json +done + +echo "copy cometmock binary to shared dir" +cp /usr/local/bin/cometmock /chain/cometmock", + ], + "env": [ + { + "name": "DENOM", + "value": "uosmo", + }, + { + "name": "COINS", + "value": "100000000000000uosmo,100000000000000uion", + }, + { + "name": "CHAIN_BIN", + "value": "osmosisd", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.osmosisd", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/osmosis-labs/osmosis", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.osmosisd", + }, + { + "name": "DAEMON_NAME", + "value": "osmosisd", + }, + { + "name": "CHAIN_ID", + "value": "osmosis-1", + }, + { + "name": "GENESIS_HOST", + "value": "osmosis-1-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + ], + "image": "ghcr.io/informalsystems/cometmock:v0.37.x", + "imagePullPolicy": "IfNotPresent", + "name": "init-comet", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/chain", + "name": "node", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "volumes": [ + { + "emptyDir": {}, + "name": "node", + }, + { + "configMap": { + "name": "keys", + }, + "name": "addresses", + }, + { + "configMap": { + "name": "setup-scripts-osmosis-1", + }, + "name": "scripts", + }, + ], + }, + }, + }, + }, "osmosis/genesis-service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -89339,59 +89107,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -89582,17 +89344,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -89668,6 +89430,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -89757,6 +89551,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -90470,59 +90296,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -90757,17 +90577,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -90788,11 +90608,11 @@ $CHAIN_BIN start $START_ARGS", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -90816,11 +90636,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -90885,6 +90705,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -91000,6 +90852,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -91086,11 +90970,15 @@ exports[`BuilderManager Config Files Tests Config: two-chain-cometmock should ha "setup-scripts.yaml", ], "cosmoshub": [ + "cometmock-service.yaml", + "cometmock-statefulset.yaml", "genesis-service.yaml", "genesis-statefulset.yaml", "setup-scripts-configmap.yaml", ], "osmosis": [ + "cometmock-service.yaml", + "cometmock-statefulset.yaml", "genesis-service.yaml", "genesis-statefulset.yaml", "setup-scripts-configmap.yaml", @@ -91103,8 +90991,8 @@ exports[`BuilderManager Config Files Tests Config: two-chain-cometmock should ha exports[`BuilderManager Config Files Tests Config: two-chain-cometmock should have proper file organization for two-chain-cometmock: two-chain-cometmock-resource-counts 1`] = ` { "ConfigMap": 4, - "Service": 3, - "StatefulSet": 3, + "Service": 5, + "StatefulSet": 5, } `; @@ -91225,178 +91113,6 @@ exports[`BuilderManager Config Files Tests Config: two-chain-cosmos should gener "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -91478,179 +91194,67 @@ submit_proposal() { else echo "Failed to submit proposal. Output was not as expected." exit 1 - fi - - sleep 5 -} - -get_proposal_id() { - echo "Getting proposal ID" - PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) - LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') - if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then - PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') - if [ -n "$PROPOSAL_ID" ]; then - echo "Proposal ID: $PROPOSAL_ID" - return 0 - fi - fi - echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." - exit 1 -} - -vote_proposal() { - echo "Voting on proposal" - $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes - sleep 5 -} - -wait_for_proposal_to_pass() { - echo "Waiting for proposal to pass" - for ((i=1; i<=$MAX_RETRIES; i++)); do - STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') - if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then - echo "Proposal has passed!" - return 0 - else - echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." - sleep $RETRY_INTERVAL - fi - done - echo "Proposal did not pass after $MAX_RETRIES attempts." - exit 1 -} - -main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + fi - cat /validator.log | jq + sleep 5 } -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' +get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 +} + +vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ + --from $KEY_NAME \\ --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + --yes + sleep 5 +} - cat /validator.log | jq +wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 } -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e +main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass +} -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi +main ", "ibc-connection.sh": "#!/bin/bash @@ -91715,128 +91319,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -91872,59 +91354,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -92025,120 +91501,352 @@ $CHAIN_BIN start $START_ARGS", "value": "cosmoshub-4", }, { - "name": "FAUCET_ENABLED", - "value": "true", + "name": "FAUCET_ENABLED", + "value": "true", + }, + { + "name": "SLOGFILE", + "value": "slog.slog", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "validator", + "readinessProbe": { + "exec": { + "command": [ + "bash", + "-e", + "/scripts/chain-rpc-ready.sh", + "http://localhost:26657", + ], + }, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "timeoutSeconds": 15, + }, + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "exposer", + ], + "env": [ + { + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "EXPOSER_HTTP_PORT", + "value": "8081", + }, + { + "name": "EXPOSER_GRPC_PORT", + "value": "9099", + }, + { + "name": "EXPOSER_GENESIS_FILE", + "value": "/root/.gaia/config/genesis.json", + }, + { + "name": "EXPOSER_MNEMONIC_FILE", + "value": "/configs/keys.json", + }, + { + "name": "EXPOSER_PRIV_VAL_FILE", + "value": "/root/.gaia/config/priv_validator_key.json", + }, + { + "name": "EXPOSER_NODE_KEY_FILE", + "value": "/root/.gaia/config/node_key.json", + }, + { + "name": "EXPOSER_NODE_ID_FILE", + "value": "/root/.gaia/config/node_id.json", + }, + { + "name": "EXPOSER_PRIV_VAL_STATE_FILE", + "value": "/root/.gaia/data/priv_validator_state.json", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "exposer", + "resources": { + "limits": { + "cpu": "0.2", + "memory": "200M", + }, + "requests": { + "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "CREDIT_COINS="" +FEES="" +for coin in \${COINS//,/ } +do + amt="\${coin//[!0-9]/}" + denom="\${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ \${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="\${CREDIT_COINS},$creditAmt$denom" + fi +done + +export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + +export | grep "FAUCET" + +until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 +done + +/faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES"", + ], + "env": [ + { + "name": "FAUCET_CONCURRENCY", + "value": "5", + }, + { + "name": "FAUCET_HTTP_PORT", + "value": "8000", + }, + { + "name": "FAUCET_CHAIN_BINARY", + "value": "gaiad", + }, + { + "name": "FAUCET_CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "faucet", + "readinessProbe": { + "httpGet": { + "path": "/status", + "port": 8000, + }, + "initialDelaySeconds": 30, + "periodSeconds": 10, + }, + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/faucet", + "name": "faucet", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 +fi + +echo "Running setup genesis script..." +bash -e /scripts/create-genesis.sh +bash -e /scripts/update-genesis.sh + +echo "Create node id json file" +NODE_ID=$($CHAIN_BIN tendermint show-node-id) +echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + +echo "Create consensus key json file" +$CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json +cat $CHAIN_DIR/config/consensus_key.json + +echo "Add custom accounts and balances" +CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "")", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "SLOGFILE", - "value": "slog.slog", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "validator", - "readinessProbe": { - "exec": { - "command": [ - "bash", - "-e", - "/scripts/chain-rpc-ready.sh", - "http://localhost:26657", - ], - }, - "initialDelaySeconds": 10, - "periodSeconds": 10, - "timeoutSeconds": 15, - }, - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ { - "mountPath": "/root/.gaia", - "name": "node", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "mountPath": "/configs", - "name": "addresses", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - { - "command": [ - "exposer", - ], - "env": [ - { - "name": "GENESIS_HOST", - "value": "cosmoshub-4-genesis", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "GENESIS_PORT", - "value": "8081", - }, - { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "EXPOSER_HTTP_PORT", - "value": "8081", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "EXPOSER_GRPC_PORT", - "value": "9099", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { - "name": "EXPOSER_GENESIS_FILE", - "value": "/root/.gaia/config/genesis.json", - }, - { - "name": "EXPOSER_MNEMONIC_FILE", + "name": "KEYS_CONFIG", "value": "/configs/keys.json", }, { - "name": "EXPOSER_PRIV_VAL_FILE", - "value": "/root/.gaia/config/priv_validator_key.json", - }, - { - "name": "EXPOSER_NODE_KEY_FILE", - "value": "/root/.gaia/config/node_key.json", + "name": "FAUCET_ENABLED", + "value": "true", }, { - "name": "EXPOSER_NODE_ID_FILE", - "value": "/root/.gaia/config/node_id.json", + "name": "NUM_VALIDATORS", + "value": "2", }, { - "name": "EXPOSER_PRIV_VAL_STATE_FILE", - "value": "/root/.gaia/data/priv_validator_state.json", + "name": "NUM_RELAYERS", + "value": "1", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", "imagePullPolicy": "IfNotPresent", - "name": "exposer", + "name": "init-genesis", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.5", + "memory": "500M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.5", + "memory": "500M", }, }, "volumeMounts": [ @@ -92150,107 +91858,12 @@ $CHAIN_BIN start $START_ARGS", "mountPath": "/configs", "name": "addresses", }, - ], - }, - { - "command": [ - "bash", - "-c", - "CREDIT_COINS="" -FEES="" -for coin in \${COINS//,/ } -do - amt="\${coin//[!0-9]/}" - denom="\${coin//[0-9]/}" - - # Calculate the order of magnitude - if [ \${#amt} -gt 18 ]; then - creditAmt=$(echo $amt | sed -e "s/000000$//") - feesAmt=$(echo $amt | sed -e "s/0000000000000$//") - else - creditAmt=$(echo $amt | sed -e "s/0000$//") - feesAmt=$(echo $amt | sed -e "s/00000000$//") - fi - - if [[ $CREDIT_COINS == "" ]] - then - CREDIT_COINS="$creditAmt$denom" - FEES="$feesAmt$denom" - else - CREDIT_COINS="\${CREDIT_COINS},$creditAmt$denom" - fi -done - -export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) - -export | grep "FAUCET" - -until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do - sleep 10 -done - -/faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES"", - ], - "env": [ - { - "name": "FAUCET_CONCURRENCY", - "value": "5", - }, - { - "name": "FAUCET_HTTP_PORT", - "value": "8000", - }, - { - "name": "FAUCET_CHAIN_BINARY", - "value": "gaiad", - }, - { - "name": "FAUCET_CHAIN_ID", - "value": "cosmoshub-4", - }, - { - "name": "COINS", - "value": "100000000000000uatom", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "faucet", - "readinessProbe": { - "httpGet": { - "path": "/status", - "port": "8000", - }, - "initialDelaySeconds": 30, - "periodSeconds": 10, - }, - "resources": { - "limits": { - "cpu": "0.1", - "memory": "128M", - }, - "requests": { - "cpu": "0.1", - "memory": "128M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/configs", - "name": "addresses", - }, - { - "mountPath": "/faucet", - "name": "faucet", - }, { "mountPath": "/scripts", "name": "scripts", }, ], }, - ], - "initContainers": [ { "command": [ "bash", @@ -92258,25 +91871,9 @@ done "VAL_INDEX=\${HOSTNAME##*-} echo "Validator Index: $VAL_INDEX" -if [ -f $CHAIN_DIR/config/genesis.json ]; then - echo "Genesis file exists, exiting init container" - exit 0 -fi - -echo "Running setup genesis script..." -bash -e /scripts/create-genesis.sh -bash -e /scripts/update-genesis.sh - -echo "Create node id json file" -NODE_ID=$($CHAIN_BIN tendermint show-node-id) -echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - -echo "Create consensus key json file" -$CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json -cat $CHAIN_DIR/config/consensus_key.json +echo "Running setup config script..." -echo "Add custom accounts and balances" -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "")", +bash -e /scripts/update-config.sh", ], "env": [ { @@ -92312,93 +91909,36 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "value": "cosmoshub-4", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "FAUCET_ENABLED", - "value": "true", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "NUM_VALIDATORS", - "value": "2", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "NUM_RELAYERS", - "value": "1", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, - ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-genesis", - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", - }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ { - "mountPath": "/root/.gaia", - "name": "node", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "mountPath": "/configs", - "name": "addresses", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -echo "Running setup config script..." - -bash -e /scripts/update-config.sh", - ], - "env": [ - { - "name": "DENOM", - "value": "uatom", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "COINS", - "value": "100000000000000uatom", - }, - { - "name": "CHAIN_BIN", - "value": "gaiad", - }, - { - "name": "CHAIN_DIR", - "value": "/root/.gaia", - }, - { - "name": "CODE_REPO", - "value": "https://github.com/cosmos/gaia", - }, - { - "name": "DAEMON_HOME", - "value": "/root/.gaia", - }, - { - "name": "DAEMON_NAME", - "value": "gaiad", - }, - { - "name": "CHAIN_ID", - "value": "cosmoshub-4", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -93143,59 +92683,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -93474,17 +93008,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -93505,11 +93039,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -93533,11 +93067,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -93602,6 +93136,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -93717,6 +93283,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -93817,59 +93415,53 @@ cat $CHAIN_DIR/config/config.toml", "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -94073,17 +93665,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -94164,7 +93756,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -94256,6 +93848,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -94345,6 +93969,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -95088,59 +94744,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -95419,17 +95069,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -95450,11 +95100,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -95478,11 +95128,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -95547,6 +95197,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -95662,6 +95344,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -95742,23 +95456,99 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -95779,14 +95569,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -95795,9 +95587,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -95815,34 +95623,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -95857,33 +95657,205 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -95899,20 +95871,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -95957,8 +95930,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "osmo" @@ -95981,8 +95954,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "cosmos" @@ -96038,8 +96011,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "osmo" @@ -96062,8 +96035,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "cosmos" @@ -96192,6 +96165,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -96244,12 +96225,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -96283,7 +96264,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -96304,38 +96285,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -96345,9 +96317,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -96360,6 +96342,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -96372,7 +96358,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -96383,13 +96368,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -96399,6 +96398,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain osmosis-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -96516,8 +96537,9 @@ exports[`BuilderManager Config Files Tests Config: two-chain-cosmos should have "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -96530,7 +96552,7 @@ exports[`BuilderManager Config Files Tests Config: two-chain-cosmos should have exports[`BuilderManager Config Files Tests Config: two-chain-cosmos should have proper file organization for two-chain-cosmos: two-chain-cosmos-resource-counts 1`] = ` { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 6, "StatefulSet": 5, @@ -96654,178 +96676,6 @@ exports[`BuilderManager Config Files Tests Config: two-chain-gorelayer should ge "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -96968,118 +96818,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -97144,128 +96882,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -97301,59 +96917,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -97557,17 +97167,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -97648,7 +97258,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -97741,93 +97351,157 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "value": "cosmoshub-4", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "FAUCET_ENABLED", + "value": "true", + }, + { + "name": "NUM_VALIDATORS", + "value": "2", + }, + { + "name": "NUM_RELAYERS", + "value": "1", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +echo "Running setup config script..." + +bash -e /scripts/update-config.sh", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "FAUCET_ENABLED", - "value": "true", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "NUM_VALIDATORS", - "value": "2", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "NUM_RELAYERS", - "value": "1", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-genesis", - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ { - "mountPath": "/root/.gaia", - "name": "node", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "mountPath": "/configs", - "name": "addresses", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "mountPath": "/scripts", - "name": "scripts", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -echo "Running setup config script..." - -bash -e /scripts/update-config.sh", - ], - "env": [ { - "name": "DENOM", - "value": "uatom", - }, - { - "name": "COINS", - "value": "100000000000000uatom", - }, - { - "name": "CHAIN_BIN", - "value": "gaiad", - }, - { - "name": "CHAIN_DIR", - "value": "/root/.gaia", - }, - { - "name": "CODE_REPO", - "value": "https://github.com/cosmos/gaia", - }, - { - "name": "DAEMON_HOME", - "value": "/root/.gaia", - }, - { - "name": "DAEMON_NAME", - "value": "gaiad", - }, - { - "name": "CHAIN_ID", - "value": "cosmoshub-4", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -98572,59 +98246,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -98903,17 +98571,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -98934,11 +98602,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -98962,11 +98630,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -99031,6 +98699,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -99146,6 +98846,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -99246,59 +98978,53 @@ cat $CHAIN_DIR/config/config.toml", "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -99502,17 +99228,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -99593,7 +99319,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -99685,6 +99411,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -99774,6 +99532,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -100517,59 +100307,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -100848,17 +100632,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -100879,11 +100663,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -100907,11 +100691,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -100976,6 +100760,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -101091,6 +100907,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -101171,23 +101019,99 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", + "registry/cosmoshub-4-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -101208,14 +101132,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -101224,9 +101150,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -101244,34 +101186,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -101286,33 +101220,205 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -101328,20 +101434,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -101388,7 +101495,7 @@ cat $CHAIN_DIR/config/config.toml", }", "path.json": "{ "paths": { - "path": { + "path0": { "src": { "chain-id": "osmosis-1", "client-id": "", @@ -101485,6 +101592,14 @@ rly start", "name": "RELAYER_DIR", "value": "/root/.relayer", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1", "imagePullPolicy": "IfNotPresent", @@ -101517,38 +101632,29 @@ rly start", ], "initContainers": [ { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -101558,9 +101664,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -101608,6 +101724,13 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "true" || true + +echo "Adding paths..." +rly paths add --file /configs/path.json + + +echo "Creating client, connection and channel for path0..." +rly tx link path0 --src-port transfer --dst-port transfer ", ], "command": [ @@ -101710,326 +101833,155 @@ exports[`BuilderManager Config Files Tests Config: two-chain-gorelayer should ha "genesis-service.yaml", "genesis-statefulset.yaml", "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], - "osmosis": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], - "registry": [ - "config-configmap.yaml", - "deployment.yaml", - "service.yaml", - ], - "relayer": [ - "go-relayer-osmos-cosmos-configmap.yaml", - "go-relayer-osmos-cosmos-statefulset.yaml", - ], -} -`; - -exports[`BuilderManager Config Files Tests Config: two-chain-gorelayer should have proper file organization for two-chain-gorelayer: two-chain-gorelayer-resource-counts 1`] = ` -{ - "ConfigMap": 6, - "Deployment": 1, - "Service": 5, - "StatefulSet": 5, -} -`; - -exports[`BuilderManager Config Files Tests Config: two-chain-monitoring should generate valid YAML manifests for two-chain-monitoring: two-chain-monitoring-yaml-files 1`] = ` -{ - "configmaps/keys.yaml": { - "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] -} -", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "configmap", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-e2e-tests", - }, - "name": "keys", - }, - }, - "configmaps/setup-scripts.yaml": { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq + "validator-service.yaml", + "validator-statefulset.yaml", + ], + "osmosis": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], + "registry": [ + "cosmoshub-4-configmap.yaml", + "deployment.yaml", + "osmosis-1-configmap.yaml", + "service.yaml", + ], + "relayer": [ + "go-relayer-osmos-cosmos-configmap.yaml", + "go-relayer-osmos-cosmos-statefulset.yaml", + ], +} +`; -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +exports[`BuilderManager Config Files Tests Config: two-chain-gorelayer should have proper file organization for two-chain-gorelayer: two-chain-gorelayer-resource-counts 1`] = ` +{ + "ConfigMap": 7, + "Deployment": 1, + "Service": 5, + "StatefulSet": 5, +} +`; -ls $CHAIN_DIR/config +exports[`BuilderManager Config Files Tests Config: two-chain-monitoring should generate valid YAML manifests for two-chain-monitoring: two-chain-monitoring-yaml-files 1`] = ` +{ + "configmaps/keys.yaml": { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -102172,118 +102124,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -102348,128 +102188,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -102505,65 +102223,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -102767,17 +102479,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -102854,93 +102566,157 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "value": "cosmoshub-4", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", - }, - { - "name": "FAUCET_ENABLED", - "value": "false", - }, - { - "name": "NUM_VALIDATORS", - "value": "2", - }, - { - "name": "NUM_RELAYERS", - "value": "1", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v10.0.1", - "imagePullPolicy": "IfNotPresent", - "name": "init-genesis", - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", - }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.gaia", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "FAUCET_ENABLED", + "value": "false", + }, + { + "name": "NUM_VALIDATORS", + "value": "2", + }, + { + "name": "NUM_RELAYERS", + "value": "1", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v10.0.1", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +echo "Running setup config script..." + +bash -e /scripts/update-config.sh", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", }, { - "mountPath": "/scripts", - "name": "scripts", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -echo "Running setup config script..." - -bash -e /scripts/update-config.sh", - ], - "env": [ { - "name": "DENOM", - "value": "uatom", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "COINS", - "value": "100000000000000uatom", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "name": "CHAIN_BIN", - "value": "gaiad", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "CHAIN_DIR", - "value": "/root/.gaia", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "CODE_REPO", - "value": "https://github.com/cosmos/gaia", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "DAEMON_HOME", - "value": "/root/.gaia", - }, - { - "name": "DAEMON_NAME", - "value": "gaiad", - }, - { - "name": "CHAIN_ID", - "value": "cosmoshub-4", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -103655,65 +103431,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -103992,17 +103762,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -104023,11 +103793,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -104051,11 +103821,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -104120,6 +103890,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -104235,6 +104037,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -107213,7 +107047,7 @@ scrape_configs: "name": "http", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { @@ -107241,65 +107075,59 @@ scrape_configs: "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -107503,17 +107331,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -107590,93 +107418,157 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "value": "osmosis-1", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "FAUCET_ENABLED", + "value": "false", + }, + { + "name": "NUM_VALIDATORS", + "value": "2", + }, + { + "name": "NUM_RELAYERS", + "value": "1", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.osmosisd", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +echo "Running setup config script..." + +bash -e /scripts/update-config.sh", + ], + "env": [ + { + "name": "DENOM", + "value": "uosmo", + }, + { + "name": "COINS", + "value": "100000000000000uosmo,100000000000000uion", + }, + { + "name": "CHAIN_BIN", + "value": "osmosisd", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.osmosisd", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/osmosis-labs/osmosis", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.osmosisd", + }, + { + "name": "DAEMON_NAME", + "value": "osmosisd", + }, + { + "name": "CHAIN_ID", + "value": "osmosis-1", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "FAUCET_ENABLED", - "value": "false", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "NUM_VALIDATORS", - "value": "2", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "NUM_RELAYERS", - "value": "1", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-genesis", - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ { - "mountPath": "/root/.osmosisd", - "name": "node", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "mountPath": "/configs", - "name": "addresses", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -echo "Running setup config script..." - -bash -e /scripts/update-config.sh", - ], - "env": [ - { - "name": "DENOM", - "value": "uosmo", - }, - { - "name": "COINS", - "value": "100000000000000uosmo,100000000000000uion", - }, - { - "name": "CHAIN_BIN", - "value": "osmosisd", - }, - { - "name": "CHAIN_DIR", - "value": "/root/.osmosisd", - }, - { - "name": "CODE_REPO", - "value": "https://github.com/osmosis-labs/osmosis", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "DAEMON_HOME", - "value": "/root/.osmosisd", - }, - { - "name": "DAEMON_NAME", - "value": "osmosisd", - }, - { - "name": "CHAIN_ID", - "value": "osmosis-1", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -108391,65 +108283,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -108728,17 +108614,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -108759,11 +108645,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -108787,11 +108673,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -108856,6 +108742,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -108971,6 +108889,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -109047,23 +108997,99 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -109084,14 +109110,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-e2e-tests", }, @@ -109100,9 +109128,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -109120,34 +109164,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -109162,33 +109198,205 @@ cat $CHAIN_DIR/config/config.toml", "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-e2e-tests", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -109204,20 +109412,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -109262,9 +109471,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -109286,9 +109495,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -109343,9 +109552,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "osmo" default_gas = 500000000 @@ -109367,9 +109576,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "cosmos" default_gas = 500000000 @@ -109497,6 +109706,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -109549,12 +109766,12 @@ hermes start", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "100M", + "cpu": "0.2", + "memory": "200M", }, }, "securityContext": { @@ -109588,7 +109805,7 @@ chmod +x /exposer/exposer", "bash", "-c", ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "init-exposer", "resources": { @@ -109609,38 +109826,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -109650,9 +109858,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, { "args": [ @@ -109665,6 +109883,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -109677,7 +109899,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uosmo" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -109688,13 +109909,27 @@ bash -e /scripts/transfer-tokens.sh \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + echo "Creating key for cosmoshub-4..." hermes keys add \\ --chain cosmoshub-4 \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="uatom" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -109704,6 +109939,28 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true + +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain osmosis-1 \\ + --a-port transfer \\ + --b-port transfer ", ], "command": [ @@ -109833,8 +110090,9 @@ exports[`BuilderManager Config Files Tests Config: two-chain-monitoring should h "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -109849,7 +110107,7 @@ exports[`BuilderManager Config Files Tests Config: two-chain-monitoring should h { "ClusterRole": 1, "ClusterRoleBinding": 1, - "ConfigMap": 10, + "ConfigMap": 11, "Deployment": 3, "Service": 8, "StatefulSet": 5, @@ -109973,178 +110231,6 @@ exports[`BuilderManager Config Files Tests Config: xpla should generate valid YA "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -110287,118 +110373,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -110418,173 +110392,51 @@ max_tries=20 while [[ max_tries -gt 0 ]] do id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 -done -", - "transfer-tokens.sh": "#!/bin/bash - -ADDRESS="$1" -DENOM="$2" -FAUCET_URL="$3" -FAUCET_ENABLED="$4" - -set -eux - -function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \\ - --request POST --write-out %{http_code} --silent --output /dev/null \\ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ - $FAUCET_URL) - echo $status_code -} - -if [[ $FAUCET_ENABLED == "false" ]]; -then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 -fi - -echo "Try to send tokens, if failed, wait for 5 seconds and try again" -max_tries=5 -while [[ max_tries -gt 0 ]] -do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 -done -", - "update-config.sh": "#!/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 + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 +done ", - "update-genesis.sh": "#!/bin/bash + "transfer-tokens.sh": "#!/bin/bash -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" +ADDRESS="$1" +DENOM="$2" +FAUCET_URL="$3" +FAUCET_ENABLED="$4" set -eux -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 +function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \\ + --request POST --write-out %{http_code} --silent --output /dev/null \\ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ + $FAUCET_URL) + echo $status_code } -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 +if [[ $FAUCET_ENABLED == "false" ]]; +then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi -$CHAIN_BIN tendermint show-node-id +echo "Try to send tokens, if failed, wait for 5 seconds and try again" +max_tries=5 +while [[ max_tries -gt 0 ]] +do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 +done ", }, "kind": "ConfigMap", @@ -110600,24 +110452,6 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts", }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "xpla-1-1.json": "{"chain_name":"xpla","assets":[{"base":"axpla","description":"The XPLA token is the native governance token for the XPLA chain.","denom_units":[{"denom":"axpla","exponent":0}],"name":"XPLA","display":"XPLA","symbol":"XPLA","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.svg"},"coingecko_id":"xpla"}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "xpla", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -110636,14 +110470,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "xpla", }, @@ -110652,9 +110488,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "xpla_1-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "xpla", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26657", + "value": "http://xpla-1-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -110672,34 +110524,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://xpla-1-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -110714,17 +110558,60 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/xpla_1-1", - "name": "chain-xpla-1-1", + "name": "registry-xpla-1-1", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://xpla-1-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: xpla_1-1. Waiting for it to start..." + echo "Checking: http://xpla-1-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, }, ], "volumes": [ { "configMap": { - "name": "chain-xpla-1-1", + "name": "registry-xpla-1-1", }, - "name": "chain-xpla-1-1", + "name": "registry-xpla-1-1", }, ], }, @@ -110746,21 +110633,113 @@ $CHAIN_BIN tendermint show-node-id "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", + }, + }, + }, + "registry/xpla-1-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "xpla", + "assets": [ + { + "base": "axpla", + "description": "The XPLA token is the native governance token for the XPLA chain.", + "denom_units": [ + { + "denom": "axpla", + "exponent": 0 + } + ], + "name": "XPLA", + "display": "XPLA", + "symbol": "XPLA", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.svg" + }, + "coingecko_id": "xpla" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "xpla", + "status": "live", + "network_type": "devnet", + "chain_id": "xpla_1-1", + "pretty_name": "XPLA Chain Devnet", + "bech32_prefix": "xpla", + "daemon_name": "xplad", + "node_home": "/root/.xpla", + "key_algos": [ + "secp256k1" + ], + "slip44": "60", + "fees": { + "fee_tokens": [ + { + "denom": "axpla", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "axpla" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/xpladev/xpla", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + } +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-xpla-1-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "xpla", }, + "name": "registry-xpla-1-1", }, }, "xpla/genesis-patch-configmap.yaml": { @@ -110799,7 +110778,7 @@ $CHAIN_BIN tendermint show-node-id "labels": { "app.kubernetes.io/component": "chain", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "xpla-1-1-genesis", + "app.kubernetes.io/name": "xpla_1-1-genesis", "app.kubernetes.io/role": "genesis", "app.kubernetes.io/type": "xpla_1-1-service", "app.kubernetes.io/version": "4.0.0-alpha.0", @@ -110812,69 +110791,63 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { - "app.kubernetes.io/name": "xpla-1-1-genesis", + "app.kubernetes.io/name": "xpla_1-1-genesis", }, }, }, @@ -110886,7 +110859,7 @@ $CHAIN_BIN tendermint show-node-id "app.kubernetes.io/component": "chain", "app.kubernetes.io/id": "xpla_1-1", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "xpla-1-1-genesis", + "app.kubernetes.io/name": "xpla_1-1-genesis", "app.kubernetes.io/part-of": "xpla_1-1", "app.kubernetes.io/role": "genesis", "app.kubernetes.io/type": "xpla_1-1-statefulset", @@ -110971,294 +110944,326 @@ $CHAIN_BIN start $START_ARGS", "value": "xpla_1-1", }, { - "name": "FAUCET_ENABLED", - "value": "true", - }, - { - "name": "SLOGFILE", - "value": "slog.slog", - }, - ], - "image": "ghcr.io/hyperweb-io/starship/xpla:main", - "imagePullPolicy": "IfNotPresent", - "name": "validator", - "readinessProbe": { - "exec": { - "command": [ - "bash", - "-e", - "/scripts/chain-rpc-ready.sh", - "http://localhost:26657", - ], - }, - "initialDelaySeconds": 10, - "periodSeconds": 10, - "timeoutSeconds": 15, - }, - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", - }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.xpla", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", - }, - { - "mountPath": "/scripts", - "name": "scripts", + "name": "FAUCET_ENABLED", + "value": "true", + }, + { + "name": "SLOGFILE", + "value": "slog.slog", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/xpla:main", + "imagePullPolicy": "IfNotPresent", + "name": "validator", + "readinessProbe": { + "exec": { + "command": [ + "bash", + "-e", + "/scripts/chain-rpc-ready.sh", + "http://localhost:26657", + ], + }, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "timeoutSeconds": 15, + }, + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.xpla", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "exposer", + ], + "env": [ + { + "name": "GENESIS_HOST", + "value": "xpla-1-1-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "EXPOSER_HTTP_PORT", + "value": "8081", + }, + { + "name": "EXPOSER_GRPC_PORT", + "value": "9099", + }, + { + "name": "EXPOSER_GENESIS_FILE", + "value": "/root/.xpla/config/genesis.json", + }, + { + "name": "EXPOSER_MNEMONIC_FILE", + "value": "/configs/keys.json", + }, + { + "name": "EXPOSER_PRIV_VAL_FILE", + "value": "/root/.xpla/config/priv_validator_key.json", + }, + { + "name": "EXPOSER_NODE_KEY_FILE", + "value": "/root/.xpla/config/node_key.json", + }, + { + "name": "EXPOSER_NODE_ID_FILE", + "value": "/root/.xpla/config/node_id.json", + }, + { + "name": "EXPOSER_PRIV_VAL_STATE_FILE", + "value": "/root/.xpla/data/priv_validator_state.json", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "exposer", + "resources": { + "limits": { + "cpu": "0.2", + "memory": "200M", + }, + "requests": { + "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.xpla", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "CREDIT_COINS="" +FEES="" +for coin in \${COINS//,/ } +do + amt="\${coin//[!0-9]/}" + denom="\${coin//[0-9]/}" + + # Calculate the order of magnitude + if [ \${#amt} -gt 18 ]; then + creditAmt=$(echo $amt | sed -e "s/000000$//") + feesAmt=$(echo $amt | sed -e "s/0000000000000$//") + else + creditAmt=$(echo $amt | sed -e "s/0000$//") + feesAmt=$(echo $amt | sed -e "s/00000000$//") + fi + + if [[ $CREDIT_COINS == "" ]] + then + CREDIT_COINS="$creditAmt$denom" + FEES="$feesAmt$denom" + else + CREDIT_COINS="\${CREDIT_COINS},$creditAmt$denom" + fi +done + +export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) + +export | grep "FAUCET" + +until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do + sleep 10 +done + +/faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES"", + ], + "env": [ + { + "name": "FAUCET_CONCURRENCY", + "value": "2", + }, + { + "name": "FAUCET_HTTP_PORT", + "value": "8000", + }, + { + "name": "FAUCET_CHAIN_BINARY", + "value": "xplad", + }, + { + "name": "FAUCET_CHAIN_ID", + "value": "xpla_1-1", + }, + { + "name": "COINS", + "value": "100000000000000000000000000axpla", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/xpla:main", + "imagePullPolicy": "IfNotPresent", + "name": "faucet", + "readinessProbe": { + "httpGet": { + "path": "/status", + "port": 8000, + }, + "initialDelaySeconds": 30, + "periodSeconds": 10, + }, + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/faucet", + "name": "faucet", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 +fi + +echo "Running setup genesis script..." +bash -e /scripts/create-genesis.sh +bash -e /scripts/update-genesis.sh + +echo "Create node id json file" +NODE_ID=$($CHAIN_BIN tendermint show-node-id) +echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + +echo "Create consensus key json file" +$CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json +cat $CHAIN_DIR/config/consensus_key.json + +echo "Add custom accounts and balances" +CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + +echo "Adding balance to xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g 100000000000000000000000axpla --keyring-backend="test"", + ], + "env": [ + { + "name": "DENOM", + "value": "axpla", + }, + { + "name": "COINS", + "value": "100000000000000000000000000axpla", + }, + { + "name": "CHAIN_BIN", + "value": "xplad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.xpla", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/xpladev/xpla", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.xpla", + }, + { + "name": "DAEMON_NAME", + "value": "xplad", + }, + { + "name": "CHAIN_ID", + "value": "xpla_1-1", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", }, - ], - }, - { - "command": [ - "exposer", - ], - "env": [ { - "name": "GENESIS_HOST", - "value": "xpla-1-1-genesis", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "GENESIS_PORT", - "value": "8081", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "name": "EXPOSER_HTTP_PORT", - "value": "8081", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "EXPOSER_GRPC_PORT", - "value": "9099", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "EXPOSER_GENESIS_FILE", - "value": "/root/.xpla/config/genesis.json", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "EXPOSER_MNEMONIC_FILE", - "value": "/configs/keys.json", - }, - { - "name": "EXPOSER_PRIV_VAL_FILE", - "value": "/root/.xpla/config/priv_validator_key.json", - }, - { - "name": "EXPOSER_NODE_KEY_FILE", - "value": "/root/.xpla/config/node_key.json", - }, - { - "name": "EXPOSER_NODE_ID_FILE", - "value": "/root/.xpla/config/node_id.json", - }, - { - "name": "EXPOSER_PRIV_VAL_STATE_FILE", - "value": "/root/.xpla/data/priv_validator_state.json", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", - "imagePullPolicy": "IfNotPresent", - "name": "exposer", - "resources": { - "limits": { - "cpu": "0.1", - "memory": "128M", - }, - "requests": { - "cpu": "0.1", - "memory": "128M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.xpla", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", - }, - ], - }, - { - "command": [ - "bash", - "-c", - "CREDIT_COINS="" -FEES="" -for coin in \${COINS//,/ } -do - amt="\${coin//[!0-9]/}" - denom="\${coin//[0-9]/}" - - # Calculate the order of magnitude - if [ \${#amt} -gt 18 ]; then - creditAmt=$(echo $amt | sed -e "s/000000$//") - feesAmt=$(echo $amt | sed -e "s/0000000000000$//") - else - creditAmt=$(echo $amt | sed -e "s/0000$//") - feesAmt=$(echo $amt | sed -e "s/00000000$//") - fi - - if [[ $CREDIT_COINS == "" ]] - then - CREDIT_COINS="$creditAmt$denom" - FEES="$feesAmt$denom" - else - CREDIT_COINS="\${CREDIT_COINS},$creditAmt$denom" - fi -done - -export FAUCET_MNEMONIC=$(jq -r ".faucet[0].mnemonic" /configs/keys.json) - -export | grep "FAUCET" - -until bash -e /scripts/chain-rpc-ready.sh http://localhost:26657; do - sleep 10 -done - -/faucet/faucet --credit-coins="$CREDIT_COINS" --chain-fees="$FEES"", - ], - "env": [ - { - "name": "FAUCET_CONCURRENCY", - "value": "2", - }, - { - "name": "FAUCET_HTTP_PORT", - "value": "8000", - }, - { - "name": "FAUCET_CHAIN_BINARY", - "value": "xplad", - }, - { - "name": "FAUCET_CHAIN_ID", - "value": "xpla_1-1", - }, - { - "name": "COINS", - "value": "100000000000000000000000000axpla", - }, - ], - "image": "ghcr.io/hyperweb-io/starship/xpla:main", - "imagePullPolicy": "IfNotPresent", - "name": "faucet", - "readinessProbe": { - "httpGet": { - "path": "/status", - "port": "8000", - }, - "initialDelaySeconds": 30, - "periodSeconds": 10, - }, - "resources": { - "limits": { - "cpu": "0.1", - "memory": "128M", - }, - "requests": { - "cpu": "0.1", - "memory": "128M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/configs", - "name": "addresses", - }, - { - "mountPath": "/faucet", - "name": "faucet", - }, - { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - ], - "initContainers": [ - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -if [ -f $CHAIN_DIR/config/genesis.json ]; then - echo "Genesis file exists, exiting init container" - exit 0 -fi - -echo "Running setup genesis script..." -bash -e /scripts/create-genesis.sh -bash -e /scripts/update-genesis.sh - -echo "Create node id json file" -NODE_ID=$($CHAIN_BIN tendermint show-node-id) -echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - -echo "Create consensus key json file" -$CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json -cat $CHAIN_DIR/config/consensus_key.json - -echo "Add custom accounts and balances" -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -echo "Adding balance to xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g 100000000000000000000000axpla --keyring-backend="test"", - ], - "env": [ - { - "name": "DENOM", - "value": "axpla", - }, - { - "name": "COINS", - "value": "100000000000000000000000000axpla", - }, - { - "name": "CHAIN_BIN", - "value": "xplad", - }, - { - "name": "CHAIN_DIR", - "value": "/root/.xpla", - }, - { - "name": "CODE_REPO", - "value": "https://github.com/xpladev/xpla", - }, - { - "name": "DAEMON_HOME", - "value": "/root/.xpla", - }, - { - "name": "DAEMON_NAME", - "value": "xplad", - }, - { - "name": "CHAIN_ID", - "value": "xpla_1-1", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -111351,6 +111356,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "xpla_1-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -112073,9 +112110,9 @@ exports[`BuilderManager Config Files Tests Config: xpla should have proper file "setup-scripts.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", "service.yaml", + "xpla-1-1-configmap.yaml", ], "xpla": [ "genesis-patch-configmap.yaml", @@ -112113,7 +112150,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "agoric-3-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", "service.yaml", ], @@ -112143,7 +112181,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "core-1-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", "service.yaml", ], @@ -112185,8 +112224,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "evmos-9000-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112212,9 +112252,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", "service.yaml", + "test-hyperweb-1-configmap.yaml", ], }, "ingress-monitoring-full": { @@ -112262,8 +112302,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112296,8 +112337,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], }, @@ -112319,8 +112360,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "injective-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112350,8 +112392,10 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "juno-2-configmap.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112379,8 +112423,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], }, @@ -112397,8 +112441,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], }, @@ -112419,8 +112463,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "neutron-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112446,8 +112491,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "neutron-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112475,8 +112521,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "noble-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112497,8 +112544,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], }, @@ -112508,6 +112555,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts.yaml", ], "cosmoshub": [ + "cometmock-service.yaml", + "cometmock-statefulset.yaml", "genesis-service.yaml", "genesis-statefulset.yaml", "setup-scripts-configmap.yaml", @@ -112524,8 +112573,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], }, @@ -112540,8 +112589,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], }, @@ -112556,7 +112605,7 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", "service.yaml", ], @@ -112572,7 +112621,7 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "custom-1-configmap.yaml", "deployment.yaml", "service.yaml", ], @@ -112583,9 +112632,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", "service.yaml", + "simapp-configmap.yaml", ], "simapp": [ "genesis-service.yaml", @@ -112616,8 +112665,10 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts-configmap.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "juno-2-configmap.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112651,8 +112702,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112667,11 +112719,15 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts.yaml", ], "cosmoshub": [ + "cometmock-service.yaml", + "cometmock-statefulset.yaml", "genesis-service.yaml", "genesis-statefulset.yaml", "setup-scripts-configmap.yaml", ], "osmosis": [ + "cometmock-service.yaml", + "cometmock-statefulset.yaml", "genesis-service.yaml", "genesis-statefulset.yaml", "setup-scripts-configmap.yaml", @@ -112699,8 +112755,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112729,8 +112786,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112770,8 +112828,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "validator-statefulset.yaml", ], "registry": [ - "config-configmap.yaml", + "cosmoshub-4-configmap.yaml", "deployment.yaml", + "osmosis-1-configmap.yaml", "service.yaml", ], "relayer": [ @@ -112786,9 +112845,9 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "setup-scripts.yaml", ], "registry": [ - "config-configmap.yaml", "deployment.yaml", "service.yaml", + "xpla-1-1-configmap.yaml", ], "xpla": [ "genesis-patch-configmap.yaml", @@ -112803,13 +112862,13 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain consistent file organization patterns across all configs: all-configs-resource-counts 1`] = ` { "agoric": { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 4, "StatefulSet": 3, }, "build-chain": { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 6, "StatefulSet": 5, @@ -112825,7 +112884,7 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "StatefulSet": 1, }, "evmos": { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 5, "StatefulSet": 4, @@ -112839,7 +112898,7 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "ingress-monitoring-full": { "ClusterRole": 1, "ClusterRoleBinding": 1, - "ConfigMap": 11, + "ConfigMap": 12, "Deployment": 5, "Ingress": 1, "Issuer": 1, @@ -112855,13 +112914,13 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "StatefulSet": 1, }, "injective": { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 5, "StatefulSet": 4, }, "multi-relayer": { - "ConfigMap": 9, + "ConfigMap": 11, "Deployment": 1, "Service": 7, "StatefulSet": 6, @@ -112879,19 +112938,19 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "StatefulSet": 2, }, "neutron": { - "ConfigMap": 7, + "ConfigMap": 8, "Deployment": 1, "Service": 4, "StatefulSet": 3, }, "neutron-relayer": { - "ConfigMap": 8, + "ConfigMap": 9, "Deployment": 1, "Service": 5, "StatefulSet": 4, }, "noble": { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 4, "StatefulSet": 3, @@ -112904,8 +112963,8 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain }, "one-chain-cometmock": { "ConfigMap": 3, - "Service": 1, - "StatefulSet": 1, + "Service": 2, + "StatefulSet": 2, }, "one-chain-cosmjs-faucet": { "ConfigMap": 4, @@ -112938,30 +112997,30 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "StatefulSet": 2, }, "three-chain": { - "ConfigMap": 7, + "ConfigMap": 9, "Deployment": 1, "Service": 5, "StatefulSet": 4, }, "two-chain": { - "ConfigMap": 7, + "ConfigMap": 8, "Deployment": 2, "Service": 7, "StatefulSet": 5, }, "two-chain-cometmock": { "ConfigMap": 4, - "Service": 3, - "StatefulSet": 3, + "Service": 5, + "StatefulSet": 5, }, "two-chain-cosmos": { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 6, "StatefulSet": 5, }, "two-chain-gorelayer": { - "ConfigMap": 6, + "ConfigMap": 7, "Deployment": 1, "Service": 5, "StatefulSet": 5, @@ -112969,7 +113028,7 @@ exports[`BuilderManager Config Files Tests Cross-Config Analysis should maintain "two-chain-monitoring": { "ClusterRole": 1, "ClusterRoleBinding": 1, - "ConfigMap": 10, + "ConfigMap": 11, "Deployment": 3, "Service": 8, "StatefulSet": 5, diff --git a/packages/packages/generator/__tests__/__snapshots__/builder.test.ts.snap b/packages/packages/generator/__tests__/__snapshots__/builder.test.ts.snap index 03c551885..5cec52069 100644 --- a/packages/packages/generator/__tests__/__snapshots__/builder.test.ts.snap +++ b/packages/packages/generator/__tests__/__snapshots__/builder.test.ts.snap @@ -203,8 +203,14 @@ geth --datadir /ethereum/execution --http \\ "periodSeconds": 10, }, "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -260,14 +266,20 @@ beacon-chain \\ "readinessProbe": { "httpGet": { "path": "/eth/v1/node/health", - "port": "3500", + "port": 3500, }, "initialDelaySeconds": 15, "periodSeconds": 20, }, "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -319,14 +331,20 @@ validator \\ "readinessProbe": { "httpGet": { "path": "/metrics", - "port": "8081", + "port": 8081, }, "initialDelaySeconds": 20, "periodSeconds": 30, }, "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -368,8 +386,14 @@ cp /config/jwt.hex /etc/secrets/jwt.hex", "imagePullPolicy": "IfNotPresent", "name": "init-genesis-beacon", "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -399,8 +423,14 @@ geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", "imagePullPolicy": "IfNotPresent", "name": "init-genesis-execution", "resources": { - "limits": {}, - "requests": {}, + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, }, "volumeMounts": [ { @@ -462,19 +492,19 @@ geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", "name": "http", "port": 8545, "protocol": "TCP", - "targetPort": "8545", + "targetPort": 8545, }, { "name": "ws", "port": 8546, "protocol": "TCP", - "targetPort": "8546", + "targetPort": 8546, }, { "name": "rpc", "port": 8551, "protocol": "TCP", - "targetPort": "8551", + "targetPort": 8551, }, ], "selector": { @@ -602,178 +632,6 @@ exports[`BuilderManager Tests Advanced Configuration Testing should handle Comet "configmaps/setup-scripts.yaml": { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -917,146 +775,34 @@ main() { main ", - "create-validator.sh": "#!/bin/bash + "ibc-connection.sh": "#!/bin/bash -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" +REGISTRY_URL="$1" +CHAIN_1="$2" +CHAIN_2="$3" set -eux -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] +function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID +} + +echo "Try to get connection id, if failed, wait for 2 seconds and try again" +max_tries=20 +while [[ max_tries -gt 0 ]] do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" ((max_tries--)) - sleep 30 + sleep 10 done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi -", - "ibc-connection.sh": "#!/bin/bash - -REGISTRY_URL="$1" -CHAIN_1="$2" -CHAIN_2="$3" - -set -eux - -function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID -} - -echo "Try to get connection id, if failed, wait for 2 seconds and try again" -max_tries=20 -while [[ max_tries -gt 0 ]] -do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 -done -", - "transfer-tokens.sh": "#!/bin/bash +", + "transfer-tokens.sh": "#!/bin/bash ADDRESS="$1" DENOM="$2" @@ -1092,128 +838,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -1229,87 +853,39 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts", }, }, - "cosmoshub/genesis-service.yaml": { + "cosmoshub/cometmock-service.yaml": { "apiVersion": "v1", "kind": "Service", "metadata": { "labels": { "app.kubernetes.io/component": "chain", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "cosmoshub-4-genesis", - "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/role": "cometmock", "app.kubernetes.io/type": "cosmoshub-4-service", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/chain-id": "cosmoshub-4", "starship.io/chain-name": "cosmoshub", "starship.io/name": "starship-generator-test", }, - "name": "cosmoshub-4-genesis", + "name": "cosmoshub-4-cometmock", }, "spec": { "clusterIP": "None", "ports": [ { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, - { - "name": "address", - "port": 26658, - "protocol": "TCP", - "targetPort": "26658", - }, - { - "name": "grpc", - "port": 9090, - "protocol": "TCP", - "targetPort": "9090", - }, - { - "name": "grpc-web", - "port": 9091, + "name": "rpc", + "port": 22331, "protocol": "TCP", - "targetPort": "9091", - }, - { - "name": "rest", - "port": 1317, - "protocol": "TCP", - "targetPort": "1317", - }, - { - "name": "rpc", - "port": 26657, - "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", - }, - { - "name": "exposer", - "port": 8081, - "protocol": "TCP", - "targetPort": "8081", - }, - { - "name": "faucet", - "port": 8000, - "protocol": "TCP", - "targetPort": "8000", + "targetPort": 22331, }, ], "selector": { - "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", }, }, }, - "cosmoshub/genesis-statefulset.yaml": { + "cosmoshub/cometmock-statefulset.yaml": { "apiVersion": "apps/v1", "kind": "StatefulSet", "metadata": { @@ -1317,26 +893,26 @@ $CHAIN_BIN tendermint show-node-id "app.kubernetes.io/component": "chain", "app.kubernetes.io/id": "cosmoshub-4", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", "app.kubernetes.io/part-of": "cosmoshub-4", - "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/role": "cometmock", "app.kubernetes.io/type": "cosmoshub-4-statefulset", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/chain-name": "cosmoshub", "starship.io/name": "starship-generator-test", }, - "name": "cosmoshub-4-genesis", + "name": "cosmoshub-4-cometmock", }, "spec": { "replicas": 1, "revisionHistoryLimit": 3, "selector": { "matchLabels": { - "app.kubernetes.io/instance": "starship-generator-test", - "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/instance": "cosmoshub", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", }, }, - "serviceName": "cosmoshub-4-genesis", + "serviceName": "cosmoshub-4-cometmock", "template": { "metadata": { "annotations": { @@ -1346,11 +922,10 @@ $CHAIN_BIN tendermint show-node-id "tier": "gateway", }, "labels": { - "app.kubernetes.io/instance": "starship-generator-test", - "app.kubernetes.io/name": "cosmoshub-4-genesis", - "app.kubernetes.io/rawname": "cosmoshub-4", - "app.kubernetes.io/role": "genesis", - "app.kubernetes.io/type": "cosmoshub-4", + "app.kubernetes.io/instance": "cosmoshub", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/rawname": "cosmoshub-4-cometmock", + "app.kubernetes.io/type": "cometmock", "app.kubernetes.io/version": "4.0.0-alpha.0", }, }, @@ -1360,13 +935,10 @@ $CHAIN_BIN tendermint show-node-id "command": [ "bash", "-c", - "#!/bin/bash -set -euo pipefail - -START_ARGS="" -START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" - -$CHAIN_BIN start $START_ARGS", + "NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" +NODE_HOME_STR="/chain/genesis" + +/chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc", ], "env": [ { @@ -1402,17 +974,37 @@ $CHAIN_BIN start $START_ARGS", "value": "cosmoshub-4", }, { - "name": "FAUCET_ENABLED", - "value": "false", + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", }, { - "name": "SLOGFILE", - "value": "slog.slog", + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", }, ], "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", "imagePullPolicy": "IfNotPresent", - "name": "validator", + "name": "comet", + "readinessProbe": { + "httpGet": { + "path": "/status", + "port": 22331, + }, + "initialDelaySeconds": 10, + "periodSeconds": 10, + }, "resources": { "limits": { "cpu": "0.3", @@ -1425,28 +1017,35 @@ $CHAIN_BIN start $START_ARGS", }, "volumeMounts": [ { - "mountPath": "/root/.gaia", + "mountPath": "/chain", "name": "node", }, - { - "mountPath": "/configs", - "name": "addresses", - }, { "mountPath": "/scripts", "name": "scripts", }, + { + "mountPath": "/configs", + "name": "addresses", + }, ], }, + ], + "initContainers": [ { "command": [ - "exposer", + "/bin/sh", + "-c", + "while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; +done + +echo "Ready to start" +exit 0", ], "env": [ - { - "name": "GENESIS_HOST", - "value": "cosmoshub-4-genesis", - }, { "name": "GENESIS_PORT", "value": "8081", @@ -1459,91 +1058,37 @@ $CHAIN_BIN start $START_ARGS", }, }, }, - { - "name": "EXPOSER_HTTP_PORT", - "value": "8081", - }, - { - "name": "EXPOSER_GRPC_PORT", - "value": "9099", - }, - { - "name": "EXPOSER_GENESIS_FILE", - "value": "/root/.gaia/config/genesis.json", - }, - { - "name": "EXPOSER_MNEMONIC_FILE", - "value": "/configs/keys.json", - }, - { - "name": "EXPOSER_PRIV_VAL_FILE", - "value": "/root/.gaia/config/priv_validator_key.json", - }, - { - "name": "EXPOSER_NODE_KEY_FILE", - "value": "/root/.gaia/config/node_key.json", - }, - { - "name": "EXPOSER_NODE_ID_FILE", - "value": "/root/.gaia/config/node_id.json", - }, - { - "name": "EXPOSER_PRIV_VAL_STATE_FILE", - "value": "/root/.gaia/data/priv_validator_state.json", - }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "curlimages/curl", "imagePullPolicy": "IfNotPresent", - "name": "exposer", + "name": "init-wait", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, - "volumeMounts": [ - { - "mountPath": "/root/.gaia", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", - }, - ], }, - ], - "initContainers": [ { "command": [ "bash", "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -if [ -f $CHAIN_DIR/config/genesis.json ]; then - echo "Genesis file exists, exiting init container" - exit 0 -fi - -echo "Running setup genesis script..." -bash -e /scripts/create-genesis.sh -bash -e /scripts/update-genesis.sh - -echo "Create node id json file" -NODE_ID=$($CHAIN_BIN tendermint show-node-id) -echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json - -echo "Create consensus key json file" -$CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json -cat $CHAIN_DIR/config/consensus_key.json + "mkdir -p /chain/genesis/config +mkdir -p /chain/genesis/data +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json +echo "Genesis file that we got....." +cat /chain/genesis/config/genesis.json -echo "Add custom accounts and balances" -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "")", +## fetch priv_validator and priv_validator_state of all validators +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json +echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + +echo "copy cometmock binary to shared dir" +cp /usr/local/bin/cometmock /chain/cometmock", ], "env": [ { @@ -1579,106 +1124,57 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "value": "cosmoshub-4", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", - }, - { - "name": "FAUCET_ENABLED", - "value": "false", - }, - { - "name": "NUM_VALIDATORS", - "value": "1", - }, - { - "name": "NUM_RELAYERS", - "value": "0", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-genesis", - "resources": { - "limits": { - "cpu": "0.3", - "memory": "300M", - }, - "requests": { - "cpu": "0.3", - "memory": "300M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.gaia", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", - }, - { - "mountPath": "/scripts", - "name": "scripts", + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - -echo "Running setup config script..." - -bash -e /scripts/update-config.sh", - ], - "env": [ { - "name": "DENOM", - "value": "uatom", + "name": "GENESIS_PORT", + "value": "8081", }, { - "name": "COINS", - "value": "100000000000000uatom", + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, { - "name": "CHAIN_BIN", - "value": "gaiad", + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "CHAIN_DIR", - "value": "/root/.gaia", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "CODE_REPO", - "value": "https://github.com/cosmos/gaia", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "DAEMON_HOME", - "value": "/root/.gaia", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "name": "DAEMON_NAME", - "value": "gaiad", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "CHAIN_ID", - "value": "cosmoshub-4", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "METRICS", - "value": "false", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, ], - "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "image": "ghcr.io/informalsystems/cometmock:v0.37.x", "imagePullPolicy": "IfNotPresent", - "name": "init-config", + "name": "init-comet", "resources": { "limits": { "cpu": "0.3", @@ -1691,17 +1187,17 @@ bash -e /scripts/update-config.sh", }, "volumeMounts": [ { - "mountPath": "/root/.gaia", + "mountPath": "/chain", "name": "node", }, - { - "mountPath": "/configs", - "name": "addresses", - }, { "mountPath": "/scripts", "name": "scripts", }, + { + "mountPath": "/configs", + "name": "addresses", + }, ], }, ], @@ -1727,142 +1223,698 @@ bash -e /scripts/update-config.sh", }, }, }, - "cosmoshub/setup-scripts-configmap.yaml": { + "cosmoshub/genesis-service.yaml": { "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - + "kind": "Service", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4-service", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-id": "cosmoshub-4", + "starship.io/chain-name": "cosmoshub", + "starship.io/name": "starship-generator-test", + }, + "name": "cosmoshub-4-genesis", + }, + "spec": { + "clusterIP": "None", + "ports": [ + { + "name": "address", + "port": 26658, + "protocol": "TCP", + "targetPort": 26658, + }, + { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + "targetPort": 9090, + }, + { + "name": "grpc-web", + "port": 9091, + "protocol": "TCP", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, + }, + { + "name": "rest", + "port": 1317, + "protocol": "TCP", + "targetPort": 1317, + }, + { + "name": "rpc", + "port": 26657, + "protocol": "TCP", + "targetPort": 26657, + }, + { + "name": "exposer", + "port": 8081, + "protocol": "TCP", + "targetPort": 8081, + }, + { + "name": "faucet", + "port": 8000, + "protocol": "TCP", + "targetPort": 8000, + }, + ], + "selector": { + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, + }, + "cosmoshub/genesis-statefulset.yaml": { + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/id": "cosmoshub-4", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/part-of": "cosmoshub-4", + "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4-statefulset", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-name": "cosmoshub", + "starship.io/name": "starship-generator-test", + }, + "name": "cosmoshub-4-genesis", + }, + "spec": { + "replicas": 1, + "revisionHistoryLimit": 3, + "selector": { + "matchLabels": { + "app.kubernetes.io/instance": "starship-generator-test", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, + "serviceName": "cosmoshub-4-genesis", + "template": { + "metadata": { + "annotations": { + "quality": "release", + "role": "api-gateway", + "sla": "high", + "tier": "gateway", + }, + "labels": { + "app.kubernetes.io/instance": "starship-generator-test", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", + "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", + "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": { + "containers": [ + { + "command": [ + "bash", + "-c", + "#!/bin/bash set -euo pipefail -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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" +START_ARGS="" +START_ARGS="--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658" -if [[ $FAUCET_ENABLED == "false" && $NUM_RELAYERS -gt "-1" ]]; -then - ## Add relayers keys and delegate tokens - for i in $(seq 0 $NUM_RELAYERS); - do +$CHAIN_BIN start $START_ARGS", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "FAUCET_ENABLED", + "value": "false", + }, + { + "name": "SLOGFILE", + "value": "slog.slog", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "validator", + "resources": { + "limits": { + "cpu": "0.3", + "memory": "300M", + }, + "requests": { + "cpu": "0.3", + "memory": "300M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "exposer", + ], + "env": [ + { + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "EXPOSER_HTTP_PORT", + "value": "8081", + }, + { + "name": "EXPOSER_GRPC_PORT", + "value": "9099", + }, + { + "name": "EXPOSER_GENESIS_FILE", + "value": "/root/.gaia/config/genesis.json", + }, + { + "name": "EXPOSER_MNEMONIC_FILE", + "value": "/configs/keys.json", + }, + { + "name": "EXPOSER_PRIV_VAL_FILE", + "value": "/root/.gaia/config/priv_validator_key.json", + }, + { + "name": "EXPOSER_NODE_KEY_FILE", + "value": "/root/.gaia/config/node_key.json", + }, + { + "name": "EXPOSER_NODE_ID_FILE", + "value": "/root/.gaia/config/node_id.json", + }, + { + "name": "EXPOSER_PRIV_VAL_STATE_FILE", + "value": "/root/.gaia/data/priv_validator_state.json", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "exposer", + "resources": { + "limits": { + "cpu": "0.2", + "memory": "200M", + }, + "requests": { + "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo "Genesis file exists, exiting init container" + exit 0 +fi + +echo "Running setup genesis script..." +bash -e /scripts/create-genesis.sh +bash -e /scripts/update-genesis.sh + +echo "Create node id json file" +NODE_ID=$($CHAIN_BIN tendermint show-node-id) +echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json + +echo "Create consensus key json file" +$CHAIN_BIN tendermint show-validator > $CHAIN_DIR/config/consensus_key.json +cat $CHAIN_DIR/config/consensus_key.json + +echo "Add custom accounts and balances" +CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "")", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "FAUCET_ENABLED", + "value": "false", + }, + { + "name": "NUM_VALIDATORS", + "value": "1", + }, + { + "name": "NUM_RELAYERS", + "value": "0", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis", + "resources": { + "limits": { + "cpu": "0.3", + "memory": "300M", + }, + "requests": { + "cpu": "0.3", + "memory": "300M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" + +echo "Running setup config script..." + +bash -e /scripts/update-config.sh", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "METRICS", + "value": "false", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-config", + "resources": { + "limits": { + "cpu": "0.3", + "memory": "300M", + }, + "requests": { + "cpu": "0.3", + "memory": "300M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.gaia", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + ], + "volumes": [ + { + "emptyDir": {}, + "name": "node", + }, + { + "configMap": { + "name": "keys", + }, + "name": "addresses", + }, + { + "configMap": { + "name": "setup-scripts-cosmoshub-4", + }, + "name": "scripts", + }, + ], + }, + }, + }, + }, + "cosmoshub/setup-scripts-configmap.yaml": { + "apiVersion": "v1", + "data": { + "build-chain.sh": "#!/bin/bash + +set -euxo pipefail + +mkdir -p /tmp/chains $UPGRADE_DIR + +echo "Fetching code from tag" +mkdir -p /tmp/chains/$CHAIN_NAME +cd /tmp/chains/$CHAIN_NAME + +if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then + echo "Trying to fetch code from commit hash" + curl -LO $CODE_REPO/archive/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=\${CODE_REPO##*/}-\${CODE_TAG} +elif [[ $CODE_TAG = v* ]]; then + echo "Trying to fetch code from tag with 'v' prefix" + curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip + unzip $CODE_TAG.zip + code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} +else + echo "Trying to fetch code from tag or branch" + if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then + unzip $CODE_TAG.zip + code_dir=\${CODE_REPO##*/}-$CODE_TAG + elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then + unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip + code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} + else + echo "Tag or branch '$CODE_TAG' not found" + exit 1 + fi +fi + +echo "Fetch wasmvm if needed" +cd /tmp/chains/$CHAIN_NAME/$code_dir +WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) +if [[ WASM_VERSION != "" ]]; then + mkdir -p /tmp/chains/libwasmvm_muslc + cd /tmp/chains/libwasmvm_muslc + curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a + cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a +fi + +echo "Build chain binary" +cd /tmp/chains/$CHAIN_NAME/$code_dir +CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install + +echo "Copy created binary to the upgrade directories" +if [[ $UPGRADE_NAME == "genesis" ]]; then + mkdir -p $UPGRADE_DIR/genesis/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin +else + mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin + cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin +fi + +echo "Cleanup" +rm -rf /tmp/chains/$CHAIN_NAME +", + "chain-rpc-ready.sh": "#!/bin/bash +# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready +# Usage: chain-rpc-ready.sh [RPC_URL] + +set -euo pipefail + +RPC_URL=\${1:-"http://localhost:26657"} + +echo 1>&2 "Checking if $RPC_URL is ready..." + +# Check if the RPC URL is reachable, +json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + +# and the bootstrap block state has been validated, +if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then + echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" + exit 1 +fi + +# and the node is not catching up. +if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then + echo 1>&2 "$RPC_URL is not ready: node is catching up" + exit 1 +fi + +echo "$json" | jq -r .result +exit 0 +", + "create-genesis.sh": "#!/bin/bash + +set -eux + +DENOM="\${DENOM:=uosmo}" +COINS="\${COINS:=100000000000000000uosmo}" +CHAIN_ID="\${CHAIN_ID:=osmosis}" +CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" +CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" +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 +CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") + +CHAIN_INIT_ID="$CHAIN_ID" +if [ "$CHAIN_BIN" == "osmosisd" ]; then + CHAIN_INIT_ID="test-1" +fi +jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover +sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json + +# Add genesis keys to the keyring and self delegate initial coins +echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) +jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + +# Add faucet key to the keyring and self delegate initial coins +echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) +jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" +$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" + +# Add test keys to the keyring and self delegate initial coins +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 relayers keys and delegate tokens + 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" @@ -2474,184 +2526,12 @@ exports[`BuilderManager Tests Advanced Configuration Testing should handle CosmJ "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-generator-test", }, - "name": "keys", - }, - }, - "configmaps/setup-scripts.yaml": { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -2794,118 +2674,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -2970,128 +2738,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -3127,59 +2773,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, }, { - "name": "rest", - "port": 1317, + "name": "p2p", + "port": 26656, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 26656, }, { - "name": "rpc", - "port": 26657, + "name": "rest", + "port": 1317, "protocol": "TCP", - "targetPort": "26657", + "targetPort": 1317, }, - { - "name": "metrics", - "port": 26660, + { + "name": "rpc", + "port": 26657, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -3383,17 +3023,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -3494,7 +3134,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -3582,6 +3222,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -3671,6 +3343,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -4443,219 +4147,47 @@ exports[`BuilderManager Tests Advanced Configuration Testing should handle build "name": "relayer-cli-1", "type": "local", "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] -} -", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "configmap", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-generator-test", - }, - "name": "keys", - }, - }, - "configmaps/setup-scripts.yaml": { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-generator-test", + }, + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -4798,118 +4330,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -4938,164 +4358,42 @@ do sleep 10 done ", - "transfer-tokens.sh": "#!/bin/bash - -ADDRESS="$1" -DENOM="$2" -FAUCET_URL="$3" -FAUCET_ENABLED="$4" - -set -eux - -function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \\ - --request POST --write-out %{http_code} --silent --output /dev/null \\ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ - $FAUCET_URL) - echo $status_code -} - -if [[ $FAUCET_ENABLED == "false" ]]; -then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 -fi - -echo "Try to send tokens, if failed, wait for 5 seconds and try again" -max_tries=5 -while [[ max_tries -gt 0 ]] -do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 -done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash + "transfer-tokens.sh": "#!/bin/bash -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" +ADDRESS="$1" +DENOM="$2" +FAUCET_URL="$3" +FAUCET_ENABLED="$4" set -eux -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 +function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \\ + --request POST --write-out %{http_code} --silent --output /dev/null \\ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ + $FAUCET_URL) + echo $status_code } -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 +if [[ $FAUCET_ENABLED == "false" ]]; +then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi -$CHAIN_BIN tendermint show-node-id +echo "Try to send tokens, if failed, wait for 5 seconds and try again" +max_tries=5 +while [[ max_tries -gt 0 ]] +do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 +done ", }, "kind": "ConfigMap", @@ -5131,59 +4429,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -5395,17 +4687,17 @@ START_ARGS="" "value": "/root/.persistenceCore/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -5486,7 +4778,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -5664,6 +4956,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "core-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -5755,6 +5079,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "core-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -6498,59 +5854,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -6830,17 +6180,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.persistenceCore/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -6945,11 +6295,11 @@ UPGRADE_NAME=genesis CODE_TAG=v7.0.0 bash -e /scripts/build-chain.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." - echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: core-1. Waiting for it to start..." + echo "Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -6973,11 +6323,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -7043,119 +6393,36 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "value": "core-1", }, { - "name": "GENESIS_HOST", - "value": "core-1-genesis", - }, - { - "name": "GENESIS_PORT", - "value": "8081", - }, - { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, - }, - { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", - }, - { - "name": "FAUCET_ENABLED", - "value": "true", - }, - { - "name": "METRICS", - "value": "false", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/runner:latest", - "imagePullPolicy": "IfNotPresent", - "name": "init-validator", - "resources": { - "limits": { - "cpu": "2", - "memory": "2Gi", - }, - "requests": { - "cpu": "2", - "memory": "2Gi", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.persistenceCore", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", - }, - { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" -cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin - -echo "Running setup config script..." -bash -e /scripts/update-config.sh - -curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") -if [[ $NODE_ID == "" ]]; then - echo "Node ID is null, exiting early" - exit 1 -fi - -GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 -echo "Node P2P: $GENESIS_NODE_P2P" -sed -i "s/persistent_peers = \\"\\"/persistent_peers = \\"$GENESIS_NODE_P2P\\"/g" $CHAIN_DIR/config/config.toml - -echo "Printing the whole config.toml file" -cat $CHAIN_DIR/config/config.toml", - ], - "env": [ - { - "name": "DENOM", - "value": "uxprt", + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "COINS", - "value": "100000000000000uxprt", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "CHAIN_BIN", - "value": "persistenceCore", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "CHAIN_DIR", - "value": "/root/.persistenceCore", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "name": "CODE_REPO", - "value": "https://github.com/persistenceOne/persistenceCore", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, - { - "name": "DAEMON_HOME", - "value": "/root/.persistenceCore", + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "DAEMON_NAME", - "value": "persistenceCore", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "CHAIN_ID", - "value": "core-1", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "GENESIS_HOST", @@ -7178,357 +6445,332 @@ cat $CHAIN_DIR/config/config.toml", "value": "/configs/keys.json", }, { - "name": "METRICS", - "value": "false", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/runner:latest", - "imagePullPolicy": "IfNotPresent", - "name": "init-config", - "resources": { - "limits": { - "cpu": "2", - "memory": "2Gi", - }, - "requests": { - "cpu": "2", - "memory": "2Gi", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.persistenceCore", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", + "name": "FAUCET_ENABLED", + "value": "true", }, { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - ], - "volumes": [ - { - "emptyDir": {}, - "name": "node", - }, - { - "configMap": { - "name": "keys", - }, - "name": "addresses", - }, - { - "configMap": { - "name": "setup-scripts-core-1", - }, - "name": "scripts", - }, - { - "emptyDir": {}, - "name": "faucet", - }, - ], - }, - }, - }, - }, -} -`; - -exports[`BuilderManager Tests Advanced Configuration Testing should handle relayer configuration: relayers-yaml-files 1`] = ` -{ - "configmaps/keys.yaml": { - "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] -} -", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "configmap", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-generator-test", - }, - "name": "keys", - }, - }, - "configmaps/setup-scripts.yaml": { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + "name": "METRICS", + "value": "false", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/runner:latest", + "imagePullPolicy": "IfNotPresent", + "name": "init-validator", + "resources": { + "limits": { + "cpu": "2", + "memory": "2Gi", + }, + "requests": { + "cpu": "2", + "memory": "2Gi", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.persistenceCore", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" +cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi +echo "Running setup config script..." +bash -e /scripts/update-config.sh -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" +curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id +NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") +if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" exit 1 fi -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq +GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 +echo "Node P2P: $GENESIS_NODE_P2P" +sed -i "s/persistent_peers = \\"\\"/persistent_peers = \\"$GENESIS_NODE_P2P\\"/g" $CHAIN_DIR/config/config.toml -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +echo "Printing the whole config.toml file" +cat $CHAIN_DIR/config/config.toml", + ], + "env": [ + { + "name": "DENOM", + "value": "uxprt", + }, + { + "name": "COINS", + "value": "100000000000000uxprt", + }, + { + "name": "CHAIN_BIN", + "value": "persistenceCore", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.persistenceCore", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/persistenceOne/persistenceCore", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.persistenceCore", + }, + { + "name": "DAEMON_NAME", + "value": "persistenceCore", + }, + { + "name": "CHAIN_ID", + "value": "core-1", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "GENESIS_HOST", + "value": "core-1-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "METRICS", + "value": "false", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/runner:latest", + "imagePullPolicy": "IfNotPresent", + "name": "init-config", + "resources": { + "limits": { + "cpu": "2", + "memory": "2Gi", + }, + "requests": { + "cpu": "2", + "memory": "2Gi", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.persistenceCore", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + ], + "volumes": [ + { + "emptyDir": {}, + "name": "node", + }, + { + "configMap": { + "name": "keys", + }, + "name": "addresses", + }, + { + "configMap": { + "name": "setup-scripts-core-1", + }, + "name": "scripts", + }, + { + "emptyDir": {}, + "name": "faucet", + }, + ], + }, + }, + }, + }, +} +`; -ls $CHAIN_DIR/config +exports[`BuilderManager Tests Advanced Configuration Testing should handle relayer configuration: relayers-yaml-files 1`] = ` +{ + "configmaps/keys.yaml": { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-generator-test", + }, + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -7633,156 +6875,44 @@ get_proposal_id() { vote_proposal() { echo "Voting on proposal" $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes - sleep 5 -} - -wait_for_proposal_to_pass() { - echo "Waiting for proposal to pass" - for ((i=1; i<=$MAX_RETRIES; i++)); do - STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') - if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then - echo "Proposal has passed!" - return 0 - else - echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." - sleep $RETRY_INTERVAL - fi - done - echo "Proposal did not pass after $MAX_RETRIES attempts." - exit 1 -} - -main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ + --from $KEY_NAME \\ --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + --yes + sleep 5 +} - cat /validator.log | jq +wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 } -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e +main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass +} -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi +main ", "ibc-connection.sh": "#!/bin/bash @@ -7847,128 +6977,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -8004,59 +7012,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -8260,17 +7262,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -8346,6 +7348,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -8435,6 +7469,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -9148,59 +8214,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -9479,17 +8539,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -9510,11 +8570,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -9538,11 +8598,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -9607,6 +8667,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -9722,6 +8814,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -9926,7 +9050,7 @@ cat $CHAIN_DIR/config/config.toml", "name": "http", "port": 8080, "protocol": "TCP", - "targetPort": "8080", + "targetPort": 8080, }, ], "selector": { @@ -9954,59 +9078,53 @@ cat $CHAIN_DIR/config/config.toml", "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -10210,17 +9328,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -10301,7 +9419,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -10393,6 +9511,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -10482,6 +9632,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -11225,59 +10407,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -11556,17 +10732,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -11587,11 +10763,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -11615,11 +10791,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -11684,6 +10860,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -11799,6 +11007,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -11879,23 +11119,105 @@ cat $CHAIN_DIR/config/config.toml", }, }, }, - "registry/config-configmap.yaml": { + "registry/cosmoshub-4-configmap.yaml": { "apiVersion": "v1", "data": { - "cosmoshub-4.json": "{"chain_name":"cosmoshub","assets":[{"base":"uatom","description":"The native staking and governance token of the Cosmos Hub.","name":"Cosmos Hub Atom","display":"atom","symbol":"ATOM","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg"},"denom_units":[{"denom":"uatom","exponent":0},{"denom":"atom","exponent":6}],"coingecko_id":"atom"}]}", - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "cosmoshub", + "assets": [ + { + "base": "uatom", + "description": "The native staking and governance token of the Cosmos Hub.", + "name": "Cosmos Hub Atom", + "display": "atom", + "symbol": "ATOM", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "denom_units": [ + { + "denom": "uatom", + "exponent": 0 + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "coingecko_id": "atom" + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "cosmoshub", + "status": "live", + "network_type": "devnet", + "chain_id": "cosmoshub-4", + "pretty_name": "Cosmos Hub Devnet", + "bech32_prefix": "cosmos", + "daemon_name": "gaiad", + "node_home": "/root/.gaia", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uatom", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uatom" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/cosmos/gaia", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] +}", }, "kind": "ConfigMap", "metadata": { "labels": { "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", + "app.kubernetes.io/name": "registry-cosmoshub-4", "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-generator-test", }, - "name": "registry-config", + "name": "registry-cosmoshub-4", }, }, "registry/deployment.yaml": { @@ -11916,14 +11238,16 @@ cat $CHAIN_DIR/config/config.toml", "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "starship-generator-test", }, @@ -11932,9 +11256,25 @@ cat $CHAIN_DIR/config/config.toml", "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1,cosmoshub-4", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis,cosmoshub", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653,http://localhost:26657", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -11952,34 +11292,26 @@ cat $CHAIN_DIR/config/config.toml", "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081,http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "ghcr.io/cosmology-tech/starship/registry:latest", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -11987,40 +11319,218 @@ cat $CHAIN_DIR/config/config.toml", "memory": "200M", }, "requests": { - "cpu": "0.2", - "memory": "200M", + "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/chains/osmosis-1", + "name": "registry-osmosis-1", + }, + { + "mountPath": "/chains/cosmoshub-4", + "name": "registry-cosmoshub-4", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", }, }, - "volumeMounts": [ - { - "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", - }, - { - "mountPath": "/chains/cosmoshub-4", - "name": "chain-cosmoshub-4", - }, - ], }, ], "volumes": [ { "configMap": { - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, { "configMap": { - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, - "name": "chain-cosmoshub-4", + "name": "registry-cosmoshub-4", }, ], }, }, }, }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ + { + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] + }, + { + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ + { + "kind": "ping-pub", + "url": "http://localhost:8080" + } + ] +}", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-generator-test", + }, + "name": "registry-osmosis-1", + }, + }, "registry/service.yaml": { "apiVersion": "v1", "kind": "Service", @@ -12036,20 +11546,21 @@ cat $CHAIN_DIR/config/config.toml", "name": "registry", }, "spec": { + "clusterIP": "None", "ports": [ { "name": "http", "port": 8080, - "targetPort": "8080", + "targetPort": 8080, }, { "name": "grpc", "port": 9090, - "targetPort": "9090", + "targetPort": 9090, }, ], "selector": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, }, @@ -12094,8 +11605,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "osmo" @@ -12118,8 +11629,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "cosmos" @@ -12175,8 +11686,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "osmo" @@ -12199,8 +11710,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "cosmos" @@ -12329,6 +11840,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -12379,194 +11898,6 @@ hermes start", "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", "name": "exposer", - "resources": { - "limits": { - "cpu": "0.1", - "memory": "100M", - }, - "requests": { - "cpu": "0.1", - "memory": "100M", - }, - }, - "securityContext": { - "allowPrivilegeEscalation": false, - "runAsUser": 0, - }, - "volumeMounts": [ - { - "mountPath": "/root", - "name": "relayer", - }, - { - "mountPath": "/configs", - "name": "relayer-config", - }, - { - "mountPath": "/exposer", - "name": "exposer", - }, - ], - }, - ], - "initContainers": [ - { - "args": [ - "# Install exposer binary from the image -cp /bin/exposer /exposer/exposer -chmod +x /exposer/exposer", - ], - "command": [ - "bash", - "-c", - ], - "image": "ghcr.io/cosmology-tech/starship/exposer:v0.2.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-exposer", - "resources": { - "limits": { - "cpu": "0.1", - "memory": "100M", - }, - "requests": { - "cpu": "0.1", - "memory": "100M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/exposer", - "name": "exposer", - }, - ], - }, - { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ - { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, - }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ - { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, - }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", - }, - { - "args": [ - "set -ux - -RLY_INDEX=\${HOSTNAME##*-} -echo "Relayer Index: $RLY_INDEX" - -mkdir -p $RELAYER_DIR -cp /configs/config.toml $RELAYER_DIR/config.toml -cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml - -MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) -echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt -MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) -echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt - - -echo "Creating key for osmosis-1..." -hermes keys add \\ - --chain osmosis-1 \\ - --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ - --key-name osmosis-1 \\ - --hd-path "m/44'/118'/0'/0/0" - -DENOM="uosmo" -RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') - -echo "Transfer tokens to address $RLY_ADDR" -bash -e /scripts/transfer-tokens.sh \\ - $RLY_ADDR \\ - $DENOM \\ - http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ - "true" || true - -echo "Creating key for cosmoshub-4..." -hermes keys add \\ - --chain cosmoshub-4 \\ - --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ - --key-name cosmoshub-4 \\ - --hd-path "m/44'/118'/0'/0/0" - -DENOM="uatom" -RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') - -echo "Transfer tokens to address $RLY_ADDR" -bash -e /scripts/transfer-tokens.sh \\ - $RLY_ADDR \\ - $DENOM \\ - http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ - "false" || true -", - ], - "command": [ - "bash", - "-c", - ], - "env": [ - { - "name": "KEYS_CONFIG", - "value": "/keys/keys.json", - }, - { - "name": "RELAYER_DIR", - "value": "/root/.hermes", - }, - { - "name": "RELAYER_INDEX", - "value": "\${HOSTNAME##*-}", - }, - { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, - }, - ], - "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-relayer", "resources": { "limits": { "cpu": "0.2", @@ -12577,6 +11908,10 @@ bash -e /scripts/transfer-tokens.sh \\ "memory": "200M", }, }, + "securityContext": { + "allowPrivilegeEscalation": false, + "runAsUser": 0, + }, "volumeMounts": [ { "mountPath": "/root", @@ -12587,340 +11922,392 @@ bash -e /scripts/transfer-tokens.sh \\ "name": "relayer-config", }, { - "mountPath": "/keys", - "name": "keys", - }, - { - "mountPath": "/scripts", - "name": "scripts", + "mountPath": "/exposer", + "name": "exposer", }, ], }, ], - "volumes": [ - { - "emptyDir": {}, - "name": "relayer", - }, - { - "configMap": { - "name": "hermes-osmos-cosmos", - }, - "name": "relayer-config", - }, - { - "configMap": { - "name": "keys", - }, - "name": "keys", - }, + "initContainers": [ { - "configMap": { - "name": "setup-scripts", + "args": [ + "# Install exposer binary from the image +cp /bin/exposer /exposer/exposer +chmod +x /exposer/exposer", + ], + "command": [ + "bash", + "-c", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, }, - "name": "scripts", - }, - { - "emptyDir": {}, - "name": "exposer", - }, - ], - }, - }, - }, - }, -} -`; - -exports[`BuilderManager Tests Complex Configuration Scenarios should handle configuration with all builders enabled: full-builders-yaml-files 1`] = ` -{ - "configmaps/keys.yaml": { - "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] -} -", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "configmap", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "full-testnet", - }, - "name": "keys", - }, - }, - "configmaps/setup-scripts.yaml": { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi + "volumeMounts": [ + { + "mountPath": "/exposer", + "name": "exposer", + }, + ], + }, + { + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + { + "args": [ + "set -ux -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash +RLY_INDEX=\${HOSTNAME##*-} +echo "Relayer Index: $RLY_INDEX" -set -eux +mkdir -p $RELAYER_DIR +cp /configs/config.toml $RELAYER_DIR/config.toml +cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml -FAUCET_ENABLED="\${FAUCET_ENABLED:=true}" -NUM_VALIDATORS="\${NUM_VALIDATORS:=1}" -NUM_RELAYERS="\${NUM_RELAYERS:=0}" +MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) +echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) +echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt -# check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json +echo "Creating key for osmosis-1..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ + --key-name osmosis-1 \\ + --hd-path "m/44'/118'/0'/0/0" +DENOM="uosmo" +RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" +echo "Transfer tokens to address $RLY_ADDR" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') -# Add test keys to the keyring and self delegate initial coins -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" +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "true" || true -if [[ $FAUCET_ENABLED == "false" && $NUM_RELAYERS -gt "-1" ]]; -then - ## Add relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi +echo "Creating key for cosmoshub-4..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ + --key-name cosmoshub-4 \\ + --hd-path "m/44'/118'/0'/0/0" +DENOM="uatom" +RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') -## 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi +echo "Transfer tokens to address $RLY_ADDR" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +hermes create channel \\ + --new-client-connection --yes \\ + --b-chain cosmoshub-4 \\ + --a-chain osmosis-1 \\ + --a-port transfer \\ + --b-port transfer +", + ], + "command": [ + "bash", + "-c", + ], + "env": [ + { + "name": "KEYS_CONFIG", + "value": "/keys/keys.json", + }, + { + "name": "RELAYER_DIR", + "value": "/root/.hermes", + }, + { + "name": "RELAYER_INDEX", + "value": "\${HOSTNAME##*-}", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-relayer", + "resources": { + "limits": { + "cpu": "0.2", + "memory": "200M", + }, + "requests": { + "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root", + "name": "relayer", + }, + { + "mountPath": "/configs", + "name": "relayer-config", + }, + { + "mountPath": "/keys", + "name": "keys", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + ], + "volumes": [ + { + "emptyDir": {}, + "name": "relayer", + }, + { + "configMap": { + "name": "hermes-osmos-cosmos", + }, + "name": "relayer-config", + }, + { + "configMap": { + "name": "keys", + }, + "name": "keys", + }, + { + "configMap": { + "name": "setup-scripts", + }, + "name": "scripts", + }, + { + "emptyDir": {}, + "name": "exposer", + }, + ], + }, + }, + }, + }, +} +`; -ls $CHAIN_DIR/config +exports[`BuilderManager Tests Complex Configuration Scenarios should handle configuration with all builders enabled: full-builders-yaml-files 1`] = ` +{ + "configmaps/keys.yaml": { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "full-testnet", + }, + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -13004,177 +12391,65 @@ submit_proposal() { exit 1 fi - sleep 5 -} - -get_proposal_id() { - echo "Getting proposal ID" - PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) - LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') - if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then - PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') - if [ -n "$PROPOSAL_ID" ]; then - echo "Proposal ID: $PROPOSAL_ID" - return 0 - fi - fi - echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." - exit 1 -} - -vote_proposal() { - echo "Voting on proposal" - $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes - sleep 5 -} - -wait_for_proposal_to_pass() { - echo "Waiting for proposal to pass" - for ((i=1; i<=$MAX_RETRIES; i++)); do - STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') - if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then - echo "Proposal has passed!" - return 0 - else - echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." - sleep $RETRY_INTERVAL - fi - done - echo "Proposal did not pass after $MAX_RETRIES attempts." - exit 1 -} - -main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq + sleep 5 } -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' +get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 +} + +vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ + --from $KEY_NAME \\ --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + --yes + sleep 5 +} - cat /validator.log | jq +wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 } -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e +main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass +} -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi +main ", "ibc-connection.sh": "#!/bin/bash @@ -13239,128 +12514,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -13503,7 +12656,7 @@ $CHAIN_BIN tendermint show-node-id "name": "http", "port": 8080, "protocol": "TCP", - "targetPort": "8080", + "targetPort": 8080, }, ], "selector": { @@ -13570,65 +12723,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -13832,17 +12979,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -13923,7 +13070,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -14003,20 +13150,52 @@ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7 "value": "/root/.osmosisd", }, { - "name": "CODE_REPO", - "value": "https://github.com/osmosis-labs/osmosis", + "name": "CODE_REPO", + "value": "https://github.com/osmosis-labs/osmosis", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.osmosisd", + }, + { + "name": "DAEMON_NAME", + "value": "osmosisd", + }, + { + "name": "CHAIN_ID", + "value": "osmosis-1", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "DAEMON_HOME", - "value": "/root/.osmosisd", + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "DAEMON_NAME", - "value": "osmosisd", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "CHAIN_ID", - "value": "osmosis-1", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -14109,6 +13288,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -14842,24 +14053,6 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-osmosis-1", }, }, - "registry/config-configmap.yaml": { - "apiVersion": "v1", - "data": { - "osmosis-1.json": "{"chain_name":"osmosis","assets":[{"base":"uosmo","description":"The native token of Osmosis","name":"Osmosis","display":"osmo","symbol":"OSMO","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg"},"denom_units":[{"denom":"uosmo","exponent":0},{"denom":"osmo","exponent":6}],"coingecko_id":"osmosis","keywords":["staking","dex"]},{"base":"uion","name":"Ion","display":"ion","symbol":"ION","logo_URIs":{"png":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png","svg":"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg"},"denom_units":[{"denom":"uion","exponent":0},{"denom":"ion","exponent":6}],"coingecko_id":"ion","keywords":["memecoin"]}]}", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry-config", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "full-testnet", - }, - "name": "registry-config", - }, - }, "registry/deployment.yaml": { "apiVersion": "apps/v1", "kind": "Deployment", @@ -14878,14 +14071,16 @@ $CHAIN_BIN tendermint show-node-id "replicas": 1, "selector": { "matchLabels": { - "app": "registry", + "app.kubernetes.io/name": "registry", }, }, "template": { "metadata": { "labels": { - "app": "registry", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", "starship.io/name": "full-testnet", }, @@ -14894,9 +14089,25 @@ $CHAIN_BIN tendermint show-node-id "containers": [ { "env": [ + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "REGISTRY_CHAIN_CLIENT_IDS", + "value": "osmosis-1", + }, + { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", + "value": "osmosis", + }, { "name": "REGISTRY_CHAIN_CLIENT_RPCS", - "value": "http://localhost:26653", + "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, { "name": "REGISTRY_CHAIN_API_RPCS", @@ -14914,34 +14125,26 @@ $CHAIN_BIN tendermint show-node-id "name": "REGISTRY_CHAIN_CLIENT_EXPOSERS", "value": "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:8081", }, + { + "name": "REGISTRY_CHAIN_REGISTRY", + "value": "/chains", + }, ], "image": "registry:latest", "livenessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 15, "periodSeconds": 20, + "tcpSocket": { + "port": 8080, + }, }, "name": "registry", - "ports": [ - { - "containerPort": 8080, - "name": "http", - }, - { - "containerPort": 9090, - "name": "grpc", - }, - ], "readinessProbe": { - "httpGet": { - "path": "/health", - "port": "8080", - }, "initialDelaySeconds": 5, "periodSeconds": 10, + "tcpSocket": { + "port": 8080, + }, }, "resources": { "limits": { @@ -14956,378 +14159,379 @@ $CHAIN_BIN tendermint show-node-id "volumeMounts": [ { "mountPath": "/chains/osmosis-1", - "name": "chain-osmosis-1", + "name": "registry-osmosis-1", }, ], }, ], - "volumes": [ + "initContainers": [ { - "configMap": { - "name": "chain-osmosis-1", + "command": [ + "/bin/sh", + "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, }, - "name": "chain-osmosis-1", }, ], - }, - }, - }, - }, - "registry/service.yaml": { - "apiVersion": "v1", - "kind": "Service", - "metadata": { - "labels": { - "app.kubernetes.io/component": "registry", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "registry", - "app.kubernetes.io/part-of": "starship", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "full-testnet", - }, - "name": "registry", - }, - "spec": { - "ports": [ - { - "name": "http", - "port": 8080, - "targetPort": "8080", - }, - { - "name": "grpc", - "port": 9090, - "targetPort": "9090", - }, - ], - "selector": { - "app": "registry", - }, - }, - }, -} -`; - -exports[`BuilderManager Tests Directory Organization Validation should organize files with correct naming patterns: file-organization-structure 1`] = ` -{ - "configmaps": [ - "keys.yaml", - "setup-scripts.yaml", - ], - "cosmoshub": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], - "osmosis": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], -} -`; - -exports[`BuilderManager Tests File Content Validation should generate valid YAML with correct resource types: resource-type-counts 1`] = ` -{ - "ConfigMap": 4, - "Service": 1, - "StatefulSet": 1, -} -`; - -exports[`BuilderManager Tests File Organization Edge Cases should handle chains with special characters in names: special-chars-yaml-files 1`] = ` -{ - "configmaps/keys.yaml": { - "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + "volumes": [ + { + "configMap": { + "name": "registry-osmosis-1", + }, + "name": "registry-osmosis-1", + }, + ], + }, + }, }, + }, + "registry/osmosis-1-configmap.yaml": { + "apiVersion": "v1", + "data": { + "assetlist.json": "{ + "$schema": "../assetlist.schema.json", + "chain_name": "osmosis", + "assets": [ { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + "base": "uosmo", + "description": "The native token of Osmosis", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "coingecko_id": "osmosis", + "keywords": [ + "staking", + "dex" + ] }, { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "coingecko_id": "ion", + "keywords": [ + "memecoin" + ] + } + ] +}", + "chain.json": "{ + "$schema": "../chain.schema.json", + "chain_name": "osmosis", + "status": "live", + "network_type": "devnet", + "chain_id": "osmosis-1", + "pretty_name": "Osmosis Devnet", + "bech32_prefix": "osmo", + "daemon_name": "osmosisd", + "node_home": "/root/.osmosisd", + "key_algos": [ + "secp256k1" + ], + "slip44": "118", + "fees": { + "fee_tokens": [ + { + "denom": "uosmo", + "fixed_min_gas_price": 0, + "low_gas_price": 0, + "average_gas_price": 0.025, + "high_gas_price": 0.04 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uosmo" + } + ], + "lock_duration": { + "time": "1209600s" + } + }, + "codebase": { + "git_repo": "https://github.com/osmosis-labs/osmosis", + "compatible_versions": [], + "binaries": {}, + "ics_enabled": [], + "versions": [], + "consensus": { + "type": "tendermint" + } + }, + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "explorers": [ { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + "kind": "ping-pub", + "url": "http://localhost:8081" } ] -} -", +}", }, "kind": "ConfigMap", "metadata": { "labels": { - "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/component": "registry", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/name": "registry-osmosis-1", + "app.kubernetes.io/part-of": "starship", "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "special-testnet", + "starship.io/name": "full-testnet", }, - "name": "keys", + "name": "registry-osmosis-1", }, }, - "configmaps/setup-scripts.yaml": { + "registry/service.yaml": { "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID + "kind": "Service", + "metadata": { + "labels": { + "app.kubernetes.io/component": "registry", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", + "app.kubernetes.io/part-of": "starship", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "full-testnet", + }, + "name": "registry", + }, + "spec": { + "clusterIP": "None", + "ports": [ + { + "name": "http", + "port": 8080, + "targetPort": 8080, + }, + { + "name": "grpc", + "port": 9090, + "targetPort": 9090, + }, + ], + "selector": { + "app.kubernetes.io/name": "registry", + }, + }, + }, +} +`; -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq +exports[`BuilderManager Tests Directory Organization Validation should organize files with correct naming patterns: file-organization-structure 1`] = ` +{ + "configmaps": [ + "keys.yaml", + "setup-scripts.yaml", + ], + "cosmoshub": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], + "osmosis": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], +} +`; -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +exports[`BuilderManager Tests File Content Validation should generate valid YAML with correct resource types: resource-type-counts 1`] = ` +{ + "ConfigMap": 4, + "Service": 1, + "StatefulSet": 1, +} +`; -ls $CHAIN_DIR/config +exports[`BuilderManager Tests File Organization Edge Cases should handle chains with special characters in names: special-chars-yaml-files 1`] = ` +{ + "configmaps/keys.yaml": { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "special-testnet", + }, + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -15426,162 +14630,50 @@ get_proposal_id() { fi fi echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." - exit 1 -} - -vote_proposal() { - echo "Voting on proposal" - $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes - sleep 5 -} - -wait_for_proposal_to_pass() { - echo "Waiting for proposal to pass" - for ((i=1; i<=$MAX_RETRIES; i++)); do - STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') - if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then - echo "Proposal has passed!" - return 0 - else - echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." - sleep $RETRY_INTERVAL - fi - done - echo "Proposal did not pass after $MAX_RETRIES attempts." - exit 1 -} - -main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq + exit 1 } -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ +vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ + --from $KEY_NAME \\ --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + --yes + sleep 5 +} - cat /validator.log | jq +wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 } -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e +main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass +} -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi +main ", "ibc-connection.sh": "#!/bin/bash @@ -15646,128 +14738,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -15842,65 +14812,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -16102,17 +15066,17 @@ $CHAIN_BIN start $START_ARGS", "value": "undefined/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -16191,7 +15155,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -16286,6 +15250,38 @@ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7 "name": "CHAIN_ID", "value": "test-chain-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -16364,16 +15360,48 @@ bash -e /scripts/update-config.sh", "value": "", }, { - "name": "DAEMON_HOME", - "value": "", + "name": "DAEMON_HOME", + "value": "", + }, + { + "name": "DAEMON_NAME", + "value": "", + }, + { + "name": "CHAIN_ID", + "value": "test-chain-1", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "DAEMON_NAME", - "value": "", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "CHAIN_ID", - "value": "test-chain-1", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, { "name": "KEYS_CONFIG", @@ -16770,733 +15798,563 @@ wait_for_proposal_to_pass() { echo "Proposal has passed!" return 0 else - echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." - sleep $RETRY_INTERVAL - fi - done - echo "Proposal did not pass after $MAX_RETRIES attempts." - exit 1 -} - -main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi -", - "ibc-connection.sh": "#!/bin/bash - -REGISTRY_URL="$1" -CHAIN_1="$2" -CHAIN_2="$3" - -set -eux - -function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID -} - -echo "Try to get connection id, if failed, wait for 2 seconds and try again" -max_tries=20 -while [[ max_tries -gt 0 ]] -do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 -done -", - "transfer-tokens.sh": "#!/bin/bash - -ADDRESS="$1" -DENOM="$2" -FAUCET_URL="$3" -FAUCET_ENABLED="$4" - -set -eux - -function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \\ - --request POST --write-out %{http_code} --silent --output /dev/null \\ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ - $FAUCET_URL) - echo $status_code -} - -if [[ $FAUCET_ENABLED == "false" ]]; -then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 -fi - -echo "Try to send tokens, if failed, wait for 5 seconds and try again" -max_tries=5 -while [[ max_tries -gt 0 ]] -do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 -done -", - "update-config.sh": "#!/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 + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 +} - 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 +main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass +} -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 +main ", - "update-genesis.sh": "#!/bin/bash + "create-validator.sh": "#!/bin/bash DENOM="\${DENOM:=uosmo}" CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" +KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" +VAL_NAME="\${VAL_NAME:=osmosis}" +NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" +NODE_ARGS="\${NODE_ARGS}" +GAS="\${GAS:=auto}" set -eux -ls $CHAIN_DIR/config +# Wait for the node to be synced +max_tries=10 +while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] +do + if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi + echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + ((max_tries--)) + sleep 30 +done -echo "Update genesis.json file with updated local params" -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 +# Function to compare version numbers +version_compare() { + version1="$1" + version2="$2" + if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then + return 1 # version1 is greater + else + return 0 # version2 is greater or equal + fi +} -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 +# Check if cosmos_sdk_version is greater than a specified version +is_greater() { + version_compare "$1" "$2" + return $? +} -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 +function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.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 + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \\ + --node $NODE_URL \\ + --chain-id $CHAIN_ID \\ + --from $VAL_NAME \\ + --fees 100000$DENOM \\ + --keyring-backend="test" \\ + --output json \\ + --gas $GAS \\ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq } -# 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 +function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \\ + --node $NODE_URL \\ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ + --moniker $VAL_NAME \\ + --amount 5000000000$DENOM \\ + --chain-id $CHAIN_ID \\ + --from $VAL_NAME \\ + --commission-rate="0.10" \\ + --commission-max-rate="0.20" \\ + --commission-max-change-rate="0.01" \\ + --keyring-backend test \\ + --home $CHAIN_DIR \\ + --fees 100000$DENOM \\ + --gas $GAS \\ + --output json \\ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq } -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi +set +e +# Fetch the cosmos-sdk version to be able to perform the create-validator tx +cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') +echo "cosmos_sdk_version: $cosmos_sdk_version" +set -e -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 +if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 else - gov_overrides_sdk_v47 + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default fi - -$CHAIN_BIN tendermint show-node-id ", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "chain", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "setup-scripts-test-chain-1", - "app.kubernetes.io/part-of": "test-chain-1", - "app.kubernetes.io/role": "setup-scripts", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/chain-id": "test-chain-1", - "starship.io/chain-name": "test-chain", - "starship.io/name": "special-testnet", - }, - "name": "setup-scripts-test-chain-1", - }, - }, -} -`; + "ibc-connection.sh": "#!/bin/bash -exports[`BuilderManager Tests File Organization Edge Cases should validate file naming consistency across all configurations: all-config-file-structures 1`] = ` -{ - "build": { - "configmaps": [ - "keys.yaml", - "setup-scripts.yaml", - ], - "persistencecore": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], - }, - "cometmock": { - "configmaps": [ - "keys.yaml", - "setup-scripts.yaml", - ], - "cosmoshub": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - ], - }, - "cosmjs": { - "configmaps": [ - "keys.yaml", - "setup-scripts.yaml", - ], - "osmosis": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - ], - }, - "multi": { - "configmaps": [ - "keys.yaml", - "setup-scripts.yaml", - ], - "cosmoshub": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], - "osmosis": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], - }, - "single": { - "configmaps": [ - "keys.yaml", - "setup-scripts.yaml", - ], - "osmosis": [ - "genesis-patch-configmap.yaml", - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - ], - }, +REGISTRY_URL="$1" +CHAIN_1="$2" +CHAIN_2="$3" + +set -eux + +function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID } -`; -exports[`BuilderManager Tests Multi Chain Generation should generate complete multi-chain setup with proper directory organization: chain-directory-contents 1`] = ` -{ - "cosmoshub": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], - "osmosis": [ - "genesis-service.yaml", - "genesis-statefulset.yaml", - "setup-scripts-configmap.yaml", - "validator-service.yaml", - "validator-statefulset.yaml", - ], -} -`; +echo "Try to get connection id, if failed, wait for 2 seconds and try again" +max_tries=20 +while [[ max_tries -gt 0 ]] +do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 +done +", + "transfer-tokens.sh": "#!/bin/bash -exports[`BuilderManager Tests Multi Chain Generation should generate complete multi-chain setup with proper directory organization: multi-chain-directory-structure 1`] = ` -[ - "configmaps", - "cosmoshub", - "osmosis", -] -`; +ADDRESS="$1" +DENOM="$2" +FAUCET_URL="$3" +FAUCET_ENABLED="$4" -exports[`BuilderManager Tests Multi Chain Generation should generate complete multi-chain setup with proper directory organization: multi-chain-yaml-files 1`] = ` -{ - "configmaps/keys.yaml": { - "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] +set -eux + +function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \\ + --request POST --write-out %{http_code} --silent --output /dev/null \\ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ + $FAUCET_URL) + echo $status_code } + +if [[ $FAUCET_ENABLED == "false" ]]; +then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 +fi + +echo "Try to send tokens, if failed, wait for 5 seconds and try again" +max_tries=5 +while [[ max_tries -gt 0 ]] +do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 +done ", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "configmap", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-generator-test", - }, - "name": "keys", - }, - }, - "configmaps/setup-scripts.yaml": { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash + "update-config.sh": "#!/bin/bash -set -euxo pipefail +CHAIN_ID="\${CHAIN_ID:=osmosis}" +CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" +KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -mkdir -p /tmp/chains $UPGRADE_DIR +set -eux -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME +ls $CHAIN_DIR -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi +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 "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install +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 "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] +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 + -set -euo pipefail +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)) +} -RPC_URL=\${1:-"http://localhost:26657"} +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 -echo 1>&2 "Checking if $RPC_URL is ready..." +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 -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") +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 -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi +if [ "$METRICS" == "true" ]; then + sed -i -e "s/prometheus = false/prometheus = true/g" $CHAIN_DIR/config/config.toml -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + 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 "$json" | jq -r .result -exit 0 +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 ", - "create-genesis.sh": "#!/bin/bash - -set -eux + "update-genesis.sh": "#!/bin/bash DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -FAUCET_ENABLED="\${FAUCET_ENABLED:=true}" -NUM_VALIDATORS="\${NUM_VALIDATORS:=1}" -NUM_RELAYERS="\${NUM_RELAYERS:=0}" +set -eux -# check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") +ls $CHAIN_DIR/config -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json +echo "Update genesis.json file with updated local params" +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 -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" +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 -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" +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 -# Add test keys to the keyring and self delegate initial coins -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" +# 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 +} -if [[ $FAUCET_ENABLED == "false" && $NUM_RELAYERS -gt "-1" ]]; -then - ## Add relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done +# 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 +} + +if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done +if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 +else + gov_overrides_sdk_v47 fi -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID +$CHAIN_BIN tendermint show-node-id +", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "setup-scripts-test-chain-1", + "app.kubernetes.io/part-of": "test-chain-1", + "app.kubernetes.io/role": "setup-scripts", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-id": "test-chain-1", + "starship.io/chain-name": "test-chain", + "starship.io/name": "special-testnet", + }, + "name": "setup-scripts-test-chain-1", + }, + }, +} +`; -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq +exports[`BuilderManager Tests File Organization Edge Cases should validate file naming consistency across all configurations: all-config-file-structures 1`] = ` +{ + "build": { + "configmaps": [ + "keys.yaml", + "setup-scripts.yaml", + ], + "persistencecore": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], + }, + "cometmock": { + "configmaps": [ + "keys.yaml", + "setup-scripts.yaml", + ], + "cosmoshub": [ + "cometmock-service.yaml", + "cometmock-statefulset.yaml", + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + ], + }, + "cosmjs": { + "configmaps": [ + "keys.yaml", + "setup-scripts.yaml", + ], + "osmosis": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + ], + }, + "multi": { + "configmaps": [ + "keys.yaml", + "setup-scripts.yaml", + ], + "cosmoshub": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], + "osmosis": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], + }, + "single": { + "configmaps": [ + "keys.yaml", + "setup-scripts.yaml", + ], + "osmosis": [ + "genesis-patch-configmap.yaml", + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + ], + }, +} +`; + +exports[`BuilderManager Tests Multi Chain Generation should generate complete multi-chain setup with proper directory organization: chain-directory-contents 1`] = ` +{ + "cosmoshub": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], + "osmosis": [ + "genesis-service.yaml", + "genesis-statefulset.yaml", + "setup-scripts-configmap.yaml", + "validator-service.yaml", + "validator-statefulset.yaml", + ], +} +`; -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +exports[`BuilderManager Tests Multi Chain Generation should generate complete multi-chain setup with proper directory organization: multi-chain-directory-structure 1`] = ` +[ + "configmaps", + "cosmoshub", + "osmosis", +] +`; -ls $CHAIN_DIR/config +exports[`BuilderManager Tests Multi Chain Generation should generate complete multi-chain setup with proper directory organization: multi-chain-yaml-files 1`] = ` +{ + "configmaps/keys.yaml": { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-generator-test", + }, + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -17601,156 +16459,44 @@ get_proposal_id() { vote_proposal() { echo "Voting on proposal" $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes - sleep 5 -} - -wait_for_proposal_to_pass() { - echo "Waiting for proposal to pass" - for ((i=1; i<=$MAX_RETRIES; i++)); do - STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') - if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then - echo "Proposal has passed!" - return 0 - else - echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." - sleep $RETRY_INTERVAL - fi - done - echo "Proposal did not pass after $MAX_RETRIES attempts." - exit 1 -} - -main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ + --from $KEY_NAME \\ --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + --yes + sleep 5 +} - cat /validator.log | jq +wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 } -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e +main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass +} -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi +main ", "ibc-connection.sh": "#!/bin/bash @@ -17815,128 +16561,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -17972,59 +16596,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -18228,17 +16846,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -18314,6 +16932,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -18403,6 +17053,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -19116,59 +17798,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -19447,17 +18123,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -19478,11 +18154,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." - echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -19506,11 +18182,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -19575,6 +18251,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -19690,6 +18398,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "cosmoshub-4-genesis", @@ -19786,59 +18526,53 @@ cat $CHAIN_DIR/config/config.toml", "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -20042,17 +18776,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -20133,7 +18867,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -20225,6 +18959,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -20314,6 +19080,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -21057,59 +19855,53 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, ], "selector": { @@ -21388,17 +20180,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -21419,11 +20211,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -21447,11 +20239,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -21517,499 +20309,391 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "value": "osmosis-1", }, { - "name": "GENESIS_HOST", - "value": "osmosis-1-genesis", - }, - { - "name": "GENESIS_PORT", - "value": "8081", - }, - { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, - }, - { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", - }, - { - "name": "FAUCET_ENABLED", - "value": "true", - }, - { - "name": "METRICS", - "value": "false", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-validator", - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", - }, - "requests": { - "cpu": "0.5", - "memory": "500M", - }, - }, - "volumeMounts": [ - { - "mountPath": "/root/.osmosisd", - "name": "node", - }, - { - "mountPath": "/configs", - "name": "addresses", - }, - { - "mountPath": "/scripts", - "name": "scripts", - }, - ], - }, - { - "command": [ - "bash", - "-c", - "VAL_INDEX=\${HOSTNAME##*-} -echo "Validator Index: $VAL_INDEX" - - -echo "Running setup config script..." -bash -e /scripts/update-config.sh - -curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") -if [[ $NODE_ID == "" ]]; then - echo "Node ID is null, exiting early" - exit 1 -fi - -GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 -echo "Node P2P: $GENESIS_NODE_P2P" -sed -i "s/persistent_peers = \\"\\"/persistent_peers = \\"$GENESIS_NODE_P2P\\"/g" $CHAIN_DIR/config/config.toml - -echo "Printing the whole config.toml file" -cat $CHAIN_DIR/config/config.toml", - ], - "env": [ - { - "name": "DENOM", - "value": "uosmo", - }, - { - "name": "COINS", - "value": "100000000000000uosmo,100000000000000uion", - }, - { - "name": "CHAIN_BIN", - "value": "osmosisd", - }, - { - "name": "CHAIN_DIR", - "value": "/root/.osmosisd", - }, - { - "name": "CODE_REPO", - "value": "https://github.com/osmosis-labs/osmosis", - }, - { - "name": "DAEMON_HOME", - "value": "/root/.osmosisd", + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "DAEMON_NAME", - "value": "osmosisd", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "CHAIN_ID", - "value": "osmosis-1", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "GENESIS_HOST", - "value": "osmosis-1-genesis", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", }, { - "name": "GENESIS_PORT", - "value": "8081", + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", }, { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", }, { - "name": "METRICS", - "value": "false", - }, - ], - "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-config", - "resources": { - "limits": { - "cpu": "0.5", - "memory": "500M", + "name": "TIMEOUT_COMMIT", + "value": "800ms", }, - "requests": { - "cpu": "0.5", - "memory": "500M", + { + "name": "GENESIS_HOST", + "value": "osmosis-1-genesis", }, - }, - "volumeMounts": [ { - "mountPath": "/root/.osmosisd", - "name": "node", + "name": "GENESIS_PORT", + "value": "8081", }, { - "mountPath": "/configs", - "name": "addresses", + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, }, { - "mountPath": "/scripts", - "name": "scripts", + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", }, - ], - }, - ], - "volumes": [ - { - "emptyDir": {}, - "name": "node", - }, - { - "configMap": { - "name": "keys", - }, - "name": "addresses", - }, - { - "configMap": { - "name": "setup-scripts-osmosis-1", - }, - "name": "scripts", - }, - { - "emptyDir": {}, - "name": "faucet", - }, - ], - }, - }, - }, - }, -} -`; - -exports[`BuilderManager Tests Single Chain Generation should generate complete single-chain setup with proper directory organization: single-chain-directory-structure 1`] = ` -[ - "configmaps", - "osmosis", -] -`; - -exports[`BuilderManager Tests Single Chain Generation should generate complete single-chain setup with proper directory organization: single-chain-yaml-files 1`] = ` -{ - "configmaps/keys.yaml": { - "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] -} -", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "configmap", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-generator-test", - }, - "name": "keys", - }, - }, - "configmaps/setup-scripts.yaml": { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." + { + "name": "FAUCET_ENABLED", + "value": "true", + }, + { + "name": "METRICS", + "value": "false", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-validator", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.osmosisd", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + { + "command": [ + "bash", + "-c", + "VAL_INDEX=\${HOSTNAME##*-} +echo "Validator Index: $VAL_INDEX" -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi +echo "Running setup config script..." +bash -e /scripts/update-config.sh -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" +curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id +NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id") +if [[ $NODE_ID == "" ]]; then + echo "Node ID is null, exiting early" exit 1 fi -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID +GENESIS_NODE_P2P=$NODE_ID@$GENESIS_HOST.$NAMESPACE.svc.cluster.local:26656 +echo "Node P2P: $GENESIS_NODE_P2P" +sed -i "s/persistent_peers = \\"\\"/persistent_peers = \\"$GENESIS_NODE_P2P\\"/g" $CHAIN_DIR/config/config.toml -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq +echo "Printing the whole config.toml file" +cat $CHAIN_DIR/config/config.toml", + ], + "env": [ + { + "name": "DENOM", + "value": "uosmo", + }, + { + "name": "COINS", + "value": "100000000000000uosmo,100000000000000uion", + }, + { + "name": "CHAIN_BIN", + "value": "osmosisd", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.osmosisd", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/osmosis-labs/osmosis", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.osmosisd", + }, + { + "name": "DAEMON_NAME", + "value": "osmosisd", + }, + { + "name": "CHAIN_ID", + "value": "osmosis-1", + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "GENESIS_HOST", + "value": "osmosis-1-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "METRICS", + "value": "false", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-config", + "resources": { + "limits": { + "cpu": "0.5", + "memory": "500M", + }, + "requests": { + "cpu": "0.5", + "memory": "500M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/root/.osmosisd", + "name": "node", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + ], + }, + ], + "volumes": [ + { + "emptyDir": {}, + "name": "node", + }, + { + "configMap": { + "name": "keys", + }, + "name": "addresses", + }, + { + "configMap": { + "name": "setup-scripts-osmosis-1", + }, + "name": "scripts", + }, + { + "emptyDir": {}, + "name": "faucet", + }, + ], + }, + }, + }, + }, +} +`; -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +exports[`BuilderManager Tests Single Chain Generation should generate complete single-chain setup with proper directory organization: single-chain-directory-structure 1`] = ` +[ + "configmaps", + "osmosis", +] +`; -ls $CHAIN_DIR/config +exports[`BuilderManager Tests Single Chain Generation should generate complete single-chain setup with proper directory organization: single-chain-yaml-files 1`] = ` +{ + "configmaps/keys.yaml": { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-generator-test", + }, + "name": "keys", + }, + }, + "configmaps/setup-scripts.yaml": { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -22102,168 +20786,56 @@ get_proposal_id() { LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') - if [ -n "$PROPOSAL_ID" ]; then - echo "Proposal ID: $PROPOSAL_ID" - return 0 - fi - fi - echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." - exit 1 -} - -vote_proposal() { - echo "Voting on proposal" - $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes - sleep 5 -} - -wait_for_proposal_to_pass() { - echo "Waiting for proposal to pass" - for ((i=1; i<=$MAX_RETRIES; i++)); do - STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') - if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then - echo "Proposal has passed!" - return 0 - else - echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." - sleep $RETRY_INTERVAL - fi - done - echo "Proposal did not pass after $MAX_RETRIES attempts." - exit 1 -} - -main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 } -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ +vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ + --from $KEY_NAME \\ --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + --yes + sleep 5 +} - cat /validator.log | jq +wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 } -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e +main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass +} -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi +main ", "ibc-connection.sh": "#!/bin/bash @@ -22328,128 +20900,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -22524,65 +20974,59 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, "protocol": "TCP", - "targetPort": "26658", + "targetPort": 26658, }, { "name": "grpc", "port": 9090, "protocol": "TCP", - "targetPort": "9090", + "targetPort": 9090, }, { "name": "grpc-web", "port": 9091, "protocol": "TCP", - "targetPort": "9091", + "targetPort": 9091, + }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": 26656, }, { "name": "rest", "port": 1317, "protocol": "TCP", - "targetPort": "1317", + "targetPort": 1317, }, { "name": "rpc", "port": 26657, "protocol": "TCP", - "targetPort": "26657", - }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26657, }, { "name": "exposer", "port": 8081, "protocol": "TCP", - "targetPort": "8081", + "targetPort": 8081, }, { "name": "faucet", "port": 8000, "protocol": "TCP", - "targetPort": "8000", + "targetPort": 8000, }, { "name": "metrics", "port": 26660, "protocol": "TCP", - "targetPort": "26660", + "targetPort": 26660, }, ], "selector": { @@ -22786,17 +21230,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -22877,7 +21321,7 @@ done "readinessProbe": { "httpGet": { "path": "/status", - "port": "8000", + "port": 8000, }, "initialDelaySeconds": 30, "periodSeconds": 10, @@ -22972,6 +21416,38 @@ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7 "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -23063,6 +21539,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", diff --git a/packages/packages/generator/__tests__/__snapshots__/cosmos.integration.test.ts.snap b/packages/packages/generator/__tests__/__snapshots__/cosmos.integration.test.ts.snap index cabc8b677..0c5755d01 100644 --- a/packages/packages/generator/__tests__/__snapshots__/cosmos.integration.test.ts.snap +++ b/packages/packages/generator/__tests__/__snapshots__/cosmos.integration.test.ts.snap @@ -89,7 +89,7 @@ exports[`Cosmos Integration Tests Resource Content Verification should generate exports[`Cosmos Integration Tests Resource Content Verification should generate correct port mappings: port-mappings 1`] = ` { "hasRpcPort": true, - "portCount": 10, + "portCount": 9, } `; @@ -101,7 +101,7 @@ exports[`Cosmos Integration Tests Resource Content Verification should handle sp }, "cometmock": { "hasGenesis": true, - "manifestCount": 4, + "manifestCount": 6, }, "cosmjs-faucet": { "hasGenesis": true, diff --git a/packages/packages/generator/__tests__/__snapshots__/cosmos.test.ts.snap b/packages/packages/generator/__tests__/__snapshots__/cosmos.test.ts.snap index 18943534b..4b4cf84d1 100644 --- a/packages/packages/generator/__tests__/__snapshots__/cosmos.test.ts.snap +++ b/packages/packages/generator/__tests__/__snapshots__/cosmos.test.ts.snap @@ -181,178 +181,6 @@ exports[`Cosmos Generator Tests Manifest Generation should generate all manifest { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -496,167 +324,55 @@ main() { main ", - "create-validator.sh": "#!/bin/bash + "ibc-connection.sh": "#!/bin/bash -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" +REGISTRY_URL="$1" +CHAIN_1="$2" +CHAIN_2="$3" set -eux -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] +function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID +} + +echo "Try to get connection id, if failed, wait for 2 seconds and try again" +max_tries=20 +while [[ max_tries -gt 0 ]] do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" ((max_tries--)) - sleep 30 + sleep 10 done +", + "transfer-tokens.sh": "#!/bin/bash -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} +ADDRESS="$1" +DENOM="$2" +FAUCET_URL="$3" +FAUCET_ENABLED="$4" -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? +set -eux + +function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \\ + --request POST --write-out %{http_code} --silent --output /dev/null \\ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ + $FAUCET_URL) + echo $status_code } -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi -", - "ibc-connection.sh": "#!/bin/bash - -REGISTRY_URL="$1" -CHAIN_1="$2" -CHAIN_2="$3" - -set -eux - -function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID -} - -echo "Try to get connection id, if failed, wait for 2 seconds and try again" -max_tries=20 -while [[ max_tries -gt 0 ]] -do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 -done -", - "transfer-tokens.sh": "#!/bin/bash - -ADDRESS="$1" -DENOM="$2" -FAUCET_URL="$3" -FAUCET_ENABLED="$4" - -set -eux - -function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \\ - --request POST --write-out %{http_code} --silent --output /dev/null \\ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ - $FAUCET_URL) - echo $status_code -} - -if [[ $FAUCET_ENABLED == "false" ]]; -then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 -fi +if [[ $FAUCET_ENABLED == "false" ]]; +then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 +fi echo "Try to send tokens, if failed, wait for 5 seconds and try again" max_tries=5 @@ -671,128 +387,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -828,12 +422,6 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, @@ -852,6 +440,12 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "9091", }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": "26656", + }, { "name": "rest", "port": 1317, @@ -864,12 +458,6 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "26657", }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", - }, { "name": "exposer", "port": 8081, @@ -908,12 +496,6 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, @@ -932,6 +514,12 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "9091", }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": "26656", + }, { "name": "rest", "port": 1317, @@ -944,12 +532,6 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "26657", }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", - }, { "name": "exposer", "port": 8081, @@ -1164,17 +746,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -1347,6 +929,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -1436,6 +1050,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -1797,17 +1443,17 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -1828,11 +1474,11 @@ VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh", "/bin/sh", "-c", " - while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." - echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done echo "Ready to start" exit 0", ], @@ -1856,11 +1502,11 @@ exit 0", "resources": { "limits": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, "requests": { "cpu": "0.1", - "memory": "128M", + "memory": "100M", }, }, }, @@ -1925,6 +1571,38 @@ echo '{"node_id":"'$NODE_ID'"}' > $CHAIN_DIR/config/node_id.json", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -2040,6 +1718,38 @@ cat $CHAIN_DIR/config/config.toml", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "GENESIS_HOST", "value": "osmosis-1-genesis", @@ -2873,278 +2583,106 @@ exports[`Cosmos Generator Tests Manifest Generation should generate all manifest { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash + "create-ics.sh": "#!/bin/bash set -euxo pipefail -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi +DENOM="\${DENOM:=uatom}" +CHAIN_ID="\${CHAIN_ID:=cosmoshub-1}" +CHAIN_BIN="\${CHAIN_BIN:=gaiad}" +NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" +KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi +PROPOSAL_FILE="\${PROPOSAL_FILE}" +KEY_NAME="ics-setup" +MAX_RETRIES=3 +RETRY_INTERVAL=30 +SUBMIT_PROPOSAL_CMD="" -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install +add_key() { + # Add test keys to the keyring and self delegate initial coins + echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) + jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" + echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") +} -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi +get_validator_address() { + echo "Getting validator address..." + VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') + echo "Selected validator address: $VALIDATOR_ADDRESS" +} -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] +stake_tokens() { + COINS="10000000$DENOM" + echo "Staking tokens..." + $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \\ + --from $KEY_NAME \\ + --chain-id $CHAIN_ID \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ + --output json \\ + --yes + sleep 5 +} -set -euo pipefail +determine_proposal_command() { + echo "Determining the correct command to submit proposals..." + HELP_OUTPUT=$($CHAIN_BIN tx gov --help) + if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then + SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" + else + SUBMIT_PROPOSAL_CMD="submit-proposal" + fi + echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." +} -RPC_URL=\${1:-"http://localhost:26657"} +submit_proposal() { + echo "Get all proposals" + PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) + if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then + echo "No existing proposals found. Proceeding to submit a new proposal." + else + echo "Existing proposals: $PROPOSALS_OUTPUT" + fi -echo 1>&2 "Checking if $RPC_URL is ready..." + echo "Submit gov proposal on chain" + PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \\ + --from $KEY_NAME \\ + --chain-id $CHAIN_ID \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ + --output json \\ + --yes) + echo $PROPOSAL_TX -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") + # Extract JSON part from the output + TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') + if [ -n "$TX_HASH" ]; then + echo "Transaction hash: $TX_HASH" + else + echo "Failed to submit proposal. Output was not as expected." + exit 1 + fi -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi + sleep 5 +} -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" +get_proposal_id() { + echo "Getting proposal ID" + PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) + LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') + if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then + PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') + if [ -n "$PROPOSAL_ID" ]; then + echo "Proposal ID: $PROPOSAL_ID" + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", - "create-ics.sh": "#!/bin/bash - -set -euxo pipefail - -DENOM="\${DENOM:=uatom}" -CHAIN_ID="\${CHAIN_ID:=cosmoshub-1}" -CHAIN_BIN="\${CHAIN_BIN:=gaiad}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" - -PROPOSAL_FILE="\${PROPOSAL_FILE}" -KEY_NAME="ics-setup" -MAX_RETRIES=3 -RETRY_INTERVAL=30 -SUBMIT_PROPOSAL_CMD="" - -add_key() { - # Add test keys to the keyring and self delegate initial coins - echo "Adding key...." $(jq -r ".keys[0].name" $KEYS_CONFIG) - jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend="test" - echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend="test") -} - -get_validator_address() { - echo "Getting validator address..." - VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') - echo "Selected validator address: $VALIDATOR_ADDRESS" -} - -stake_tokens() { - COINS="10000000$DENOM" - echo "Staking tokens..." - $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes - sleep 5 -} - -determine_proposal_command() { - echo "Determining the correct command to submit proposals..." - HELP_OUTPUT=$($CHAIN_BIN tx gov --help) - if echo "$HELP_OUTPUT" | grep -q "submit-legacy-proposal"; then - SUBMIT_PROPOSAL_CMD="submit-legacy-proposal" - else - SUBMIT_PROPOSAL_CMD="submit-proposal" - fi - echo "Using $SUBMIT_PROPOSAL_CMD for submitting proposals." -} - -submit_proposal() { - echo "Get all proposals" - PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) - if echo "$PROPOSALS_OUTPUT" | grep -q "no proposals found"; then - echo "No existing proposals found. Proceeding to submit a new proposal." - else - echo "Existing proposals: $PROPOSALS_OUTPUT" - fi - - echo "Submit gov proposal on chain" - PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes) - echo $PROPOSAL_TX - - # Extract JSON part from the output - TX_HASH=$(echo "$PROPOSAL_TX" | grep -o '{.*}' | jq -r '.txhash') - if [ -n "$TX_HASH" ]; then - echo "Transaction hash: $TX_HASH" - else - echo "Failed to submit proposal. Output was not as expected." - exit 1 - fi - - sleep 5 -} - -get_proposal_id() { - echo "Getting proposal ID" - PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) - LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') - if [ "$LOGS" != "null" ] && [ "$LOGS" != "[]" ]; then - PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') - if [ -n "$PROPOSAL_ID" ]; then - echo "Proposal ID: $PROPOSAL_ID" - return 0 - fi - fi - echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." - exit 1 -} +} vote_proposal() { echo "Voting on proposal" @@ -3188,161 +2726,49 @@ main() { main ", - "create-validator.sh": "#!/bin/bash + "ibc-connection.sh": "#!/bin/bash -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" +REGISTRY_URL="$1" +CHAIN_1="$2" +CHAIN_2="$3" set -eux -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] +function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID +} + +echo "Try to get connection id, if failed, wait for 2 seconds and try again" +max_tries=20 +while [[ max_tries -gt 0 ]] do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" ((max_tries--)) - sleep 30 + sleep 10 done +", + "transfer-tokens.sh": "#!/bin/bash -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} +ADDRESS="$1" +DENOM="$2" +FAUCET_URL="$3" +FAUCET_ENABLED="$4" -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} +set -eux -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi -", - "ibc-connection.sh": "#!/bin/bash - -REGISTRY_URL="$1" -CHAIN_1="$2" -CHAIN_2="$3" - -set -eux - -function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID -} - -echo "Try to get connection id, if failed, wait for 2 seconds and try again" -max_tries=20 -while [[ max_tries -gt 0 ]] -do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 -done -", - "transfer-tokens.sh": "#!/bin/bash - -ADDRESS="$1" -DENOM="$2" -FAUCET_URL="$3" -FAUCET_ENABLED="$4" - -set -eux - -function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \\ - --request POST --write-out %{http_code} --silent --output /dev/null \\ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ - $FAUCET_URL) - echo $status_code -} +function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \\ + --request POST --write-out %{http_code} --silent --output /dev/null \\ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ + $FAUCET_URL) + echo $status_code +} if [[ $FAUCET_ENABLED == "false" ]]; then @@ -3363,128 +2789,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -3520,12 +2824,6 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, @@ -3544,6 +2842,12 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "9091", }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": "26656", + }, { "name": "rest", "port": 1317, @@ -3556,12 +2860,6 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "26657", }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", - }, { "name": "exposer", "port": 8081, @@ -3782,17 +3080,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -3969,20 +3267,52 @@ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7 "value": "osmosis-1", }, { - "name": "KEYS_CONFIG", - "value": "/configs/keys.json", + "name": "TIME_IOTA_MS", + "value": "10", }, { - "name": "FAUCET_ENABLED", - "value": "true", + "name": "TIMEOUT_PROPOSE", + "value": "400ms", }, { - "name": "NUM_VALIDATORS", - "value": "1", + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", }, { - "name": "NUM_RELAYERS", - "value": "0", + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + { + "name": "FAUCET_ENABLED", + "value": "true", + }, + { + "name": "NUM_VALIDATORS", + "value": "1", + }, + { + "name": "NUM_RELAYERS", + "value": "0", }, ], "image": "ghcr.io/cosmology-tech/starship/osmosis:v25.0.0", @@ -4059,6 +3389,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -4993,178 +4355,6 @@ exports[`Cosmos Generator Tests Manifest Generation should handle cometmock conf { "apiVersion": "v1", "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq - -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs - -ls $CHAIN_DIR/config -", "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -5308,146 +4498,34 @@ main() { main ", - "create-validator.sh": "#!/bin/bash + "ibc-connection.sh": "#!/bin/bash -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" +REGISTRY_URL="$1" +CHAIN_1="$2" +CHAIN_2="$3" set -eux -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] +function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID +} + +echo "Try to get connection id, if failed, wait for 2 seconds and try again" +max_tries=20 +while [[ max_tries -gt 0 ]] do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" ((max_tries--)) - sleep 30 + sleep 10 done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi -", - "ibc-connection.sh": "#!/bin/bash - -REGISTRY_URL="$1" -CHAIN_1="$2" -CHAIN_2="$3" - -set -eux - -function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID -} - -echo "Try to get connection id, if failed, wait for 2 seconds and try again" -max_tries=20 -while [[ max_tries -gt 0 ]] -do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 -done -", - "transfer-tokens.sh": "#!/bin/bash +", + "transfer-tokens.sh": "#!/bin/bash ADDRESS="$1" DENOM="$2" @@ -5483,128 +4561,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -5640,12 +4596,6 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, @@ -5664,6 +4614,12 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "9091", }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": "26656", + }, { "name": "rest", "port": 1317, @@ -5676,12 +4632,6 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "26657", }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", - }, { "name": "exposer", "port": 8081, @@ -5883,17 +4833,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.gaia/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -5969,6 +4919,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -6058,6 +5040,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "cosmoshub-4", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -6751,307 +5765,505 @@ $CHAIN_BIN tendermint show-node-id "name": "setup-scripts-cosmoshub-4", }, }, -] -`; - -exports[`Cosmos Generator Tests Manifest Generation should handle different chain configurations: different-chain-configurations 1`] = ` -{ - "buildManifestCount": 7, - "customManifestCount": 5, - "hasConsumerProposal": true, - "icsManifestCount": 13, -} -`; - -exports[`Cosmos Generator Tests Manifest Generation should handle different faucet configurations: cosmjs-faucet-manifests 1`] = ` -[ { "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] -} -", - }, - "kind": "ConfigMap", + "kind": "Service", "metadata": { "labels": { - "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/component": "chain", "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/role": "cometmock", + "app.kubernetes.io/type": "cosmoshub-4-service", "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-id": "cosmoshub-4", + "starship.io/chain-name": "cosmoshub", "starship.io/name": "starship-generator-test", }, - "name": "keys", + "name": "cosmoshub-4-cometmock", + }, + "spec": { + "clusterIP": "None", + "ports": [ + { + "name": "rpc", + "port": 22331, + "protocol": "TCP", + "targetPort": "22331", + }, + ], + "selector": { + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + }, }, }, { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash - -set -euxo pipefail - -mkdir -p /tmp/chains $UPGRADE_DIR - -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME - -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi -fi - -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi - -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install - -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi - -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] - -set -euo pipefail - -RPC_URL=\${1:-"http://localhost:26657"} - -echo 1>&2 "Checking if $RPC_URL is ready..." - -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") - -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi - -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 -fi - -echo "$json" | jq -r .result -exit 0 -", - "create-genesis.sh": "#!/bin/bash - -set -eux - -DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -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 -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") - -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json - -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" - -# Add test keys to the keyring and self delegate initial coins -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 relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi - -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/id": "cosmoshub-4", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/part-of": "cosmoshub-4", + "app.kubernetes.io/role": "cometmock", + "app.kubernetes.io/type": "cosmoshub-4-statefulset", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-name": "cosmoshub", + "starship.io/name": "starship-generator-test", + }, + "name": "cosmoshub-4-cometmock", + }, + "spec": { + "replicas": 1, + "revisionHistoryLimit": 3, + "selector": { + "matchLabels": { + "app.kubernetes.io/instance": "cosmoshub", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + }, + }, + "serviceName": "cosmoshub-4-cometmock", + "template": { + "metadata": { + "annotations": { + "quality": "release", + "role": "api-gateway", + "sla": "high", + "tier": "gateway", + }, + "labels": { + "app.kubernetes.io/instance": "cosmoshub", + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/rawname": "cosmoshub-4-cometmock", + "app.kubernetes.io/type": "cometmock", + "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": { + "containers": [ + { + "command": [ + "bash", + "-c", + "NODE_LISTEN_ADDR_STR="tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658" +NODE_HOME_STR="/chain/genesis" + +/chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "KEYS_CONFIG", + "value": "/configs/keys.json", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/gaia:v18.0.0", + "imagePullPolicy": "IfNotPresent", + "name": "comet", + "readinessProbe": { + "httpGet": { + "path": "/status", + "port": "22331", + }, + "initialDelaySeconds": 10, + "periodSeconds": 10, + }, + "resources": { + "limits": { + "cpu": "0.3", + "memory": "300M", + }, + "requests": { + "cpu": "0.3", + "memory": "300M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/chain", + "name": "node", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "initContainers": [ + { + "command": [ + "/bin/sh", + "-c", + "while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; +done + +echo "Ready to start" +exit 0", + ], + "env": [ + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + ], + "image": "curlimages/curl", + "imagePullPolicy": "IfNotPresent", + "name": "init-wait", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "100M", + }, + "requests": { + "cpu": "0.1", + "memory": "100M", + }, + }, + }, + { + "command": [ + "bash", + "-c", + "mkdir -p /chain/genesis/config +mkdir -p /chain/genesis/data +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json +echo "Genesis file that we got....." +cat /chain/genesis/config/genesis.json + +## fetch priv_validator and priv_validator_state of all validators +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json +echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + +echo "copy cometmock binary to shared dir" +cp /usr/local/bin/cometmock /chain/cometmock", + ], + "env": [ + { + "name": "DENOM", + "value": "uatom", + }, + { + "name": "COINS", + "value": "100000000000000uatom", + }, + { + "name": "CHAIN_BIN", + "value": "gaiad", + }, + { + "name": "CHAIN_DIR", + "value": "/root/.gaia", + }, + { + "name": "CODE_REPO", + "value": "https://github.com/cosmos/gaia", + }, + { + "name": "DAEMON_HOME", + "value": "/root/.gaia", + }, + { + "name": "DAEMON_NAME", + "value": "gaiad", + }, + { + "name": "CHAIN_ID", + "value": "cosmoshub-4", + }, + { + "name": "GENESIS_HOST", + "value": "cosmoshub-4-genesis", + }, + { + "name": "GENESIS_PORT", + "value": "8081", + }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, + ], + "image": "ghcr.io/informalsystems/cometmock:v0.37.x", + "imagePullPolicy": "IfNotPresent", + "name": "init-comet", + "resources": { + "limits": { + "cpu": "0.3", + "memory": "300M", + }, + "requests": { + "cpu": "0.3", + "memory": "300M", + }, + }, + "volumeMounts": [ + { + "mountPath": "/chain", + "name": "node", + }, + { + "mountPath": "/scripts", + "name": "scripts", + }, + { + "mountPath": "/configs", + "name": "addresses", + }, + ], + }, + ], + "volumes": [ + { + "emptyDir": {}, + "name": "node", + }, + { + "configMap": { + "name": "keys", + }, + "name": "addresses", + }, + { + "configMap": { + "name": "setup-scripts-cosmoshub-4", + }, + "name": "scripts", + }, + ], + }, + }, + }, + }, +] +`; -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +exports[`Cosmos Generator Tests Manifest Generation should handle different chain configurations: different-chain-configurations 1`] = ` +{ + "buildManifestCount": 7, + "customManifestCount": 5, + "hasConsumerProposal": true, + "icsManifestCount": 13, +} +`; -ls $CHAIN_DIR/config +exports[`Cosmos Generator Tests Manifest Generation should handle different faucet configurations: cosmjs-faucet-manifests 1`] = ` +[ + { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-generator-test", + }, + "name": "keys", + }, + }, + { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -7194,118 +6406,6 @@ main() { } main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi ", "ibc-connection.sh": "#!/bin/bash @@ -7370,128 +6470,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -7527,12 +6505,6 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, @@ -7551,6 +6523,12 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "9091", }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": "26656", + }, { "name": "rest", "port": 1317, @@ -7563,12 +6541,6 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "26657", }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", - }, { "name": "exposer", "port": 8081, @@ -7783,17 +6755,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -7982,6 +6954,38 @@ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && e "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -8071,6 +7075,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -8485,577 +7521,405 @@ version_compare() { # Check if cosmos_sdk_version is greater than a specified version is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ - --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq -} - -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e - -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi -", - "ibc-connection.sh": "#!/bin/bash - -REGISTRY_URL="$1" -CHAIN_1="$2" -CHAIN_2="$3" - -set -eux - -function connection_id() { - CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") - echo $CONNECTION_ID -} - -echo "Try to get connection id, if failed, wait for 2 seconds and try again" -max_tries=20 -while [[ max_tries -gt 0 ]] -do - id=$(connection_id) - if [[ -n "$id" ]]; then - echo "Found connection id: $id" - exit 0 - fi - echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 10 -done -", - "transfer-tokens.sh": "#!/bin/bash - -ADDRESS="$1" -DENOM="$2" -FAUCET_URL="$3" -FAUCET_ENABLED="$4" - -set -eux - -function transfer_token() { - status_code=$(curl --header "Content-Type: application/json" \\ - --request POST --write-out %{http_code} --silent --output /dev/null \\ - --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ - $FAUCET_URL) - echo $status_code -} - -if [[ $FAUCET_ENABLED == "false" ]]; -then - echo "Faucet not enabled... skipping transfer token from faucet" - exit 0 -fi - -echo "Try to send tokens, if failed, wait for 5 seconds and try again" -max_tries=5 -while [[ max_tries -gt 0 ]] -do - status_code=$(transfer_token) - if [[ "$status_code" -eq 200 ]]; then - echo "Successfully sent tokens" - exit 0 - fi - echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" - ((max_tries--)) - sleep 2 -done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 + version_compare "$1" "$2" + return $? +} -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 +function cosmos-sdk-version-v50() { + # Content for the validator.json file + json_content='{ + "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', + "amount": "5000000000'$DENOM'", + "moniker": "'$VAL_NAME'", + "commission-rate": "0.1", + "commission-max-rate": "0.2", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1000000" + }' + echo "$json_content" > /validator.json + cat /validator.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 + # Run create validator tx command + echo "Running txn for create-validator" + $CHAIN_BIN tx staking create-validator /validator.json \\ + --node $NODE_URL \\ + --chain-id $CHAIN_ID \\ + --from $VAL_NAME \\ + --fees 100000$DENOM \\ + --keyring-backend="test" \\ + --output json \\ + --gas $GAS \\ + --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log -# 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 + cat /validator.log | jq } -# 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 +function cosmos-sdk-version-default() { + # Run create validator tx command + echo "Running txn for create-validator" + args='' + if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; + then + args+='--min-self-delegation=1000000' + fi + $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq + $CHAIN_BIN tx staking create-validator \\ + --node $NODE_URL \\ + --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ + --moniker $VAL_NAME \\ + --amount 5000000000$DENOM \\ + --chain-id $CHAIN_ID \\ + --from $VAL_NAME \\ + --commission-rate="0.10" \\ + --commission-max-rate="0.20" \\ + --commission-max-change-rate="0.01" \\ + --keyring-backend test \\ + --home $CHAIN_DIR \\ + --fees 100000$DENOM \\ + --gas $GAS \\ + --output json \\ + --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + + cat /validator.log | jq } -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi +set +e +# Fetch the cosmos-sdk version to be able to perform the create-validator tx +cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') +echo "cosmos_sdk_version: $cosmos_sdk_version" +set -e -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 +if is_greater "$cosmos_sdk_version" "v0.50.0"; then + echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" + cosmos-sdk-version-v50 else - gov_overrides_sdk_v47 + echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" + cosmos-sdk-version-default fi - -$CHAIN_BIN tendermint show-node-id ", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "chain", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "setup-scripts-osmosis-1", - "app.kubernetes.io/part-of": "osmosis-1", - "app.kubernetes.io/role": "setup-scripts", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/chain-id": "osmosis-1", - "starship.io/chain-name": "osmosis", - "starship.io/name": "starship-generator-test", - }, - "name": "setup-scripts-osmosis-1", - }, - }, -] -`; + "ibc-connection.sh": "#!/bin/bash -exports[`Cosmos Generator Tests Manifest Generation should handle different faucet configurations: starship-faucet-manifests 1`] = ` -[ - { - "apiVersion": "v1", - "data": { - "keys.json": "{ - "genesis": [ - { - "name": "genesis", - "type": "local", - "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" - } - ], - "validators": [ - { - "name": "validator", - "type": "local", - "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" - } - ], - "faucet": [ - { - "name": "faucet", - "type": "local", - "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" - } - ], - "keys": [ - { - "name": "test1", - "type": "local", - "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" - }, - { - "name": "test2", - "type": "local", - "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" - }, - { - "name": "test3", - "type": "local", - "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" - } - ], - "relayers": [ - { - "name": "relayer1", - "type": "local", - "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" - }, - { - "name": "relayer2", - "type": "local", - "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" - }, - { - "name": "relayer3", - "type": "local", - "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" - }, - { - "name": "relayer4", - "type": "local", - "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" - }, - { - "name": "relayer5", - "type": "local", - "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" - } - ], - "relayers_cli": [ - { - "name": "relayer-cli-1", - "type": "local", - "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" - }, - { - "name": "relayer-cli-2", - "type": "local", - "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" - }, - { - "name": "relayer-cli-3", - "type": "local", - "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" - }, - { - "name": "relayer-cli-4", - "type": "local", - "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" - }, - { - "name": "relayer-cli-5", - "type": "local", - "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" - } - ] +REGISTRY_URL="$1" +CHAIN_1="$2" +CHAIN_2="$3" + +set -eux + +function connection_id() { + CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id") + echo $CONNECTION_ID } + +echo "Try to get connection id, if failed, wait for 2 seconds and try again" +max_tries=20 +while [[ max_tries -gt 0 ]] +do + id=$(connection_id) + if [[ -n "$id" ]]; then + echo "Found connection id: $id" + exit 0 + fi + echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 10 +done ", - }, - "kind": "ConfigMap", - "metadata": { - "labels": { - "app.kubernetes.io/component": "configmap", - "app.kubernetes.io/managed-by": "starship", - "app.kubernetes.io/name": "keys", - "app.kubernetes.io/part-of": "global", - "app.kubernetes.io/version": "4.0.0-alpha.0", - "starship.io/name": "starship-generator-test", - }, - "name": "keys", - }, - }, - { - "apiVersion": "v1", - "data": { - "build-chain.sh": "#!/bin/bash + "transfer-tokens.sh": "#!/bin/bash -set -euxo pipefail +ADDRESS="$1" +DENOM="$2" +FAUCET_URL="$3" +FAUCET_ENABLED="$4" -mkdir -p /tmp/chains $UPGRADE_DIR +set -eux -echo "Fetching code from tag" -mkdir -p /tmp/chains/$CHAIN_NAME -cd /tmp/chains/$CHAIN_NAME +function transfer_token() { + status_code=$(curl --header "Content-Type: application/json" \\ + --request POST --write-out %{http_code} --silent --output /dev/null \\ + --data '{"denom":"'"$DENOM"'","address":"'"$ADDRESS"'"}' \\ + $FAUCET_URL) + echo $status_code +} -if [[ $CODE_TAG =~ ^[0-9a-fA-F]{40}$ ]]; then - echo "Trying to fetch code from commit hash" - curl -LO $CODE_REPO/archive/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG} -elif [[ $CODE_TAG = v* ]]; then - echo "Trying to fetch code from tag with 'v' prefix" - curl -LO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG#"v"} -else - echo "Trying to fetch code from tag or branch" - if curl -fsLO $CODE_REPO/archive/refs/tags/$CODE_TAG.zip; then - unzip $CODE_TAG.zip - code_dir=\${CODE_REPO##*/}-$CODE_TAG - elif curl -fsLO $CODE_REPO/archive/refs/heads/$CODE_TAG.zip; then - unzip $(echo $CODE_TAG | rev | cut -d "/" -f 1 | rev).zip - code_dir=\${CODE_REPO##*/}-\${CODE_TAG/\\//-} - else - echo "Tag or branch '$CODE_TAG' not found" - exit 1 - fi +if [[ $FAUCET_ENABLED == "false" ]]; +then + echo "Faucet not enabled... skipping transfer token from faucet" + exit 0 fi -echo "Fetch wasmvm if needed" -cd /tmp/chains/$CHAIN_NAME/$code_dir -WASM_VERSION=$(cat go.mod | grep -oe "github.com/CosmWasm/wasmvm v[0-9.]*" | cut -d ' ' -f 2) -if [[ WASM_VERSION != "" ]]; then - mkdir -p /tmp/chains/libwasmvm_muslc - cd /tmp/chains/libwasmvm_muslc - curl -LO https://github.com/CosmWasm/wasmvm/releases/download/$WASM_VERSION/libwasmvm_muslc.x86_64.a - cp libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.a -fi +echo "Try to send tokens, if failed, wait for 5 seconds and try again" +max_tries=5 +while [[ max_tries -gt 0 ]] +do + status_code=$(transfer_token) + if [[ "$status_code" -eq 200 ]]; then + echo "Successfully sent tokens" + exit 0 + fi + echo "Failed to send tokens. Sleeping for 2 secs. Tries left $max_tries" + ((max_tries--)) + sleep 2 +done +", + "update-config.sh": "#!/bin/bash -echo "Build chain binary" -cd /tmp/chains/$CHAIN_NAME/$code_dir -CGO_ENABLED=1 BUILD_TAGS="muslc linkstatic" LINK_STATICALLY=true LEDGER_ENABLED=false make install +CHAIN_ID="\${CHAIN_ID:=osmosis}" +CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" +KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -echo "Copy created binary to the upgrade directories" -if [[ $UPGRADE_NAME == "genesis" ]]; then - mkdir -p $UPGRADE_DIR/genesis/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/genesis/bin -else - mkdir -p $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin - cp $GOBIN/$CHAIN_BIN $UPGRADE_DIR/upgrades/$UPGRADE_NAME/bin -fi +set -eux -echo "Cleanup" -rm -rf /tmp/chains/$CHAIN_NAME -", - "chain-rpc-ready.sh": "#!/bin/bash -# chain-rpc-ready.sh - Check if a CometBFT or Tendermint RPC service is ready -# Usage: chain-rpc-ready.sh [RPC_URL] +ls $CHAIN_DIR -set -euo pipefail -RPC_URL=\${1:-"http://localhost:26657"} +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 1>&2 "Checking if $RPC_URL is ready..." +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 -# Check if the RPC URL is reachable, -json=$(curl -s --connect-timeout 2 "$RPC_URL/status") -# and the bootstrap block state has been validated, -if [ "$(echo "$json" | jq -r '.result.sync_info | (.earliest_block_height < .latest_block_height)')" != true ]; then - echo 1>&2 "$RPC_URL is not ready: bootstrap block state has not been validated" - exit 1 -fi +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 -# and the node is not catching up. -if [ "$(echo "$json" | jq -r .result.sync_info.catching_up)" != false ]; then - echo 1>&2 "$RPC_URL is not ready: node is catching up" - exit 1 + +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 "$json" | jq -r .result -exit 0 +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 ", - "create-genesis.sh": "#!/bin/bash - -set -eux + "update-genesis.sh": "#!/bin/bash DENOM="\${DENOM:=uosmo}" -COINS="\${COINS:=100000000000000000uosmo}" -CHAIN_ID="\${CHAIN_ID:=osmosis}" CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -FAUCET_ENABLED="\${FAUCET_ENABLED:=true}" -NUM_VALIDATORS="\${NUM_VALIDATORS:=1}" -NUM_RELAYERS="\${NUM_RELAYERS:=0}" +set -eux -# check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty -CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "") +ls $CHAIN_DIR/config -CHAIN_INIT_ID="$CHAIN_ID" -if [ "$CHAIN_BIN" == "osmosisd" ]; then - CHAIN_INIT_ID="test-1" -fi -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover -sed -i -e "s/$CHAIN_INIT_ID/$CHAIN_ID/g" $CHAIN_DIR/config/genesis.json +echo "Update genesis.json file with updated local params" +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 -# Add genesis keys to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG) -jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" +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 -# Add faucet key to the keyring and self delegate initial coins -echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG) -jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test" -$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test" +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 -# Add test keys to the keyring and self delegate initial coins -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" +# 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 +} -if [[ $FAUCET_ENABLED == "false" && $NUM_RELAYERS -gt "-1" ]]; -then - ## Add relayers keys and delegate tokens - 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" - jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - # Add relayer-cli key and delegate tokens - RELAYER_CLI_KEY_NAME="$(jq -r ".relayers_cli[$i].name" $KEYS_CONFIG)" - echo "Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME" - jq -r ".relayers_cli[$i].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend="test" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done -fi +# 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 +} -## 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 - ## Add validators key and delegate tokens - 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" - $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test" - done +if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then + jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json + jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json fi -echo "Creating gentx..." -COIN=$(echo $COINS | cut -d ',' -f1) -AMT=$(echo \${COIN//[!0-9]/} | sed -e "s/0000$//") -$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) $AMT$DENOM --keyring-backend="test" --chain-id $CHAIN_ID - -echo "Output of gentx" -cat $CHAIN_DIR/config/gentx/*.json | jq +if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then + gov_overrides_sdk_v46 +else + gov_overrides_sdk_v47 +fi -echo "Running collect-gentxs" -$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +$CHAIN_BIN tendermint show-node-id +", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "chain", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "setup-scripts-osmosis-1", + "app.kubernetes.io/part-of": "osmosis-1", + "app.kubernetes.io/role": "setup-scripts", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/chain-id": "osmosis-1", + "starship.io/chain-name": "osmosis", + "starship.io/name": "starship-generator-test", + }, + "name": "setup-scripts-osmosis-1", + }, + }, +] +`; -ls $CHAIN_DIR/config +exports[`Cosmos Generator Tests Manifest Generation should handle different faucet configurations: starship-faucet-manifests 1`] = ` +[ + { + "apiVersion": "v1", + "data": { + "keys.json": "{ + "genesis": [ + { + "name": "genesis", + "type": "local", + "mnemonic": "razor dog gown public private couple ecology paper flee connect local robot diamond stay rude join sound win ribbon soup kidney glass robot vehicle" + } + ], + "validators": [ + { + "name": "validator", + "type": "local", + "mnemonic": "issue have volume expire shoe year finish poem alien urban license undo rural endless food host opera fix forum crack wide example firm learn" + } + ], + "faucet": [ + { + "name": "faucet", + "type": "local", + "mnemonic": "chimney become stuff spoil resource supply picture divorce casual curve check web valid survey zebra various pet sphere timber friend faint blame mansion film" + } + ], + "keys": [ + { + "name": "test1", + "type": "local", + "mnemonic": "opinion knife other balcony surge more bamboo canoe romance ask argue teach anxiety adjust spike mystery wolf alone torch tail six decide wash alley" + }, + { + "name": "test2", + "type": "local", + "mnemonic": "logic help only text door wealth hurt always remove glory viable income agent olive trial female couch old offer crash menu zero pencil thrive" + }, + { + "name": "test3", + "type": "local", + "mnemonic": "middle weather hip ghost quick oxygen awful library broken chicken tackle animal crunch appear fee indoor fitness enough orphan trend tackle faint eyebrow all" + } + ], + "relayers": [ + { + "name": "relayer1", + "type": "local", + "mnemonic": "pen quit web pill hunt hobby tonight base wine black era cereal veteran trouble december method diet orbit copper nephew into badge olympic repair" + }, + { + "name": "relayer2", + "type": "local", + "mnemonic": "spatial major zebra crew space file thunder fatigue wool viable cry kiss wedding dumb eager dream soon north coral suffer salt mutual kitten surface" + }, + { + "name": "relayer3", + "type": "local", + "mnemonic": "cruise topic shrug relax update slot marble valid chat upset offer cruise list frog machine fossil help dentist hard thunder dial wink light long" + }, + { + "name": "relayer4", + "type": "local", + "mnemonic": "carpet maid isolate side tonight crash doctor awkward balcony lift brand can affair address cube box print senior organ city ride argue board depth" + }, + { + "name": "relayer5", + "type": "local", + "mnemonic": "dad rural bridge own habit menu balance loan height rotate suit gym antenna convince traffic carry orphan service tower fatigue lady van prepare glide" + } + ], + "relayers_cli": [ + { + "name": "relayer-cli-1", + "type": "local", + "mnemonic": "marine suspect wood vague vast pet cargo tenant oyster tuna news river follow chicken shoulder ceiling guess never help dismiss grape scheme oyster produce" + }, + { + "name": "relayer-cli-2", + "type": "local", + "mnemonic": "resemble pear bulb portion refuse off hundred kit flame hurry evidence fringe fetch kite strike actual naive stamp burden oak punch fault approve message" + }, + { + "name": "relayer-cli-3", + "type": "local", + "mnemonic": "cycle opinion segment gas season exclude artist cliff believe seminar salute bicycle math puzzle wreck minor country rough choose escape access warm expect february" + }, + { + "name": "relayer-cli-4", + "type": "local", + "mnemonic": "essay lobster image grain faculty vocal glass merry fish resist hub game suffer rose fence vocal network absurd demise demise repair museum envelope abstract" + }, + { + "name": "relayer-cli-5", + "type": "local", + "mnemonic": "adjust stove name refuse vehicle hip alpha steel dynamic alley ride segment exhibit pony abuse figure type close direct animal bomb food glass seed" + } + ] +} ", + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "app.kubernetes.io/component": "configmap", + "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "keys", + "app.kubernetes.io/part-of": "global", + "app.kubernetes.io/version": "4.0.0-alpha.0", + "starship.io/name": "starship-generator-test", + }, + "name": "keys", + }, + }, + { + "apiVersion": "v1", + "data": { "create-ics.sh": "#!/bin/bash set -euxo pipefail @@ -9150,166 +8014,54 @@ get_proposal_id() { PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type=="submit_proposal").attributes[] | select(.key=="proposal_id").value') if [ -n "$PROPOSAL_ID" ]; then echo "Proposal ID: $PROPOSAL_ID" - return 0 - fi - fi - echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." - exit 1 -} - -vote_proposal() { - echo "Voting on proposal" - $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ - --from $KEY_NAME \\ - --chain-id $CHAIN_ID \\ - --node $NODE_URL \\ - --keyring-backend="test" \\ - --gas auto --gas-adjustment 2 \\ - --output json \\ - --yes - sleep 5 -} - -wait_for_proposal_to_pass() { - echo "Waiting for proposal to pass" - for ((i=1; i<=$MAX_RETRIES; i++)); do - STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') - if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then - echo "Proposal has passed!" - return 0 - else - echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." - sleep $RETRY_INTERVAL - fi - done - echo "Proposal did not pass after $MAX_RETRIES attempts." - exit 1 -} - -main() { - add_key - get_validator_address - stake_tokens - determine_proposal_command - submit_proposal - get_proposal_id - vote_proposal - wait_for_proposal_to_pass -} - -main -", - "create-validator.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" -KEYS_CONFIG="\${KEYS_CONFIG:=configs/keys.json}" -VAL_NAME="\${VAL_NAME:=osmosis}" -NODE_URL="\${NODE_URL:=http://0.0.0.0:26657}" -NODE_ARGS="\${NODE_ARGS}" -GAS="\${GAS:=auto}" - -set -eux - -# Wait for the node to be synced -max_tries=10 -while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq ".SyncInfo.catching_up") == true ]] -do - if [[ max_tries -lt 0 ]]; then echo "Not able to sync with genesis node"; exit 1; fi - echo "Still syncing... Sleeping for 15 secs. Tries left $max_tries" - ((max_tries--)) - sleep 30 -done - -# Function to compare version numbers -version_compare() { - version1="$1" - version2="$2" - if [[ "$(printf '%s\\n' "$version1" "$version2" | sort -V | head -n 1)" == "$version1" ]]; then - return 1 # version1 is greater - else - return 0 # version2 is greater or equal - fi -} - -# Check if cosmos_sdk_version is greater than a specified version -is_greater() { - version_compare "$1" "$2" - return $? -} - -function cosmos-sdk-version-v50() { - # Content for the validator.json file - json_content='{ - "pubkey": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)', - "amount": "5000000000'$DENOM'", - "moniker": "'$VAL_NAME'", - "commission-rate": "0.1", - "commission-max-rate": "0.2", - "commission-max-change-rate": "0.01", - "min-self-delegation": "1000000" - }' - echo "$json_content" > /validator.json - cat /validator.json - - # Run create validator tx command - echo "Running txn for create-validator" - $CHAIN_BIN tx staking create-validator /validator.json \\ - --node $NODE_URL \\ - --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --fees 100000$DENOM \\ - --keyring-backend="test" \\ - --output json \\ - --gas $GAS \\ - --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log - - cat /validator.log | jq + return 0 + fi + fi + echo "Failed to retrieve proposal ID from transaction logs. Logs might be empty." + exit 1 } -function cosmos-sdk-version-default() { - # Run create validator tx command - echo "Running txn for create-validator" - args='' - if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c "min-self-delegation") -gt 0 ]]; - then - args+='--min-self-delegation=1000000' - fi - $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq - $CHAIN_BIN tx staking create-validator \\ - --node $NODE_URL \\ - --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\ - --moniker $VAL_NAME \\ - --amount 5000000000$DENOM \\ +vote_proposal() { + echo "Voting on proposal" + $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\ + --from $KEY_NAME \\ --chain-id $CHAIN_ID \\ - --from $VAL_NAME \\ - --commission-rate="0.10" \\ - --commission-max-rate="0.20" \\ - --commission-max-change-rate="0.01" \\ - --keyring-backend test \\ - --home $CHAIN_DIR \\ - --fees 100000$DENOM \\ - --gas $GAS \\ + --node $NODE_URL \\ + --keyring-backend="test" \\ + --gas auto --gas-adjustment 2 \\ --output json \\ - --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + --yes + sleep 5 +} - cat /validator.log | jq +wait_for_proposal_to_pass() { + echo "Waiting for proposal to pass" + for ((i=1; i<=$MAX_RETRIES; i++)); do + STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') + if [ "$STATUS" == "PROPOSAL_STATUS_PASSED" ]; then + echo "Proposal has passed!" + return 0 + else + echo "Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting..." + sleep $RETRY_INTERVAL + fi + done + echo "Proposal did not pass after $MAX_RETRIES attempts." + exit 1 } -set +e -# Fetch the cosmos-sdk version to be able to perform the create-validator tx -cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\(.*\\)/\\1/p') -echo "cosmos_sdk_version: $cosmos_sdk_version" -set -e +main() { + add_key + get_validator_address + stake_tokens + determine_proposal_command + submit_proposal + get_proposal_id + vote_proposal + wait_for_proposal_to_pass +} -if is_greater "$cosmos_sdk_version" "v0.50.0"; then - echo "cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format" - cosmos-sdk-version-v50 -else - echo "cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format" - cosmos-sdk-version-default -fi +main ", "ibc-connection.sh": "#!/bin/bash @@ -9374,128 +8126,6 @@ do ((max_tries--)) sleep 2 done -", - "update-config.sh": "#!/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 -", - "update-genesis.sh": "#!/bin/bash - -DENOM="\${DENOM:=uosmo}" -CHAIN_BIN="\${CHAIN_BIN:=osmosisd}" -CHAIN_DIR="\${CHAIN_DIR:=$HOME/.osmosisd}" - -set -eux - -ls $CHAIN_DIR/config - -echo "Update genesis.json file with updated local params" -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 - -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 - -# 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 -} - -# 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 -} - -if [ "$(jq -r '.app_state.feemarket.params' $CHAIN_DIR/config/genesis.json)" != "null" ]; then - jq -r '.app_state.feemarket.params.min_base_gas_price |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.params.beta |= "0"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json - jq -r '.app_state.feemarket.state.base_gas_price |= "0.0025"' $CHAIN_DIR/config/genesis.json > /tmp/genesis.json; mv /tmp/genesis.json $CHAIN_DIR/config/genesis.json -fi - -if [ "$(jq -r '.app_state.gov.params' $CHAIN_DIR/config/genesis.json)" == "null" ]; then - gov_overrides_sdk_v46 -else - gov_overrides_sdk_v47 -fi - -$CHAIN_BIN tendermint show-node-id ", }, "kind": "ConfigMap", @@ -9531,12 +8161,6 @@ $CHAIN_BIN tendermint show-node-id "spec": { "clusterIP": "None", "ports": [ - { - "name": "p2p", - "port": 26656, - "protocol": "TCP", - "targetPort": "26656", - }, { "name": "address", "port": 26658, @@ -9555,6 +8179,12 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "9091", }, + { + "name": "p2p", + "port": 26656, + "protocol": "TCP", + "targetPort": "26656", + }, { "name": "rest", "port": 1317, @@ -9567,12 +8197,6 @@ $CHAIN_BIN tendermint show-node-id "protocol": "TCP", "targetPort": "26657", }, - { - "name": "metrics", - "port": 26660, - "protocol": "TCP", - "targetPort": "26660", - }, { "name": "exposer", "port": 8081, @@ -9793,17 +8417,17 @@ $CHAIN_BIN start $START_ARGS", "value": "/root/.osmosisd/data/priv_validator_state.json", }, ], - "image": "ghcr.io/cosmology-tech/starship/exposer:latest", + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { "limits": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, "requests": { - "cpu": "0.1", - "memory": "128M", + "cpu": "0.2", + "memory": "200M", }, }, "volumeMounts": [ @@ -9979,6 +8603,38 @@ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7 "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", @@ -10070,6 +8726,38 @@ bash -e /scripts/update-config.sh", "name": "CHAIN_ID", "value": "osmosis-1", }, + { + "name": "TIME_IOTA_MS", + "value": "10", + }, + { + "name": "TIMEOUT_PROPOSE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PROPOSE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE", + "value": "400ms", + }, + { + "name": "TIMEOUT_PREVOTE_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT", + "value": "400ms", + }, + { + "name": "TIMEOUT_PRECOMMIT_DELTA", + "value": "400ms", + }, + { + "name": "TIMEOUT_COMMIT", + "value": "800ms", + }, { "name": "KEYS_CONFIG", "value": "/configs/keys.json", diff --git a/packages/packages/generator/__tests__/__snapshots__/manifest.comparison.test.ts.snap b/packages/packages/generator/__tests__/__snapshots__/manifest.comparison.test.ts.snap new file mode 100644 index 000000000..aecdf1075 --- /dev/null +++ b/packages/packages/generator/__tests__/__snapshots__/manifest.comparison.test.ts.snap @@ -0,0 +1,28993 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for agoric that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- StatefulSet/agoric-3-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "agoric-3", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "agoric-3-genesis", ++ "app.kubernetes.io/part-of": "agoric-3", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "agoric-3-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "agoric", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "agoric-3-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "agoric", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "agoric-3-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "agoric", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "agoric-3-genesis", + "app.kubernetes.io/rawname": "agoric-3", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "agoric-3", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -415,9 +434,7 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + +--- ConfigMap/setup-scripts-agoric-3 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-agoric-3", ++ "app.kubernetes.io/part-of": "agoric-3", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "agoric-3", ++ "starship.io/chain-name": "agoric", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-agoric-3", + }, + } + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- ConfigMap/registry-agoric-3 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"ubld\\", +- \\"coingecko_id\\": \\"agoric\\", ++ \\"description\\": \\"The native token of Agoric\\", ++ \\"name\\": \\"Agoric\\", ++ \\"display\\": \\"bld\\", ++ \\"symbol\\": \\"BLD\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"ubld\\", +@@ -18,21 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Agoric\\", +- \\"display\\": \\"bld\\", ++ \\"coingecko_id\\": \\"agoric\\", + \\"keywords\\": [ + \\"agoric\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.svg\\" +- }, +- \\"name\\": \\"Agoric\\", +- \\"symbol\\": \\"BLD\\" ++ ] + }, + { + \\"base\\": \\"uist\\", +- \\"coingecko_id\\": \\"inter-stable-token\\", ++ \\"description\\": \\"IST is the stable token used by the Agoric chain for execution fees and commerce.\\", ++ \\"name\\": \\"Inter Stable Token\\", ++ \\"display\\": \\"ist\\", ++ \\"symbol\\": \\"IST\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uist\\", +@@ -43,17 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"IST is the stable token used by the Agoric chain for execution fees and commerce.\\", +- \\"display\\": \\"ist\\", ++ \\"coingecko_id\\": \\"inter-stable-token\\", + \\"keywords\\": [ + \\"inter-stable-token\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.svg\\" +- }, +- \\"name\\": \\"Inter Stable Token\\", +- \\"symbol\\": \\"IST\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-agoric-3", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-agoric-3", + }, + } + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/agoric-3", +- "name": "registry-configs-agoric-3", ++ "mountPath": "/chains/agoric-3", ++ "name": "registry-agoric-3", + }, + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-agoric-3", + }, +- "name": "registry-configs-agoric-3", ++ "name": "registry-agoric-3", + }, + Object { + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + ], + }, + +--- ConfigMap/hermes-agoric-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"agoric-3\\" ++ type = \\"CosmosSdk\\" + key_name = \\"agoric-3-cli\\" +- rpc_addr = \\"http://agoric-3-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://agoric-3-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://agoric-3-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"agoric\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"ubld\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"ubld\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"agoric-3\\" + type = \\"CosmosSdk\\" + key_name = \\"agoric-3\\" +- rpc_addr = \\"http://agoric-3-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://agoric-3-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://agoric-3-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://agoric-3-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"agoric\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"ubld\\" } +- +- + + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-agoric-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-agoric-cosmos", + }, + } + +--- StatefulSet/hermes-agoric-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-agoric-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-agoric-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-agoric-cosmos", + "app.kubernetes.io/rawname": "agoric-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for agoric-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"agoric-3\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"agoric-3\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-agoric-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"agoric-cosmos\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for agoric-3...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain agoric-3 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://agoric-3-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for build-chain that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- Service/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- StatefulSet/core-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "core-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "core-1-genesis", ++ "app.kubernetes.io/part-of": "core-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "core-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "persistencecore", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "core-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "persistencecore", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "core-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "persistencecore", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "core-1-genesis", + "app.kubernetes.io/rawname": "core-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "core-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + /usr/bin/cosmovisor start $START_ARGS", + ], + "env": Array [ +@@ -240,10 +258,18 @@ + "value": "/root/.persistenceCore", + }, + Object { ++ "name": "DAEMON_HOME", ++ "value": "/root/.persistenceCore", ++ }, ++ Object { + "name": "DAEMON_NAME", + "value": "persistenceCore", + }, + Object { ++ "name": "DAEMON_NAME", ++ "value": "persistenceCore", ++ }, ++ Object { + "name": "DENOM", + "value": "uxprt", + }, +@@ -274,11 +300,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, +@@ -360,11 +386,11 @@ + "name": "init-build-images", + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, +@@ -389,9 +415,11 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -433,7 +461,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -473,11 +501,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, +@@ -500,20 +528,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, +@@ -530,6 +556,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin + + if [ -f $CHAIN_DIR/config/genesis.json ]; then +@@ -639,11 +666,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, + +--- ConfigMap/setup-scripts-core-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-core-1", ++ "app.kubernetes.io/part-of": "core-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "core-1", ++ "starship.io/chain-name": "persistencecore", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-core-1", + }, + } + +--- Service/core-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/core-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "core-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "core-1-validator", ++ "app.kubernetes.io/part-of": "core-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "core-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "persistencecore", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "core-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "persistencecore", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "core-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "persistencecore", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "core-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "core-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -144,8 +157,10 @@ + "-c", + "set -eux + START_ARGS=\\"\\" ++ + + # Starting the chain ++ + cp $CHAIN_DIR/cosmovisor/genesis/bin/$CHAIN_BIN /usr/bin + /usr/bin/cosmovisor start $START_ARGS", + ], +@@ -256,11 +271,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, +@@ -342,11 +357,11 @@ + "name": "init-build-images", + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, +@@ -437,7 +452,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -485,11 +500,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, +@@ -587,7 +602,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -635,11 +650,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + "requests": Object { +- "cpu": 2, ++ "cpu": "2", + "memory": "2Gi", + }, + }, +@@ -684,16 +699,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -705,6 +720,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- ConfigMap/registry-core-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -78,6 +78,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-core-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-core-1", + }, + } + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/core-1", +- "name": "registry-configs-core-1", ++ "mountPath": "/chains/core-1", ++ "name": "registry-core-1", + }, + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: core-1. Waiting for it to start...\\" + echo \\"Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-core-1", + }, +- "name": "registry-configs-core-1", ++ "name": "registry-core-1", + }, + Object { + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + ], + }, + +--- ConfigMap/hermes-persistence-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"core-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"core-1-cli\\" +- rpc_addr = \\"http://core-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://core-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://core-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://core-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://core-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://core-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"persistence\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uxprt\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"uxprt\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"core-1\\" + type = \\"CosmosSdk\\" + key_name = \\"core-1\\" +- rpc_addr = \\"http://core-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://core-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://core-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://core-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://core-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://core-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"persistence\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uxprt\\" } +- +- + + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-persistence-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-persistence-cosmos", + }, + } + +--- StatefulSet/hermes-persistence-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-persistence-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-persistence-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-persistence-cosmos", + "app.kubernetes.io/rawname": "persistence-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for persistence-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"core-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"core-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-persistence-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"persistence-cosmos\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for core-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain core-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://core-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for eth that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/config-ethereum --- +- Expected (reference) ++ Generated (actual) + +@@ -61,7 +61,7 @@ + \\"balance\\": \\"0x3635c9adc5dea00000\\" + }, + \\"0x4242424242424242424242424242424242424242\\": { +- \\"code\\": \\"0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100b6578063621fd130146101e3578063c5f2892f14610273575b600080fd5b34801561005057600080fd5b5061009c6004803603602081101561006757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061029e565b604051808215151515815260200191505060405180910390f35b6101e1600480360360808110156100cc57600080fd5b81019080803590602001906401000000008111156100e957600080fd5b8201836020820111156100fb57600080fd5b8035906020019184600183028401116401000000008311171561011d57600080fd5b90919293919293908035906020019064010000000081111561013e57600080fd5b82018360208201111561015057600080fd5b8035906020019184600183028401116401000000008311171561017257600080fd5b90919293919293908035906020019064010000000081111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460018302840111640100000000831117156101c757600080fd5b909192939192939080359060200190929190505050610370565b005b3480156101ef57600080fd5b506101f8610fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023857808201518184015260208101905061021d565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027f57600080fd5b50610288610fe2565b6040518082815260200191505060405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036957507f85640907000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b603087879050146103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806116ec6026913960400191505060405180910390fd5b60208585905014610428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806116836036913960400191505060405180910390fd5b60608383905014610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061175f6029913960400191505060405180910390fd5b670de0b6b3a76400003410156104e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117396026913960400191505060405180910390fd5b6000633b9aca0034816104f457fe5b061461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806116b96033913960400191505060405180910390fd5b6000633b9aca00348161055a57fe5b04905067ffffffffffffffff80168111156105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806117126027913960400191505060405180910390fd5b60606105cb82611314565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a610600602054611314565b60405180806020018060200180602001806020018060200186810386528e8e82818152602001925080828437600081840152601f19601f82011690508083019250505086810385528c8c82818152602001925080828437600081840152601f19601f82011690508083019250505086810384528a818151815260200191508051906020019080838360005b838110156106a657808201518184015260208101905061068b565b50505050905090810190601f1680156106d35780820380516001836020036101000a031916815260200191505b508681038352898982818152602001925080828437600081840152601f19601f820116905080830192505050868103825287818151815260200191508051906020019080838360005b8381101561073757808201518184015260208101905061071c565b50505050905090810190601f1680156107645780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b6040516020018084848082843780830192505050826fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260100193505050506040516020818303038152906040526040518082805190602001908083835b6020831061080e57805182526020820191506020810190506020830392506107eb565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610850573d6000803e3d6000fd5b5050506040513d602081101561086557600080fd5b8101908080519060200190929190505050905060006002808888600090604092610891939291906115da565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108eb57805182526020820191506020810190506020830392506108c8565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561092d573d6000803e3d6000fd5b5050506040513d602081101561094257600080fd5b8101908080519060200190929190505050600289896040908092610968939291906115da565b6000801b604051602001808484808284378083019250505082815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106109cd57805182526020820191506020810190506020830392506109aa565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610a0f573d6000803e3d6000fd5b5050506040513d6020811015610a2457600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610a8e5780518252602082019150602081019050602083039250610a6b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ad0573d6000803e3d6000fd5b5050506040513d6020811015610ae557600080fd5b810190808051906020019092919050505090506000600280848c8c604051602001808481526020018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610b615780518252602082019150602081019050602083039250610b3e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ba3573d6000803e3d6000fd5b5050506040513d6020811015610bb857600080fd5b8101908080519060200190929190505050600286600060401b866040516020018084805190602001908083835b60208310610c085780518252602082019150602081019050602083039250610be5565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610c935780518252602082019150602081019050602083039250610c70565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610cd5573d6000803e3d6000fd5b5050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610d545780518252602082019150602081019050602083039250610d31565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610d96573d6000803e3d6000fd5b5050506040513d6020811015610dab57600080fd5b81019080805190602001909291905050509050858114610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605481526020018061162f6054913960600191505060405180910390fd5b6001602060020a0360205410610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061160e6021913960400191505060405180910390fd5b60016020600082825401925050819055506000602054905060008090505b6020811015610fb75760018083161415610ec8578260008260208110610eb757fe5b018190555050505050505050610fc7565b600260008260208110610ed757fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610f335780518252602082019150602081019050602083039250610f10565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610f75573d6000803e3d6000fd5b5050506040513d6020811015610f8a57600080fd5b8101908080519060200190929190505050925060028281610fa757fe5b0491508080600101915050610e95565b506000610fc057fe5b5050505050505b50505050505050565b6060610fdd602054611314565b905090565b6000806000602054905060008090505b60208110156111d057600180831614156110e05760026000826020811061101557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310611071578051825260208201915060208101905060208303925061104e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156110b3573d6000803e3d6000fd5b5050506040513d60208110156110c857600080fd5b810190808051906020019092919050505092506111b6565b600283602183602081106110f057fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061114b5780518252602082019150602081019050602083039250611128565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561118d573d6000803e3d6000fd5b5050506040513d60208110156111a257600080fd5b810190808051906020019092919050505092505b600282816111c057fe5b0491508080600101915050610ff2565b506002826111df602054611314565b600060401b6040516020018084815260200183805190602001908083835b6020831061122057805182526020820191506020810190506020830392506111fd565b6001836020036101000a0380198251168184511680821785525050505050509050018267ffffffffffffffff191667ffffffffffffffff1916815260180193505050506040516020818303038152906040526040518082805190602001908083835b602083106112a55780518252602082019150602081019050602083039250611282565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156112e7573d6000803e3d6000fd5b5050506040513d60208110156112fc57600080fd5b81019080805190602001909291905050509250505090565b6060600867ffffffffffffffff8111801561132e57600080fd5b506040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b50905060008260c01b90508060076008811061137957fe5b1a60f81b8260008151811061138a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806006600881106113c657fe5b1a60f81b826001815181106113d757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060056008811061141357fe5b1a60f81b8260028151811061142457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060046008811061146057fe5b1a60f81b8260038151811061147157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806003600881106114ad57fe5b1a60f81b826004815181106114be57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806002600881106114fa57fe5b1a60f81b8260058151811061150b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060016008811061154757fe5b1a60f81b8260068151811061155857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060006008811061159457fe5b1a60f81b826007815181106115a557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b600080858511156115ea57600080fd5b838611156115f757600080fd5b600185028301915084860390509450949250505056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220230afd4b6e3551329e50f1239e08fa3ab7907b77403c4f237d9adf679e8e43cf64736f6c634300060b0033\\", ++ \\"code\\": \\"0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100b6578063621fd130146101e3578063c5f2892f14610273575b600080fd5b34801561005057600080fd5b5061009c6004803603602081101561006757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061029e565b604051808215151515815260200191505060405180910390f35b6101e1600480360360808110156100cc57600080fd5b81019080803590602001906401000000008111156100e957600080fd5b8201836020820111156100fb57600080fd5b8035906020019184600183028401116401000000008311171561011d57600080fd5b90919293919293908035906020019064010000000081111561013e57600080fd5b82018360208201111561015057600080fd5b8035906020019184600183028401116401000000008311171561017257600080fd5b90919293919293908035906020019064010000000081111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460018302840111640100000000831117156101c757600080fd5b909192939192939080359060200190929190505050610370565b005b3480156101ef57600080fd5b506101f8610fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023857808201518184015260208101905061021d565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027f57600080fd5b50610288610fe2565b6040518082815260200191505060405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036957507f85640907000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b603087879050146103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806116ec6026913960400191505060405180910390fd5b60208585905014610428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806116836036913960400191505060405180910390fd5b60608383905014610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061175f6029913960400191505060405180910390fd5b670de0b6b3a76400003410156104e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117396026913960400191505060405180910390fd5b6000633b9aca0034816104f457fe5b061461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806116b96033913960400191505060405180910390fd5b6000633b9aca00348161055a57fe5b04905067ffffffffffffffff80168111156105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806117126027913960400191505060405180910390fd5b60606105cb82611314565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a610600602054611314565b60405180806020018060200180602001806020018060200186810386528e8e82818152602001925080828437600081840152601f19601f82011690508083019250505086810385528c8c82818152602001925080828437600081840152601f19601f82011690508083019250505086810384528a818151815260200191508051906020019080838360005b838110156106a657808201518184015260208101905061068b565b50505050905090810190601f1680156106d35780820380516001836020036101000a031916815260200191505b508681038352898982818152602001925080828437600081840152601f19601f820116905080830192505050868103825287818151815260200191508051906020019080838360005b8381101561073757808201518184015260208101905061071c565b50505050905090810190601f1680156107645780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b6040516020018084848082843780830192505050826fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260100193505050506040516020818303038152906040526040518082805190602001908083835b6020831061080e57805182526020820191506020810190506020830392506107eb565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610850573d6000803e3d6000fd5b5050506040513d602081101561086557600080fd5b8101908080519060200190929190505050905060006002808888600090604092610891939291906115da565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108eb57805182526020820191506020810190506020830392506108c8565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561092d573d6000803e3d6000fd5b5050506040513d602081101561094257600080fd5b8101908080519060200190929190505050600289896040908092610968939291906115da565b6000801b604051602001808484808284378083019250505082815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106109cd57805182526020820191506020810190506020830392506109aa565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610a0f573d6000803e3d6000fd5b5050506040513d6020811015610a2457600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610a8e5780518252602082019150602081019050602083039250610a6b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ad0573d6000803e3d6000fd5b5050506040513d6020811015610ae557600080fd5b810190808051906020019092919050505090506000600280848c8c604051602001808481526020018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610b615780518252602082019150602081019050602083039250610b3e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ba3573d6000803e3d6000fd5b5050506040513d6020811015610bb857600080fd5b8101908080519060200190929190505050600286600060401b866040516020018084805190602001908083835b60208310610c085780518252602082019150602081019050602083039250610be5565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610c935780518252602082019150602081019050602083039250610c70565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610cd5573d6000803e3d6000fd5b5050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610d545780518252602082019150602081019050602083039250610d31565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610d96573d6000803e3d6000fd5b5050506040513d6020811015610dab57600080fd5b81019080805190602001909291905050509050858114610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605481526020018061162f6054913960600191505060405180910390fd5b6001602060020a0360205410610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061160e6021913960400191505060405180910390fd5b60016020600082825401925050819055506000602054905060008090505b6020811015610fb75760018083161415610ec8578260008260208110610eb757fe5b018190555050505050505050610fc7565b600260008260208110610ed757fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610f335780518252602082019150602081019050602083039250610f10565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610f75573d6000803e3d6000fd5b5050506040513d6020811015610f8a57600080fd5b8101908080519060200190929190505050925060028281610fa757fe5b0491508080600101915050610e95565b506000610fc057fe5b5050505050505b50505050505050565b6060610fdd602054611314565b905090565b6000806000602054905060008090505b60208110156111d057600180831614156110e05760026000826020811061101557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310611071578051825260208201915060208101905060208303925061104e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156110b3573d6000803e3d6000fd5b5050506040513d60208110156110c857600080fd5b810190808051906020019092919050505092506111b6565b600283602183602081106110f057fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061114b5780518252602082019150602081019050602083039250611128565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561118d573d6000803e3d6000fd5b5050506040513d60208110156111a257600080fd5b810190808051906020019092919050505092505b600282816111c057fe5b0491508080600101915050610ff2565b506002826111df602054611314565b600060401b6040516020018084815260200183805190602001908083835b6020831061122057805182526020820191506020810190506020830392506111fd565b6001836020036101000a0380198251168184511680821785525050505050509050018267ffffffffffffffff191667ffffffffffffffff1916815260180193505050506040516020818303038152906040526040518082805190602001908083835b602083106112a55780518252602082019150602081019050602083039250611282565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156112e7573d6000803e3d6000fd5b5050506040513d60208110156112fc57600080fd5b81019080805190602001909291905050509250505090565b6060600867ffffffffffffffff8111801561132e57600080fd5b506040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b50905060008260c01b90508060076008811061137957fe5b1a60f81b8260008151811061138a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806006600881106113c657fe5b1a60f81b826001815181106113d757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060056008811061141357fe5b1a60f81b8260028151811061142457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060046008811061146057fe5b1a60f81b8260038151811061147157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806003600881106114ad57fe5b1a60f81b826004815181106114be57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806002600881106114fa57fe5b1a60f81b8260058151811061150b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060016008811061154757fe5b1a60f81b8260068151811061155857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060006008811061159457fe5b1a60f81b8260078151811061159857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b600080858511156115ea57600080fd5b838611156115f757600080fd5b600185028301915084860390509450949250505056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220230afd4b6e3551329e50f1239e08fa3ab7907b77403c4f237d9adf679e8e43cf64736f6c634300060b0033\\", + \\"balance\\": \\"0x0\\" + } + }, +@@ -76,6 +76,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "ethereum-1337", ++ "app.kubernetes.io/part-of": "1337", ++ "app.kubernetes.io/role": "config", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "1337", ++ "starship.io/chain-name": "ethereum", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "config-ethereum", + }, + } + +--- StatefulSet/ethereum-1337 --- +- Expected (reference) ++ Generated (actual) + +@@ -6,10 +6,9 @@ + "app": "ethereum-1337", + }, + "name": "ethereum-1337", +- "namespace": "default", + }, + "spec": Object { +- "replicas": null, ++ "replicas": 1, + "selector": Object { + "matchLabels": Object { + "app.kubernetes.io/instance": "ethereum-1337", +@@ -30,15 +29,12 @@ + "app.kubernetes.io/name": "ethereum-1337", + "app.kubernetes.io/rawname": "1337", + "app.kubernetes.io/type": "ethereum-1337", +- "app.kubernetes.io/version": "0.1.1", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "echo \\"Waiting 30 seconds for execution client to be ready...\\" + sleep 30 + +@@ -60,6 +56,10 @@ + --minimum-peers-per-subnet=0 \\\\ + --force-clear-db", + ], ++ "command": Array [ ++ "bash", ++ "-c", ++ ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -83,11 +83,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -103,9 +103,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "echo \\"Setting UDP buffer size\\" + sysctl -w net.core.rmem_max=16777216 + sysctl -w net.core.wmem_max=16777216 +@@ -136,6 +134,10 @@ + --nat=none \\\\ + --log.vmodule=engine=6", + ], ++ "command": Array [ ++ "bash", ++ "-c", ++ ], + "env": Array [ + Object { + "name": "HTTP_PORT", +@@ -166,11 +168,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -186,9 +188,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "echo \\"Waiting 15 seconds for execution client to be ready...\\" + sleep 20 + mkdir -p /ethereum/consensus/validator +@@ -206,6 +206,10 @@ + --monitoring-port=8081 \\\\ + --suggested-fee-recipient=0x0C46c2cAFE097b4f7e1BB868B89e5697eE65f934", + ], ++ "command": Array [ ++ "bash", ++ "-c", ++ ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -229,11 +233,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -251,9 +255,7 @@ + ], + "initContainers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "mkdir -p /ethereum/consensus /ethereum/execution + cp /config/genesis.json /ethereum/execution/genesis.json + cp /config/config.yaml /ethereum/consensus/config.yaml +@@ -270,17 +272,21 @@ + + echo \\"Copy secrets over\\" + cp /config/jwt.hex /etc/secrets/jwt.hex", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "image": "ghcr.io/hyperweb-io/starship/prysm/cmd/prysmctl:v5.2.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis-beacon", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -300,22 +306,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "echo \\"Initializing genesis geth\\" ++ geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", ++ ], + "command": Array [ + "bash", + "-c", +- "echo \\"Initializing genesis geth\\" +- geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", + ], + "image": "ghcr.io/hyperweb-io/starship/ethereum/client-go:v1.14.12", + "imagePullPolicy": "IfNotPresent", + "name": "init-genesis-execution", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for eth-lite that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/config-ethereum --- +- Expected (reference) ++ Generated (actual) + +@@ -64,7 +64,7 @@ + \\"balance\\": \\"0x3635c9adc5dea00000\\" + }, + \\"0x4242424242424242424242424242424242424242\\": { +- \\"code\\": \\"0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100b6578063621fd130146101e3578063c5f2892f14610273575b600080fd5b34801561005057600080fd5b5061009c6004803603602081101561006757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061029e565b604051808215151515815260200191505060405180910390f35b6101e1600480360360808110156100cc57600080fd5b81019080803590602001906401000000008111156100e957600080fd5b8201836020820111156100fb57600080fd5b8035906020019184600183028401116401000000008311171561011d57600080fd5b90919293919293908035906020019064010000000081111561013e57600080fd5b82018360208201111561015057600080fd5b8035906020019184600183028401116401000000008311171561017257600080fd5b90919293919293908035906020019064010000000081111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460018302840111640100000000831117156101c757600080fd5b909192939192939080359060200190929190505050610370565b005b3480156101ef57600080fd5b506101f8610fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023857808201518184015260208101905061021d565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027f57600080fd5b50610288610fe2565b6040518082815260200191505060405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036957507f85640907000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b603087879050146103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806116ec6026913960400191505060405180910390fd5b60208585905014610428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806116836036913960400191505060405180910390fd5b60608383905014610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061175f6029913960400191505060405180910390fd5b670de0b6b3a76400003410156104e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117396026913960400191505060405180910390fd5b6000633b9aca0034816104f457fe5b061461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806116b96033913960400191505060405180910390fd5b6000633b9aca00348161055a57fe5b04905067ffffffffffffffff80168111156105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806117126027913960400191505060405180910390fd5b60606105cb82611314565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a610600602054611314565b60405180806020018060200180602001806020018060200186810386528e8e82818152602001925080828437600081840152601f19601f82011690508083019250505086810385528c8c82818152602001925080828437600081840152601f19601f82011690508083019250505086810384528a818151815260200191508051906020019080838360005b838110156106a657808201518184015260208101905061068b565b50505050905090810190601f1680156106d35780820380516001836020036101000a031916815260200191505b508681038352898982818152602001925080828437600081840152601f19601f820116905080830192505050868103825287818151815260200191508051906020019080838360005b8381101561073757808201518184015260208101905061071c565b50505050905090810190601f1680156107645780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b6040516020018084848082843780830192505050826fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260100193505050506040516020818303038152906040526040518082805190602001908083835b6020831061080e57805182526020820191506020810190506020830392506107eb565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610850573d6000803e3d6000fd5b5050506040513d602081101561086557600080fd5b8101908080519060200190929190505050905060006002808888600090604092610891939291906115da565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108eb57805182526020820191506020810190506020830392506108c8565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561092d573d6000803e3d6000fd5b5050506040513d602081101561094257600080fd5b8101908080519060200190929190505050600289896040908092610968939291906115da565b6000801b604051602001808484808284378083019250505082815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106109cd57805182526020820191506020810190506020830392506109aa565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610a0f573d6000803e3d6000fd5b5050506040513d6020811015610a2457600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610a8e5780518252602082019150602081019050602083039250610a6b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ad0573d6000803e3d6000fd5b5050506040513d6020811015610ae557600080fd5b810190808051906020019092919050505090506000600280848c8c604051602001808481526020018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610b615780518252602082019150602081019050602083039250610b3e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ba3573d6000803e3d6000fd5b5050506040513d6020811015610bb857600080fd5b8101908080519060200190929190505050600286600060401b866040516020018084805190602001908083835b60208310610c085780518252602082019150602081019050602083039250610be5565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610c935780518252602082019150602081019050602083039250610c70565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610cd5573d6000803e3d6000fd5b5050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610d545780518252602082019150602081019050602083039250610d31565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610d96573d6000803e3d6000fd5b5050506040513d6020811015610dab57600080fd5b81019080805190602001909291905050509050858114610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605481526020018061162f6054913960600191505060405180910390fd5b6001602060020a0360205410610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061160e6021913960400191505060405180910390fd5b60016020600082825401925050819055506000602054905060008090505b6020811015610fb75760018083161415610ec8578260008260208110610eb757fe5b018190555050505050505050610fc7565b600260008260208110610ed757fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610f335780518252602082019150602081019050602083039250610f10565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610f75573d6000803e3d6000fd5b5050506040513d6020811015610f8a57600080fd5b8101908080519060200190929190505050925060028281610fa757fe5b0491508080600101915050610e95565b506000610fc057fe5b5050505050505b50505050505050565b6060610fdd602054611314565b905090565b6000806000602054905060008090505b60208110156111d057600180831614156110e05760026000826020811061101557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310611071578051825260208201915060208101905060208303925061104e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156110b3573d6000803e3d6000fd5b5050506040513d60208110156110c857600080fd5b810190808051906020019092919050505092506111b6565b600283602183602081106110f057fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061114b5780518252602082019150602081019050602083039250611128565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561118d573d6000803e3d6000fd5b5050506040513d60208110156111a257600080fd5b810190808051906020019092919050505092505b600282816111c057fe5b0491508080600101915050610ff2565b506002826111df602054611314565b600060401b6040516020018084815260200183805190602001908083835b6020831061122057805182526020820191506020810190506020830392506111fd565b6001836020036101000a0380198251168184511680821785525050505050509050018267ffffffffffffffff191667ffffffffffffffff1916815260180193505050506040516020818303038152906040526040518082805190602001908083835b602083106112a55780518252602082019150602081019050602083039250611282565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156112e7573d6000803e3d6000fd5b5050506040513d60208110156112fc57600080fd5b81019080805190602001909291905050509250505090565b6060600867ffffffffffffffff8111801561132e57600080fd5b506040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b50905060008260c01b90508060076008811061137957fe5b1a60f81b8260008151811061138a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806006600881106113c657fe5b1a60f81b826001815181106113d757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060056008811061141357fe5b1a60f81b8260028151811061142457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060046008811061146057fe5b1a60f81b8260038151811061147157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806003600881106114ad57fe5b1a60f81b826004815181106114be57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806002600881106114fa57fe5b1a60f81b8260058151811061150b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060016008811061154757fe5b1a60f81b8260068151811061155857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060006008811061159457fe5b1a60f81b826007815181106115a557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b600080858511156115ea57600080fd5b838611156115f757600080fd5b600185028301915084860390509450949250505056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220230afd4b6e3551329e50f1239e08fa3ab7907b77403c4f237d9adf679e8e43cf64736f6c634300060b0033\\", ++ \\"code\\": \\"0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100b6578063621fd130146101e3578063c5f2892f14610273575b600080fd5b34801561005057600080fd5b5061009c6004803603602081101561006757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061029e565b604051808215151515815260200191505060405180910390f35b6101e1600480360360808110156100cc57600080fd5b81019080803590602001906401000000008111156100e957600080fd5b8201836020820111156100fb57600080fd5b8035906020019184600183028401116401000000008311171561011d57600080fd5b90919293919293908035906020019064010000000081111561013e57600080fd5b82018360208201111561015057600080fd5b8035906020019184600183028401116401000000008311171561017257600080fd5b90919293919293908035906020019064010000000081111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460018302840111640100000000831117156101c757600080fd5b909192939192939080359060200190929190505050610370565b005b3480156101ef57600080fd5b506101f8610fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023857808201518184015260208101905061021d565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027f57600080fd5b50610288610fe2565b6040518082815260200191505060405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036957507f85640907000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b603087879050146103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806116ec6026913960400191505060405180910390fd5b60208585905014610428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806116836036913960400191505060405180910390fd5b60608383905014610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061175f6029913960400191505060405180910390fd5b670de0b6b3a76400003410156104e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117396026913960400191505060405180910390fd5b6000633b9aca0034816104f457fe5b061461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806116b96033913960400191505060405180910390fd5b6000633b9aca00348161055a57fe5b04905067ffffffffffffffff80168111156105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806117126027913960400191505060405180910390fd5b60606105cb82611314565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a610600602054611314565b60405180806020018060200180602001806020018060200186810386528e8e82818152602001925080828437600081840152601f19601f82011690508083019250505086810385528c8c82818152602001925080828437600081840152601f19601f82011690508083019250505086810384528a818151815260200191508051906020019080838360005b838110156106a657808201518184015260208101905061068b565b50505050905090810190601f1680156106d35780820380516001836020036101000a031916815260200191505b508681038352898982818152602001925080828437600081840152601f19601f820116905080830192505050868103825287818151815260200191508051906020019080838360005b8381101561073757808201518184015260208101905061071c565b50505050905090810190601f1680156107645780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b6040516020018084848082843780830192505050826fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260100193505050506040516020818303038152906040526040518082805190602001908083835b6020831061080e57805182526020820191506020810190506020830392506107eb565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610850573d6000803e3d6000fd5b5050506040513d602081101561086557600080fd5b8101908080519060200190929190505050905060006002808888600090604092610891939291906115da565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108eb57805182526020820191506020810190506020830392506108c8565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561092d573d6000803e3d6000fd5b5050506040513d602081101561094257600080fd5b8101908080519060200190929190505050600289896040908092610968939291906115da565b6000801b604051602001808484808284378083019250505082815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106109cd57805182526020820191506020810190506020830392506109aa565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610a0f573d6000803e3d6000fd5b5050506040513d6020811015610a2457600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610a8e5780518252602082019150602081019050602083039250610a6b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ad0573d6000803e3d6000fd5b5050506040513d6020811015610ae557600080fd5b810190808051906020019092919050505090506000600280848c8c604051602001808481526020018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610b615780518252602082019150602081019050602083039250610b3e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ba3573d6000803e3d6000fd5b5050506040513d6020811015610bb857600080fd5b8101908080519060200190929190505050600286600060401b866040516020018084805190602001908083835b60208310610c085780518252602082019150602081019050602083039250610be5565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610c935780518252602082019150602081019050602083039250610c70565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610cd5573d6000803e3d6000fd5b5050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610d545780518252602082019150602081019050602083039250610d31565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610d96573d6000803e3d6000fd5b5050506040513d6020811015610dab57600080fd5b81019080805190602001909291905050509050858114610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605481526020018061162f6054913960600191505060405180910390fd5b6001602060020a0360205410610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061160e6021913960400191505060405180910390fd5b60016020600082825401925050819055506000602054905060008090505b6020811015610fb75760018083161415610ec8578260008260208110610eb757fe5b018190555050505050505050610fc7565b600260008260208110610ed757fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610f335780518252602082019150602081019050602083039250610f10565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610f75573d6000803e3d6000fd5b5050506040513d6020811015610f8a57600080fd5b8101908080519060200190929190505050925060028281610fa757fe5b0491508080600101915050610e95565b506000610fc057fe5b5050505050505b50505050505050565b6060610fdd602054611314565b905090565b6000806000602054905060008090505b60208110156111d057600180831614156110e05760026000826020811061101557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310611071578051825260208201915060208101905060208303925061104e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156110b3573d6000803e3d6000fd5b5050506040513d60208110156110c857600080fd5b810190808051906020019092919050505092506111b6565b600283602183602081106110f057fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061114b5780518252602082019150602081019050602083039250611128565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561118d573d6000803e3d6000fd5b5050506040513d60208110156111a257600080fd5b810190808051906020019092919050505092505b600282816111c057fe5b0491508080600101915050610ff2565b506002826111df602054611314565b600060401b6040516020018084815260200183805190602001908083835b6020831061122057805182526020820191506020810190506020830392506111fd565b6001836020036101000a0380198251168184511680821785525050505050509050018267ffffffffffffffff191667ffffffffffffffff1916815260180193505050506040516020818303038152906040526040518082805190602001908083835b602083106112a55780518252602082019150602081019050602083039250611282565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156112e7573d6000803e3d6000fd5b5050506040513d60208110156112fc57600080fd5b81019080805190602001909291905050509250505090565b6060600867ffffffffffffffff8111801561132e57600080fd5b506040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b50905060008260c01b90508060076008811061137957fe5b1a60f81b8260008151811061138a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806006600881106113c657fe5b1a60f81b826001815181106113d757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060056008811061141357fe5b1a60f81b8260028151811061142457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060046008811061146057fe5b1a60f81b8260038151811061147157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806003600881106114ad57fe5b1a60f81b826004815181106114be57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806002600881106114fa57fe5b1a60f81b8260058151811061150b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060016008811061154757fe5b1a60f81b8260068151811061155857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060006008811061159457fe5b1a60f81b8260078151811061159857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b600080858511156115ea57600080fd5b838611156115f757600080fd5b600185028301915084860390509450949250505056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220230afd4b6e3551329e50f1239e08fa3ab7907b77403c4f237d9adf679e8e43cf64736f6c634300060b0033\\", + \\"balance\\": \\"0x0\\" + } + }, +@@ -79,6 +79,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "ethereum-1337", ++ "app.kubernetes.io/part-of": "1337", ++ "app.kubernetes.io/role": "config", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "1337", ++ "starship.io/chain-name": "ethereum", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "config-ethereum", + }, + } + +--- StatefulSet/ethereum-1337 --- +- Expected (reference) ++ Generated (actual) + +@@ -6,10 +6,9 @@ + "app": "ethereum-1337", + }, + "name": "ethereum-1337", +- "namespace": "default", + }, + "spec": Object { +- "replicas": null, ++ "replicas": 1, + "selector": Object { + "matchLabels": Object { + "app.kubernetes.io/instance": "ethereum-1337", +@@ -30,15 +29,12 @@ + "app.kubernetes.io/name": "ethereum-1337", + "app.kubernetes.io/rawname": "1337", + "app.kubernetes.io/type": "ethereum-1337", +- "app.kubernetes.io/version": "0.1.1", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "echo \\"Waiting 30 seconds for execution client to be ready...\\" + sleep 30 + +@@ -60,6 +56,10 @@ + --minimum-peers-per-subnet=0 \\\\ + --force-clear-db", + ], ++ "command": Array [ ++ "bash", ++ "-c", ++ ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -103,9 +103,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "echo \\"Setting UDP buffer size\\" + sysctl -w net.core.rmem_max=16777216 + sysctl -w net.core.wmem_max=16777216 +@@ -135,6 +133,10 @@ + --maxpeers=50 \\\\ + --nat=none \\\\ + --log.vmodule=engine=6", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -186,9 +188,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "echo \\"Waiting 15 seconds for execution client to be ready...\\" + sleep 20 + mkdir -p /ethereum/consensus/validator +@@ -205,6 +205,10 @@ + --monitoring-host=0.0.0.0 \\\\ + --monitoring-port=8081 \\\\ + --suggested-fee-recipient=0x0C46c2cAFE097b4f7e1BB868B89e5697eE65f934", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -251,9 +255,7 @@ + ], + "initContainers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "mkdir -p /ethereum/consensus /ethereum/execution + cp /config/genesis.json /ethereum/execution/genesis.json + cp /config/config.yaml /ethereum/consensus/config.yaml +@@ -270,6 +272,10 @@ + + echo \\"Copy secrets over\\" + cp /config/jwt.hex /etc/secrets/jwt.hex", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "image": "ghcr.io/hyperweb-io/starship/prysm/cmd/prysmctl:v5.2.0", + "imagePullPolicy": "IfNotPresent", +@@ -300,11 +306,13 @@ + ], + }, + Object { ++ "args": Array [ ++ "echo \\"Initializing genesis geth\\" ++ geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", ++ ], + "command": Array [ + "bash", + "-c", +- "echo \\"Initializing genesis geth\\" +- geth --datadir /ethereum/execution init /ethereum/execution/genesis.json", + ], + "image": "ghcr.io/hyperweb-io/starship/ethereum/client-go:v1.14.12", + "imagePullPolicy": "IfNotPresent"," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for evmos that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- StatefulSet/evmos-9000-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "evmos_9000-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "evmos_9000-1-genesis", ++ "app.kubernetes.io/part-of": "evmos_9000-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "evmos_9000-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "evmos", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "evmos-9000-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "evmos", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "evmos_9000-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "evmos", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "evmos_9000-1-genesis", + "app.kubernetes.io/rawname": "evmos_9000-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "evmos_9000-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-evmos-9000-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-evmos-9000-1", ++ "app.kubernetes.io/part-of": "evmos_9000-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "evmos_9000-1", ++ "starship.io/chain-name": "evmos", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-evmos-9000-1", + }, + } + +--- Service/evmos-9000-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/evmos-9000-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "evmos_9000-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "evmos_9000-1-validator", ++ "app.kubernetes.io/part-of": "evmos_9000-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "evmos_9000-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "evmos", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "evmos-9000-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "evmos", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "evmos_9000-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "evmos", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "evmos_9000-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "evmos_9000-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/evmos_9000-1", +- "name": "registry-configs-evmos-9000-1", ++ "mountPath": "/chains/evmos_9000-1", ++ "name": "registry-evmos-9000-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-evmos-9000-1", + }, +- "name": "registry-configs-evmos-9000-1", ++ "name": "registry-evmos-9000-1", + }, + ], + }, + +--- ConfigMap/registry-evmos-9000-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,7 @@ + \\"assets\\": [ + { + \\"base\\": \\"aevmos\\", +- \\"coingecko_id\\": \\"evmos\\", ++ \\"description\\": \\"The native EVM, governance and staking token of the Evmos Hub\\", + \\"denom_units\\": [ + { + \\"denom\\": \\"aevmos\\", +@@ -18,14 +18,14 @@ + \\"exponent\\": 18 + } + ], +- \\"description\\": \\"The native EVM, governance and staking token of the Evmos Hub\\", ++ \\"name\\": \\"Evmos\\", + \\"display\\": \\"evmos\\", ++ \\"symbol\\": \\"EVMOS\\", + \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.svg\\" ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.svg\\", ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png\\" + }, +- \\"name\\": \\"Evmos\\", +- \\"symbol\\": \\"EVMOS\\" ++ \\"coingecko_id\\": \\"evmos\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-evmos-9000-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-evmos-9000-1", + }, + } + +--- ConfigMap/hermes-evmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"evmos_9000-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"evmos_9000-1-cli\\" +- rpc_addr = \\"http://evmos-9000-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://evmos-9000-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://evmos-9000-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"evmos\\" + default_gas = 500000000 +@@ -105,15 +58,14 @@ + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } + gas_price = { price = 2500000, denom = \\"aevmos\\" } + +- +- + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"evmos_9000-1\\" + type = \\"CosmosSdk\\" + key_name = \\"evmos_9000-1\\" +- rpc_addr = \\"http://evmos-9000-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://evmos-9000-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://evmos-9000-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"evmos\\" + default_gas = 500000000 +@@ -234,16 +138,14 @@ + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } + gas_price = { price = 2500000, denom = \\"aevmos\\" } + +- +- + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-evmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-evmos-cosmos", + }, + } + +--- StatefulSet/hermes-evmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-evmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-evmos-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-evmos-cosmos", + "app.kubernetes.io/rawname": "evmos-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for evmos-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"evmos_9000-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"evmos_9000-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-evmos-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"evmos-cosmos\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for evmos_9000-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain evmos_9000-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://evmos-9000-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for hyperweb that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- Deployment/playground --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "frontend", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "playground", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "playground", + }, + "spec": Object { +@@ -23,56 +31,25 @@ + }, + "labels": Object { + "app.kubernetes.io/instance": "playground", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "playground", +- "app.kubernetes.io/rawname": "playground", + "app.kubernetes.io/type": "custom", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ +- Object { +- "env": Array [ +- Object { +- "name": "CHAIN_FAUCET_URL", +- "value": "http://localhost:8000", +- }, + Object { +- "name": "CHAIN_RPC_URL", +- "value": "http://localhost:26657", +- }, +- Object { +- "name": "NAMESPACE", +- "valueFrom": Object { +- "fieldRef": Object { +- "fieldPath": "metadata.namespace", +- }, +- }, +- }, +- Object { +- "name": "REGISTRY_REST_URL", +- "value": "http://localhost:8081", +- }, +- Object { +- "name": "S3_BUCKET_URL", +- "value": "https://hyperweb-playground.s3.amazonaws.com/create-hyperweb-app", +- }, +- Object { +- "name": "S3_TARBALL_NAME", +- "value": "latest.tar.gz", ++ "env": Object { ++ "CHAIN_FAUCET_URL": "http://localhost:8000", ++ "CHAIN_RPC_URL": "http://localhost:26657", ++ "REGISTRY_REST_URL": "http://localhost:8081", ++ "S3_BUCKET_URL": "https://hyperweb-playground.s3.amazonaws.com/create-hyperweb-app", ++ "S3_TARBALL_NAME": "latest.tar.gz", + }, +- ], + "image": "ghcr.io/hyperweb-io/hyperweb-playground:latest", + "imagePullPolicy": "Always", +- "livenessProbe": Object { +- "failureThreshold": 3, +- "initialDelaySeconds": 20, +- "periodSeconds": 10, +- "tcpSocket": Object { +- "port": "http", +- }, +- "timeoutSeconds": 5, +- }, + "name": "playground", + "ports": Array [ + Object { +@@ -81,16 +58,16 @@ + "protocol": "TCP", + }, + ], +- "readinessProbe": Object { +- "failureThreshold": 3, +- "initialDelaySeconds": 20, +- "periodSeconds": 10, +- "tcpSocket": Object { +- "port": "http", ++ "resources": Object { ++ "limits": Object { ++ "cpu": "0.2", ++ "memory": "200M", + }, +- "timeoutSeconds": 5, ++ "requests": Object { ++ "cpu": "0.2", ++ "memory": "200M", + }, +- "resources": null, ++ }, + }, + ], + }, + +--- StatefulSet/test-hyperweb-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "test-hyperweb-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "test-hyperweb-1-genesis", ++ "app.kubernetes.io/part-of": "test-hyperweb-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "test-hyperweb-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "hyperweb", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "test-hyperweb-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "hyperweb", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "test-hyperweb-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "hyperweb", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "test-hyperweb-1-genesis", + "app.kubernetes.io/rawname": "test-hyperweb-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "test-hyperweb-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-test-hyperweb-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-test-hyperweb-1", ++ "app.kubernetes.io/part-of": "test-hyperweb-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "test-hyperweb-1", ++ "starship.io/chain-name": "hyperweb", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-test-hyperweb-1", + }, + } + +--- Service/test-hyperweb-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/test-hyperweb-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "test-hyperweb-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "test-hyperweb-1-validator", ++ "app.kubernetes.io/part-of": "test-hyperweb-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "test-hyperweb-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "hyperweb", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "test-hyperweb-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "hyperweb", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "test-hyperweb-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "hyperweb", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "test-hyperweb-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "test-hyperweb-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "Always", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "Always", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/test-hyperweb-1", +- "name": "registry-configs-test-hyperweb-1", ++ "mountPath": "/chains/test-hyperweb-1", ++ "name": "registry-test-hyperweb-1", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "Always", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-test-hyperweb-1", + }, +- "name": "registry-configs-test-hyperweb-1", ++ "name": "registry-test-hyperweb-1", + }, + ], + }, + +--- ConfigMap/registry-test-hyperweb-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uhyper\\", +- \\"coingecko_id\\": \\"hyper\\", ++ \\"description\\": \\"The meme coin for Hyperweb chain.\\", ++ \\"name\\": \\"Hyper\\", ++ \\"display\\": \\"hyper\\", ++ \\"symbol\\": \\"HYPR\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-png.png\\", ++ \\"svg\\": \\"https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-svg.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uhyper\\", +@@ -18,17 +25,10 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The meme coin for Hyperweb chain.\\", +- \\"display\\": \\"hyper\\", ++ \\"coingecko_id\\": \\"hyper\\", + \\"keywords\\": [ + \\"hyper\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-png.png\\", +- \\"svg\\": \\"https://gist.githubusercontent.com/Anmol1696/bea1b3835dfb0fce3ab9ed993f5a0792/raw/7065493384a51c888752284be7c1afbf6135b50a/logo-svg.svg\\" +- }, +- \\"name\\": \\"Hyper\\", +- \\"symbol\\": \\"HYPR\\" ++ ] + } + ] + }", +@@ -85,6 +85,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-test-hyperweb-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-test-hyperweb-1", + }, + }" +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for injective that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- StatefulSet/injective-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "injective-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "injective-1-genesis", ++ "app.kubernetes.io/part-of": "injective-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "injective-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "injective", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "injective-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "injective", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "injective-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "injective", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "injective-1-genesis", + "app.kubernetes.io/rawname": "injective-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "injective-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-injective-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -87,122 +87,6 @@ + + echo \\"$json\\" | jq -r .result + exit 0", +- "create-genesis.sh": "#!/bin/bash +- +- DENOM=\\"\${DENOM:=uosmo}\\" +- COINS=\\"\${COINS:=100000000000000000inj}\\" +- CHAIN_ID=\\"\${CHAIN_ID:=injective}\\" +- CHAIN_BIN=\\"\${CHAIN_BIN:=injectived}\\" +- CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.injectived}\\" +- KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" +- +- FEEDADMIN=\\"inj1k2z3chspuk9wsufle69svmtmnlc07rvw9djya7\\" +- +- set -eu +- +- # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty +- CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q \\"genesis-related subcommands\\" && echo \\"genesis\\" || echo \\"\\") +- +- jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_ID --recover +- +- WASM_KEY=\\"wasm\\" +- WASM_MNEMONIC=\\"juice dog over thing anger search film document sight fork enrich jungle vacuum grab more sunset winner diesel flock smooth route impulse cheap toward\\" +- +- VAL_KEY=\\"localkey\\" +- VAL_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\\" +- +- USER1_KEY=\\"user1\\" +- USER1_MNEMONIC=\\"copper push brief egg scan entry inform record adjust fossil boss egg comic alien upon aspect dry avoid interest fury window hint race symptom\\" +- +- USER2_KEY=\\"user2\\" +- USER2_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\\" +- +- USER3_KEY=\\"user3\\" +- USER3_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\\" +- +- USER4_KEY=\\"user4\\" +- USER4_MNEMONIC=\\"pony glide frown crisp unfold lawn cup loan trial govern usual matrix theory wash fresh address pioneer between meadow visa buffalo keep gallery swear\\" +- +- USER5_KEY=\\"ocrfeedadmin\\" +- USER5_MNEMONIC=\\"earn front swamp dune level clip shell aware apple spare faith upset flip local regret loud suspect view heavy raccoon satisfy cupboard harbor basic\\" +- +- USER6_KEY=\\"signer1\\" +- USER6_MNEMONIC=\\"output arrange offer advance egg point office silent diamond fame heart hotel rocket sheriff resemble couple race crouch kit laptop document grape drastic lumber\\" +- +- USER7_KEY=\\"signer2\\" +- USER7_MNEMONIC=\\"velvet gesture rule caution injury stick property decorate raccoon physical narrow tuition address drum shoot pyramid record sport include rich actress sadness crater seek\\" +- +- USER8_KEY=\\"signer3\\" +- USER8_MNEMONIC=\\"guitar parrot nuclear sun blue marble amazing extend solar device address better chalk shock street absent follow notice female picnic into trade brass couch\\" +- +- USER9_KEY=\\"signer4\\" +- USER9_MNEMONIC=\\"rotate fame stamp size inform hurdle match stick brain shrimp fancy clinic soccer fortune photo gloom wear punch shed diet celery blossom tide bulk\\" +- +- USER10_KEY=\\"signer5\\" +- USER10_MNEMONIC=\\"apart acid night more advance december weather expect pause taxi reunion eternal crater crew lady chaos visual dynamic friend match glow flash couple tumble\\" +- +- NEWLINE=$'\\\\n' +- +- # Import keys from mnemonics +- echo \\"$WASM_MNEMONIC\\" | $CHAIN_BIN keys add $WASM_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$VAL_MNEMONIC\\" | $CHAIN_BIN keys add $VAL_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER1_MNEMONIC\\" | $CHAIN_BIN keys add $USER1_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER2_MNEMONIC\\" | $CHAIN_BIN keys add $USER2_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER3_MNEMONIC\\" | $CHAIN_BIN keys add $USER3_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER4_MNEMONIC\\" | $CHAIN_BIN keys add $USER4_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER5_MNEMONIC\\" | $CHAIN_BIN keys add $USER5_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER6_MNEMONIC\\" | $CHAIN_BIN keys add $USER6_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER7_MNEMONIC\\" | $CHAIN_BIN keys add $USER7_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER8_MNEMONIC\\" | $CHAIN_BIN keys add $USER8_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER9_MNEMONIC\\" | $CHAIN_BIN keys add $USER9_KEY --recover --keyring-backend=\\"test\\" +- yes \\"$USER10_MNEMONIC\\" | $CHAIN_BIN keys add $USER10_KEY --recover --keyring-backend=\\"test\\" +- +- # Add genesis keys to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) +- jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") 1000000000000000000000000inj,1000000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend=\\"test\\" +- +- # Add relayer keys to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".relayers[0].name\\" $KEYS_CONFIG) +- jq -r \\".relayers[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".relayers[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") 1000000000000000000000000inj --keyring-backend=\\"test\\" +- +- # Add faucet keys to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) +- jq -r \\".faucet[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") 1000000000000000000000000inj --keyring-backend=\\"test\\" +- +- +- # zero address account +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID inj1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqe2hm49 1inj +- +- # Allocate genesis accounts (cosmos formatted addresses) +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $WASM_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $VAL_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER1_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj,1000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER2_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER3_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER4_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER5_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER6_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER7_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER8_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER9_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" +- $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER10_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" +- +- echo \\"Creating gentx...\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) 1000000000000000000000inj --keyring-backend=\\"test\\" --chain-id $CHAIN_ID +- +- echo \\"Output of gentx\\" +- cat $CHAIN_DIR/config/gentx/*.json | jq +- +- echo \\"Running collect-gentxs\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +- +- echo \\"Validate genesis\\" +- $CHAIN_BIN validate-genesis +- +- ls $CHAIN_DIR/config", + "create-ics.sh": "#!/bin/bash + + set -euxo pipefail +@@ -345,7 +229,123 @@ + } + + main", +- "create-validator.sh": "#!/bin/bash ++ "createGenesis.sh": "#!/bin/bash ++ ++ DENOM=\\"\${DENOM:=uosmo}\\" ++ COINS=\\"\${COINS:=100000000000000000inj}\\" ++ CHAIN_ID=\\"\${CHAIN_ID:=injective}\\" ++ CHAIN_BIN=\\"\${CHAIN_BIN:=injectived}\\" ++ CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.injectived}\\" ++ KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" ++ ++ FEEDADMIN=\\"inj1k2z3chspuk9wsufle69svmtmnlc07rvw9djya7\\" ++ ++ set -eu ++ ++ # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty ++ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q \\"genesis-related subcommands\\" && echo \\"genesis\\" || echo \\"\\") ++ ++ jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_ID --recover ++ ++ WASM_KEY=\\"wasm\\" ++ WASM_MNEMONIC=\\"juice dog over thing anger search film document sight fork enrich jungle vacuum grab more sunset winner diesel flock smooth route impulse cheap toward\\" ++ ++ VAL_KEY=\\"localkey\\" ++ VAL_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\\" ++ ++ USER1_KEY=\\"user1\\" ++ USER1_MNEMONIC=\\"copper push brief egg scan entry inform record adjust fossil boss egg comic alien upon aspect dry avoid interest fury window hint race symptom\\" ++ ++ USER2_KEY=\\"user2\\" ++ USER2_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\\" ++ ++ USER3_KEY=\\"user3\\" ++ USER3_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\\" ++ ++ USER4_KEY=\\"user4\\" ++ USER4_MNEMONIC=\\"pony glide frown crisp unfold lawn cup loan trial govern usual matrix theory wash fresh address pioneer between meadow visa buffalo keep gallery swear\\" ++ ++ USER5_KEY=\\"ocrfeedadmin\\" ++ USER5_MNEMONIC=\\"earn front swamp dune level clip shell aware apple spare faith upset flip local regret loud suspect view heavy raccoon satisfy cupboard harbor basic\\" ++ ++ USER6_KEY=\\"signer1\\" ++ USER6_MNEMONIC=\\"output arrange offer advance egg point office silent diamond fame heart hotel rocket sheriff resemble couple race crouch kit laptop document grape drastic lumber\\" ++ ++ USER7_KEY=\\"signer2\\" ++ USER7_MNEMONIC=\\"velvet gesture rule caution injury stick property decorate raccoon physical narrow tuition address drum shoot pyramid record sport include rich actress sadness crater seek\\" ++ ++ USER8_KEY=\\"signer3\\" ++ USER8_MNEMONIC=\\"guitar parrot nuclear sun blue marble amazing extend solar device address better chalk shock street absent follow notice female picnic into trade brass couch\\" ++ ++ USER9_KEY=\\"signer4\\" ++ USER9_MNEMONIC=\\"rotate fame stamp size inform hurdle match stick brain shrimp fancy clinic soccer fortune photo gloom wear punch shed diet celery blossom tide bulk\\" ++ ++ USER10_KEY=\\"signer5\\" ++ USER10_MNEMONIC=\\"apart acid night more advance december weather expect pause taxi reunion eternal crater crew lady chaos visual dynamic friend match glow flash couple tumble\\" ++ ++ NEWLINE=$'\\\\n' ++ ++ # Import keys from mnemonics ++ echo \\"$WASM_MNEMONIC\\" | $CHAIN_BIN keys add $WASM_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$VAL_MNEMONIC\\" | $CHAIN_BIN keys add $VAL_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER1_MNEMONIC\\" | $CHAIN_BIN keys add $USER1_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER2_MNEMONIC\\" | $CHAIN_BIN keys add $USER2_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER3_MNEMONIC\\" | $CHAIN_BIN keys add $USER3_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER4_MNEMONIC\\" | $CHAIN_BIN keys add $USER4_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER5_MNEMONIC\\" | $CHAIN_BIN keys add $USER5_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER6_MNEMONIC\\" | $CHAIN_BIN keys add $USER6_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER7_MNEMONIC\\" | $CHAIN_BIN keys add $USER7_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER8_MNEMONIC\\" | $CHAIN_BIN keys add $USER8_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER9_MNEMONIC\\" | $CHAIN_BIN keys add $USER9_KEY --recover --keyring-backend=\\"test\\" ++ yes \\"$USER10_MNEMONIC\\" | $CHAIN_BIN keys add $USER10_KEY --recover --keyring-backend=\\"test\\" ++ ++ # Add genesis keys to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) ++ jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") 1000000000000000000000000inj,1000000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend=\\"test\\" ++ ++ # Add relayer keys to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".relayers[0].name\\" $KEYS_CONFIG) ++ jq -r \\".relayers[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".relayers[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") 1000000000000000000000000inj --keyring-backend=\\"test\\" ++ ++ # Add faucet keys to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) ++ jq -r \\".faucet[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") 1000000000000000000000000inj --keyring-backend=\\"test\\" ++ ++ ++ # zero address account ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID inj1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqe2hm49 1inj ++ ++ # Allocate genesis accounts (cosmos formatted addresses) ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $WASM_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $VAL_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER1_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj,1000000000000000000000atom,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER2_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj,100000000000000000000000000peggy0xdAC17F958D2ee523a2206206994597C13D831ec7,100000000000000000000000000peggy0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER3_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER4_KEY -a --keyring-backend=\\"test\\") 1000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER5_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER6_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER7_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER8_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER9_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" ++ $CHAIN_BIN add-genesis-account --chain-id $CHAIN_ID $($CHAIN_BIN keys show $USER10_KEY -a --keyring-backend=\\"test\\") 100000000000000000000000000inj --keyring-backend=\\"test\\" ++ ++ echo \\"Creating gentx...\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) 1000000000000000000000inj --keyring-backend=\\"test\\" --chain-id $CHAIN_ID ++ ++ echo \\"Output of gentx\\" ++ cat $CHAIN_DIR/config/gentx/*.json | jq ++ ++ echo \\"Running collect-gentxs\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs ++ ++ echo \\"Validate genesis\\" ++ $CHAIN_BIN validate-genesis ++ ++ ls $CHAIN_DIR/config", ++ "createValidator.sh": "#!/bin/bash + + DENOM=\\"\${DENOM:=inj}\\" + CHAIN_BIN=\\"\${CHAIN_BIN:=injectived}\\" +@@ -514,7 +514,7 @@ + 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", +- "update-genesis.sh": "#!/bin/bash ++ "updateGenesis.sh": "#!/bin/bash + + DENOM=\\"\${DENOM:=inj}\\" + CHAIN_BIN=\\"\${CHAIN_BIN:=injectived}\\" +@@ -617,6 +617,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-injective-1", ++ "app.kubernetes.io/part-of": "injective-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "injective-1", ++ "starship.io/chain-name": "injective", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-injective-1", + }, + } + +--- Service/injective-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/injective-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "injective-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "injective-1-validator", ++ "app.kubernetes.io/part-of": "injective-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "injective-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "injective", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "injective-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "injective", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "injective-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "injective", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "injective-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "injective-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/injective-1", +- "name": "registry-configs-injective-1", ++ "mountPath": "/chains/injective-1", ++ "name": "registry-injective-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-injective-1", + }, +- "name": "registry-configs-injective-1", ++ "name": "registry-injective-1", + }, + ], + }, + +--- ConfigMap/registry-injective-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,7 @@ + \\"assets\\": [ + { + \\"base\\": \\"inj\\", +- \\"coingecko_id\\": \\"injective-protocol\\", ++ \\"description\\": \\"The INJ token is the native governance token for the Injective chain.\\", + \\"denom_units\\": [ + { + \\"denom\\": \\"inj\\", +@@ -18,14 +18,14 @@ + \\"exponent\\": 18 + } + ], +- \\"description\\": \\"The INJ token is the native governance token for the Injective chain.\\", ++ \\"name\\": \\"Injective\\", + \\"display\\": \\"INJ\\", ++ \\"symbol\\": \\"INJ\\", + \\"logo_URIs\\": { + \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png\\", + \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.svg\\" + }, +- \\"name\\": \\"Injective\\", +- \\"symbol\\": \\"INJ\\" ++ \\"coingecko_id\\": \\"injective-protocol\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-injective-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-injective-1", + }, + } + +--- ConfigMap/hermes-injective-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"injective-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"injective-1-cli\\" +- rpc_addr = \\"http://injective-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://injective-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://injective-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://injective-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"inj\\" + default_gas = 500000000 +@@ -105,15 +58,14 @@ + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/injective.crypto.v1beta1.ethsecp256k1.PubKey' } } + gas_price = { price = 2500000, denom = \\"inj\\" } + +- +- + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"injective-1\\" + type = \\"CosmosSdk\\" + key_name = \\"injective-1\\" +- rpc_addr = \\"http://injective-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://injective-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://injective-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://injective-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://injective-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"inj\\" + default_gas = 500000000 +@@ -234,16 +138,14 @@ + address_type = { derivation = 'ethermint', proto_type = { pk_type = '/injective.crypto.v1beta1.ethsecp256k1.PubKey' } } + gas_price = { price = 2500000, denom = \\"inj\\" } + +- +- + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-injective-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-injective-cosmos", + }, + } + +--- StatefulSet/hermes-injective-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-injective-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-injective-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-injective-cosmos", + "app.kubernetes.io/rawname": "injective-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for injective-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"injective-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"injective-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-injective-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"injective-cosmos\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for injective-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain injective-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://injective-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for multi-relayer that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- StatefulSet/juno-2-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "juno-2", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "juno-2-genesis", ++ "app.kubernetes.io/part-of": "juno-2", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "juno-2-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "juno", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "juno-2-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "juno", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "juno-2-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "juno", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "juno-2-genesis", + "app.kubernetes.io/rawname": "juno-2", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "juno-2", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-juno-2 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-juno-2", ++ "app.kubernetes.io/part-of": "juno-2", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "juno-2", ++ "starship.io/chain-name": "juno", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-juno-2", + }, + } + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,26 +100,26 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/juno-2", +- "name": "registry-configs-juno-2", ++ "mountPath": "/chains/juno-2", ++ "name": "registry-juno-2", + }, + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -130,11 +134,13 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: juno-2. Waiting for it to start...\\" + echo \\"Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -157,16 +163,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -177,19 +183,19 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-juno-2", + }, +- "name": "registry-configs-juno-2", ++ "name": "registry-juno-2", + }, + Object { + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-juno-2 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"ujuno\\", +- \\"coingecko_id\\": \\"juno-network\\", ++ \\"description\\": \\"The native token of JUNO Chain\\", ++ \\"name\\": \\"Juno\\", ++ \\"display\\": \\"juno\\", ++ \\"symbol\\": \\"JUNO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"ujuno\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of JUNO Chain\\", +- \\"display\\": \\"juno\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg\\" +- }, +- \\"name\\": \\"Juno\\", +- \\"symbol\\": \\"JUNO\\" ++ \\"coingecko_id\\": \\"juno-network\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-juno-2", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-juno-2", + }, + } + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + } + +--- ConfigMap/hermes-juno-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"juno-2\\" ++ type = \\"CosmosSdk\\" + key_name = \\"juno-2-cli\\" +- rpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://juno-2-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"juno\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"ujuno\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"ujuno\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"juno-2\\" + type = \\"CosmosSdk\\" + key_name = \\"juno-2\\" +- rpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://juno-2-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"juno\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"ujuno\\" } +- +- + + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-juno-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-juno-cosmos", + }, + } + +--- StatefulSet/hermes-juno-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-juno-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-juno-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-juno-cosmos", + "app.kubernetes.io/rawname": "juno-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for juno-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"juno-2\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"juno-2\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-juno-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"juno-cosmos\\",\\"ports\\":{\\"exposer\\":4002},\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for juno-2...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"false\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain juno-2 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "1", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- ConfigMap/hermes-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"osmosis-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"osmosis-1-cli\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uosmo\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"uosmo\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"osmosis-1\\" + type = \\"CosmosSdk\\" + key_name = \\"osmosis-1\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uosmo\\" } +- +- + + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmos-cosmos", + }, + } + +--- StatefulSet/hermes-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmos-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-osmos-cosmos", + "app.kubernetes.io/rawname": "osmos-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for osmos-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"osmosis-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"osmosis-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-osmos-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"osmos-cosmos\\",\\"ports\\":{\\"exposer\\":3002},\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for osmosis-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"false\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain osmosis-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- ConfigMap/hermes-osmosis-juno --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"osmosis-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"osmosis-1-cli\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uosmo\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"uosmo\\" } + + [[chains]] + id = \\"juno-2\\" ++ type = \\"CosmosSdk\\" + key_name = \\"juno-2-cli\\" +- rpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://juno-2-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"juno\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"ujuno\\" }", ++ gas_price = { price = 1.25, denom = \\"ujuno\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"osmosis-1\\" + type = \\"CosmosSdk\\" + key_name = \\"osmosis-1\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uosmo\\" } +- +- + + [[chains]] + id = \\"juno-2\\" + type = \\"CosmosSdk\\" + key_name = \\"juno-2\\" +- rpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://juno-2-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"juno\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmosis-juno", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmosis-juno", + }, + } + +--- StatefulSet/hermes-osmosis-juno --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmosis-juno", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmosis-juno", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-osmosis-juno", + "app.kubernetes.io/rawname": "osmosis-juno", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for osmosis-juno...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"osmosis-1\\",\\"juno-2\\"],\\"channels\\":[{\\"a-chain\\":\\"osmosis-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"juno-2\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-osmosis-juno\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"osmosis-juno\\",\\"ports\\":{\\"exposer\\":5002},\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for osmosis-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"false\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain juno-2 \\\\ + --a-chain osmosis-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "2", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: juno-2. Waiting for it to start...\\" + echo \\"Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for multi-validator that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -184,11 +197,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "200M", + }, + }, +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Service/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "600M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + }" +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for multi-validator-starship-faucet that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -184,11 +197,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "200M", + }, + }, +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -415,9 +434,7 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Service/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + }" +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for neutron that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- StatefulSet/neutron-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "neutron-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "neutron-1-genesis", ++ "app.kubernetes.io/part-of": "neutron-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "neutron-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "neutron", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "neutron-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "neutron", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "neutron-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "neutron", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "neutron-1-genesis", + "app.kubernetes.io/rawname": "neutron-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "neutron-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -535,11 +554,11 @@ + "name": "init-ics", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -588,16 +607,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- ConfigMap/consumer-proposal-neutron-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -29,6 +29,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "neutron", ++ "app.kubernetes.io/part-of": "neutron-1", ++ "app.kubernetes.io/role": "ics-proposal", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "neutron-1", ++ "starship.io/chain-name": "neutron", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "consumer-proposal-neutron-1", + }, + } + +--- ConfigMap/setup-scripts-neutron-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -87,8 +87,261 @@ + + echo \\"$json\\" | jq -r .result + exit 0", +- "create-genesis.sh": "#!/bin/bash ++ "create-ics.sh": "#!/bin/bash ++ ++ set -euxo pipefail ++ ++ DENOM=\\"\${DENOM:=uatom}\\" ++ CHAIN_ID=\\"\${CHAIN_ID:=cosmoshub-1}\\" ++ CHAIN_BIN=\\"\${CHAIN_BIN:=gaiad}\\" ++ NODE_URL=\\"\${NODE_URL:=http://0.0.0.0:26657}\\" ++ KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" ++ ++ PROPOSAL_FILE=\\"\${PROPOSAL_FILE}\\" ++ KEY_NAME=\\"ics-setup\\" ++ MAX_RETRIES=3 ++ RETRY_INTERVAL=30 ++ SUBMIT_PROPOSAL_CMD=\\"\\" ++ ++ add_key() { ++ # Add test keys to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".keys[0].name\\" $KEYS_CONFIG) ++ jq -r \\".keys[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend=\\"test\\" ++ echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend=\\"test\\") ++ } ++ ++ get_validator_address() { ++ echo \\"Getting validator address...\\" ++ VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') ++ echo \\"Selected validator address: $VALIDATOR_ADDRESS\\" ++ } ++ ++ stake_tokens() { ++ COINS=\\"10000000$DENOM\\" ++ echo \\"Staking tokens...\\" ++ $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \\\\ ++ --from $KEY_NAME \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --node $NODE_URL \\\\ ++ --keyring-backend=\\"test\\" \\\\ ++ --gas auto --gas-adjustment 2 \\\\ ++ --output json \\\\ ++ --yes ++ sleep 5 ++ } ++ ++ determine_proposal_command() { ++ echo \\"Determining the correct command to submit proposals...\\" ++ HELP_OUTPUT=$($CHAIN_BIN tx gov --help) ++ if echo \\"$HELP_OUTPUT\\" | grep -q \\"submit-legacy-proposal\\"; then ++ SUBMIT_PROPOSAL_CMD=\\"submit-legacy-proposal\\" ++ else ++ SUBMIT_PROPOSAL_CMD=\\"submit-proposal\\" ++ fi ++ echo \\"Using $SUBMIT_PROPOSAL_CMD for submitting proposals.\\" ++ } ++ ++ submit_proposal() { ++ echo \\"Get all proposals\\" ++ PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) ++ if echo \\"$PROPOSALS_OUTPUT\\" | grep -q \\"no proposals found\\"; then ++ echo \\"No existing proposals found. Proceeding to submit a new proposal.\\" ++ else ++ echo \\"Existing proposals: $PROPOSALS_OUTPUT\\" ++ fi ++ ++ echo \\"Submit gov proposal on chain\\" ++ PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \\\\ ++ --from $KEY_NAME \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --node $NODE_URL \\\\ ++ --keyring-backend=\\"test\\" \\\\ ++ --gas auto --gas-adjustment 2 \\\\ ++ --output json \\\\ ++ --yes) ++ echo $PROPOSAL_TX ++ ++ # Extract JSON part from the output ++ TX_HASH=$(echo \\"$PROPOSAL_TX\\" | grep -o '{.*}' | jq -r '.txhash') ++ if [ -n \\"$TX_HASH\\" ]; then ++ echo \\"Transaction hash: $TX_HASH\\" ++ else ++ echo \\"Failed to submit proposal. Output was not as expected.\\" ++ exit 1 ++ fi ++ ++ sleep 5 ++ } ++ ++ get_proposal_id() { ++ echo \\"Getting proposal ID\\" ++ PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) ++ LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') ++ if [ \\"$LOGS\\" != \\"null\\" ] && [ \\"$LOGS\\" != \\"[]\\" ]; then ++ PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type==\\"submit_proposal\\").attributes[] | select(.key==\\"proposal_id\\").value') ++ if [ -n \\"$PROPOSAL_ID\\" ]; then ++ echo \\"Proposal ID: $PROPOSAL_ID\\" ++ return 0 ++ fi ++ fi ++ echo \\"Failed to retrieve proposal ID from transaction logs. Logs might be empty.\\" ++ exit 1 ++ } ++ ++ vote_proposal() { ++ echo \\"Voting on proposal\\" ++ $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\\\ ++ --from $KEY_NAME \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --node $NODE_URL \\\\ ++ --keyring-backend=\\"test\\" \\\\ ++ --gas auto --gas-adjustment 2 \\\\ ++ --output json \\\\ ++ --yes ++ sleep 5 ++ } ++ ++ wait_for_proposal_to_pass() { ++ echo \\"Waiting for proposal to pass\\" ++ for ((i=1; i<=$MAX_RETRIES; i++)); do ++ STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') ++ if [ \\"$STATUS\\" == \\"PROPOSAL_STATUS_PASSED\\" ]; then ++ echo \\"Proposal has passed!\\" ++ return 0 ++ else ++ echo \\"Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting...\\" ++ sleep $RETRY_INTERVAL ++ fi ++ done ++ echo \\"Proposal did not pass after $MAX_RETRIES attempts.\\" ++ exit 1 ++ } ++ ++ main() { ++ add_key ++ get_validator_address ++ stake_tokens ++ determine_proposal_command ++ submit_proposal ++ get_proposal_id ++ vote_proposal ++ wait_for_proposal_to_pass ++ } ++ ++ main", ++ "create-validator.sh": "#!/bin/bash ++ ++ DENOM=\\"\${DENOM:=uosmo}\\" ++ CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" ++ CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.osmosisd}\\" ++ KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" ++ VAL_NAME=\\"\${VAL_NAME:=osmosis}\\" ++ NODE_URL=\\"\${NODE_URL:=http://0.0.0.0:26657}\\" ++ NODE_ARGS=\\"\${NODE_ARGS}\\" ++ GAS=\\"\${GAS:=auto}\\" ++ ++ set -eux ++ ++ # Wait for the node to be synced ++ max_tries=10 ++ while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq \\".SyncInfo.catching_up\\") == true ]] ++ do ++ if [[ max_tries -lt 0 ]]; then echo \\"Not able to sync with genesis node\\"; exit 1; fi ++ echo \\"Still syncing... Sleeping for 15 secs. Tries left $max_tries\\" ++ ((max_tries--)) ++ sleep 30 ++ done ++ ++ # Function to compare version numbers ++ version_compare() { ++ version1=\\"$1\\" ++ version2=\\"$2\\" ++ if [[ \\"$(printf '%s\\\\n' \\"$version1\\" \\"$version2\\" | sort -V | head -n 1)\\" == \\"$version1\\" ]]; then ++ return 1 # version1 is greater ++ else ++ return 0 # version2 is greater or equal ++ fi ++ } ++ ++ # Check if cosmos_sdk_version is greater than a specified version ++ is_greater() { ++ version_compare \\"$1\\" \\"$2\\" ++ return $? ++ } ++ ++ function cosmos-sdk-version-v50() { ++ # Content for the validator.json file ++ json_content='{ ++ \\"pubkey\\": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)' ++ \\"amount\\": \\"5000000000'$DENOM'\\" ++ \\"moniker\\": \\"'$VAL_NAME'\\" ++ \\"commission-rate\\": \\"0.1\\" ++ \\"commission-max-rate\\": \\"0.2\\" ++ \\"commission-max-change-rate\\": \\"0.01\\" ++ \\"min-self-delegation\\": \\"1000000\\" ++ }' ++ echo \\"$json_content\\" > /validator.json ++ cat /validator.json ++ ++ # Run create validator tx command ++ echo \\"Running txn for create-validator\\" ++ $CHAIN_BIN tx staking create-validator /validator.json \\\\ ++ --node $NODE_URL \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --from $VAL_NAME \\\\ ++ --fees 100000$DENOM \\\\ ++ --keyring-backend=\\"test\\" \\\\ ++ --output json \\\\ ++ --gas $GAS \\\\ ++ --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log ++ ++ cat /validator.log | jq ++ } ++ ++ function cosmos-sdk-version-default() { ++ # Run create validator tx command ++ echo \\"Running txn for create-validator\\" ++ args='' ++ if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c \\"min-self-delegation\\") -gt 0 ]]; ++ then ++ args+='--min-self-delegation=1000000' ++ fi ++ $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq ++ $CHAIN_BIN tx staking create-validator \\\\ ++ --node $NODE_URL \\\\ ++ --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\\\ ++ --moniker $VAL_NAME \\\\ ++ --amount 5000000000$DENOM \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --from $VAL_NAME \\\\ ++ --commission-rate=\\"0.10\\" \\\\ ++ --commission-max-rate=\\"0.20\\" \\\\ ++ --commission-max-change-rate=\\"0.01\\" \\\\ ++ --keyring-backend test \\\\ ++ --home $CHAIN_DIR \\\\ ++ --fees 100000$DENOM \\\\ ++ --gas $GAS \\\\ ++ --output json \\\\ ++ --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + ++ cat /validator.log | jq ++ } ++ ++ set +e ++ # Fetch the cosmos-sdk version to be able to perform the create-validator tx ++ cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\\\(.*\\\\)/\\\\1/p') ++ echo \\"cosmos_sdk_version: $cosmos_sdk_version\\" ++ set -e ++ ++ if is_greater \\"$cosmos_sdk_version\\" \\"v0.50.0\\"; then ++ echo \\"cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format\\" ++ cosmos-sdk-version-v50 ++ else ++ echo \\"cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format\\" ++ cosmos-sdk-version-default ++ fi", ++ "createGenesis.sh": "#!/bin/bash ++ + DENOM=\\"\${DENOM:=untrn}\\" + STAKEDENOM=\${DENOM:-untrn} + COINS=\\"\${COINS:=100000000000000000untrn}\\" +@@ -898,259 +1151,6 @@ + fi + + echo \\"DAO $DAO_CONTRACT_ADDRESS\\"", +- "create-ics.sh": "#!/bin/bash +- +- set -euxo pipefail +- +- DENOM=\\"\${DENOM:=uatom}\\" +- CHAIN_ID=\\"\${CHAIN_ID:=cosmoshub-1}\\" +- CHAIN_BIN=\\"\${CHAIN_BIN:=gaiad}\\" +- NODE_URL=\\"\${NODE_URL:=http://0.0.0.0:26657}\\" +- KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" +- +- PROPOSAL_FILE=\\"\${PROPOSAL_FILE}\\" +- KEY_NAME=\\"ics-setup\\" +- MAX_RETRIES=3 +- RETRY_INTERVAL=30 +- SUBMIT_PROPOSAL_CMD=\\"\\" +- +- add_key() { +- # Add test keys to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".keys[0].name\\" $KEYS_CONFIG) +- jq -r \\".keys[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend=\\"test\\" +- echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend=\\"test\\") +- } +- +- get_validator_address() { +- echo \\"Getting validator address...\\" +- VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') +- echo \\"Selected validator address: $VALIDATOR_ADDRESS\\" +- } +- +- stake_tokens() { +- COINS=\\"10000000$DENOM\\" +- echo \\"Staking tokens...\\" +- $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \\\\ +- --from $KEY_NAME \\\\ +- --chain-id $CHAIN_ID \\\\ +- --node $NODE_URL \\\\ +- --keyring-backend=\\"test\\" \\\\ +- --gas auto --gas-adjustment 2 \\\\ +- --output json \\\\ +- --yes +- sleep 5 +- } +- +- determine_proposal_command() { +- echo \\"Determining the correct command to submit proposals...\\" +- HELP_OUTPUT=$($CHAIN_BIN tx gov --help) +- if echo \\"$HELP_OUTPUT\\" | grep -q \\"submit-legacy-proposal\\"; then +- SUBMIT_PROPOSAL_CMD=\\"submit-legacy-proposal\\" +- else +- SUBMIT_PROPOSAL_CMD=\\"submit-proposal\\" +- fi +- echo \\"Using $SUBMIT_PROPOSAL_CMD for submitting proposals.\\" +- } +- +- submit_proposal() { +- echo \\"Get all proposals\\" +- PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) +- if echo \\"$PROPOSALS_OUTPUT\\" | grep -q \\"no proposals found\\"; then +- echo \\"No existing proposals found. Proceeding to submit a new proposal.\\" +- else +- echo \\"Existing proposals: $PROPOSALS_OUTPUT\\" +- fi +- +- echo \\"Submit gov proposal on chain\\" +- PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \\\\ +- --from $KEY_NAME \\\\ +- --chain-id $CHAIN_ID \\\\ +- --node $NODE_URL \\\\ +- --keyring-backend=\\"test\\" \\\\ +- --gas auto --gas-adjustment 2 \\\\ +- --output json \\\\ +- --yes) +- echo $PROPOSAL_TX +- +- # Extract JSON part from the output +- TX_HASH=$(echo \\"$PROPOSAL_TX\\" | grep -o '{.*}' | jq -r '.txhash') +- if [ -n \\"$TX_HASH\\" ]; then +- echo \\"Transaction hash: $TX_HASH\\" +- else +- echo \\"Failed to submit proposal. Output was not as expected.\\" +- exit 1 +- fi +- +- sleep 5 +- } +- +- get_proposal_id() { +- echo \\"Getting proposal ID\\" +- PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) +- LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') +- if [ \\"$LOGS\\" != \\"null\\" ] && [ \\"$LOGS\\" != \\"[]\\" ]; then +- PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type==\\"submit_proposal\\").attributes[] | select(.key==\\"proposal_id\\").value') +- if [ -n \\"$PROPOSAL_ID\\" ]; then +- echo \\"Proposal ID: $PROPOSAL_ID\\" +- return 0 +- fi +- fi +- echo \\"Failed to retrieve proposal ID from transaction logs. Logs might be empty.\\" +- exit 1 +- } +- +- vote_proposal() { +- echo \\"Voting on proposal\\" +- $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\\\ +- --from $KEY_NAME \\\\ +- --chain-id $CHAIN_ID \\\\ +- --node $NODE_URL \\\\ +- --keyring-backend=\\"test\\" \\\\ +- --gas auto --gas-adjustment 2 \\\\ +- --output json \\\\ +- --yes +- sleep 5 +- } +- +- wait_for_proposal_to_pass() { +- echo \\"Waiting for proposal to pass\\" +- for ((i=1; i<=$MAX_RETRIES; i++)); do +- STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') +- if [ \\"$STATUS\\" == \\"PROPOSAL_STATUS_PASSED\\" ]; then +- echo \\"Proposal has passed!\\" +- return 0 +- else +- echo \\"Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting...\\" +- sleep $RETRY_INTERVAL +- fi +- done +- echo \\"Proposal did not pass after $MAX_RETRIES attempts.\\" +- exit 1 +- } +- +- main() { +- add_key +- get_validator_address +- stake_tokens +- determine_proposal_command +- submit_proposal +- get_proposal_id +- vote_proposal +- wait_for_proposal_to_pass +- } +- +- main", +- "create-validator.sh": "#!/bin/bash +- +- DENOM=\\"\${DENOM:=uosmo}\\" +- CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" +- CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.osmosisd}\\" +- KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" +- VAL_NAME=\\"\${VAL_NAME:=osmosis}\\" +- NODE_URL=\\"\${NODE_URL:=http://0.0.0.0:26657}\\" +- NODE_ARGS=\\"\${NODE_ARGS}\\" +- GAS=\\"\${GAS:=auto}\\" +- +- set -eux +- +- # Wait for the node to be synced +- max_tries=10 +- while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq \\".SyncInfo.catching_up\\") == true ]] +- do +- if [[ max_tries -lt 0 ]]; then echo \\"Not able to sync with genesis node\\"; exit 1; fi +- echo \\"Still syncing... Sleeping for 15 secs. Tries left $max_tries\\" +- ((max_tries--)) +- sleep 30 +- done +- +- # Function to compare version numbers +- version_compare() { +- version1=\\"$1\\" +- version2=\\"$2\\" +- if [[ \\"$(printf '%s\\\\n' \\"$version1\\" \\"$version2\\" | sort -V | head -n 1)\\" == \\"$version1\\" ]]; then +- return 1 # version1 is greater +- else +- return 0 # version2 is greater or equal +- fi +- } +- +- # Check if cosmos_sdk_version is greater than a specified version +- is_greater() { +- version_compare \\"$1\\" \\"$2\\" +- return $? +- } +- +- function cosmos-sdk-version-v50() { +- # Content for the validator.json file +- json_content='{ +- \\"pubkey\\": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)' +- \\"amount\\": \\"5000000000'$DENOM'\\" +- \\"moniker\\": \\"'$VAL_NAME'\\" +- \\"commission-rate\\": \\"0.1\\" +- \\"commission-max-rate\\": \\"0.2\\" +- \\"commission-max-change-rate\\": \\"0.01\\" +- \\"min-self-delegation\\": \\"1000000\\" +- }' +- echo \\"$json_content\\" > /validator.json +- cat /validator.json +- +- # Run create validator tx command +- echo \\"Running txn for create-validator\\" +- $CHAIN_BIN tx staking create-validator /validator.json \\\\ +- --node $NODE_URL \\\\ +- --chain-id $CHAIN_ID \\\\ +- --from $VAL_NAME \\\\ +- --fees 100000$DENOM \\\\ +- --keyring-backend=\\"test\\" \\\\ +- --output json \\\\ +- --gas $GAS \\\\ +- --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log +- +- cat /validator.log | jq +- } +- +- function cosmos-sdk-version-default() { +- # Run create validator tx command +- echo \\"Running txn for create-validator\\" +- args='' +- if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c \\"min-self-delegation\\") -gt 0 ]]; +- then +- args+='--min-self-delegation=1000000' +- fi +- $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq +- $CHAIN_BIN tx staking create-validator \\\\ +- --node $NODE_URL \\\\ +- --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\\\ +- --moniker $VAL_NAME \\\\ +- --amount 5000000000$DENOM \\\\ +- --chain-id $CHAIN_ID \\\\ +- --from $VAL_NAME \\\\ +- --commission-rate=\\"0.10\\" \\\\ +- --commission-max-rate=\\"0.20\\" \\\\ +- --commission-max-change-rate=\\"0.01\\" \\\\ +- --keyring-backend test \\\\ +- --home $CHAIN_DIR \\\\ +- --fees 100000$DENOM \\\\ +- --gas $GAS \\\\ +- --output json \\\\ +- --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log +- +- cat /validator.log | jq +- } +- +- set +e +- # Fetch the cosmos-sdk version to be able to perform the create-validator tx +- cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\\\(.*\\\\)/\\\\1/p') +- echo \\"cosmos_sdk_version: $cosmos_sdk_version\\" +- set -e +- +- if is_greater \\"$cosmos_sdk_version\\" \\"v0.50.0\\"; then +- echo \\"cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format\\" +- cosmos-sdk-version-v50 +- else +- echo \\"cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format\\" +- cosmos-sdk-version-default +- fi", + "ibc-connection.sh": "#!/bin/bash + + REGISTRY_URL=\\"$1\\" +@@ -1213,7 +1213,7 @@ + ((max_tries--)) + sleep 2 + done", +- "update-config.sh": "#!/bin/bash ++ "updateConfig.sh": "#!/bin/bash + + STAKEDENOM=\${DENOM:-untrn} + CHAIN_ID=\\"\${CHAIN_ID:=osmosis}\\" +@@ -1250,7 +1250,7 @@ + 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", +- "update-genesis.sh": "#!/bin/bash ++ "updateGenesis.sh": "#!/bin/bash + + DENOM=\\"\${DENOM:=uosmo}\\" + CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" +@@ -1264,6 +1264,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-neutron-1", ++ "app.kubernetes.io/part-of": "neutron-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "neutron-1", ++ "starship.io/chain-name": "neutron", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-neutron-1", + }, + } + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/neutron-1", +- "name": "registry-configs-neutron-1", ++ "mountPath": "/chains/neutron-1", ++ "name": "registry-neutron-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-neutron-1", + }, +- "name": "registry-configs-neutron-1", ++ "name": "registry-neutron-1", + }, + ], + }, + +--- ConfigMap/registry-neutron-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -6,8 +6,7 @@ + \\"chain_name\\": \\"neutron\\", + \\"assets\\": [ + { +- \\"base\\": \\"untrn\\", +- \\"coingecko_id\\": \\"neutron\\", ++ \\"description\\": \\"The native token of Neutron chain.\\", + \\"denom_units\\": [ + { + \\"denom\\": \\"untrn\\", +@@ -18,14 +17,15 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Neutron chain.\\", ++ \\"base\\": \\"untrn\\", ++ \\"name\\": \\"Neutron\\", + \\"display\\": \\"ntrn\\", ++ \\"symbol\\": \\"NTRN\\", + \\"logo_URIs\\": { + \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png\\", + \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg\\" + }, +- \\"name\\": \\"Neutron\\", +- \\"symbol\\": \\"NTRN\\" ++ \\"coingecko_id\\": \\"neutron\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-neutron-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-neutron-1", + }, + } + +--- ConfigMap/hermes-neutron-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,93 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"neutron-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"neutron-1-cli\\" + ccv_consumer_chain = true +- rpc_addr = \\"http://neutron-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://neutron-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://neutron-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ rpc_addr = \\"http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"neutron\\" + default_gas = 500000000 +@@ -104,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"untrn\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"untrn\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -129,86 +80,38 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] +@@ -216,10 +119,9 @@ + type = \\"CosmosSdk\\" + key_name = \\"neutron-1\\" + ccv_consumer_chain = true +- rpc_addr = \\"http://neutron-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://neutron-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://neutron-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ rpc_addr = \\"http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"neutron\\" + default_gas = 500000000 +@@ -236,16 +138,14 @@ + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"untrn\\" } + +- +- + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -264,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-neutron-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-neutron-cosmos", + }, + } + +--- StatefulSet/hermes-neutron-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-neutron-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-neutron-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-neutron-cosmos", + "app.kubernetes.io/rawname": "neutron-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "# Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml ++ ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for neutron-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"neutron-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"neutron-1\\",\\"a-connection\\":\\"connection-0\\",\\"a-port\\":\\"consumer\\",\\"b-port\\":\\"provider\\",\\"channel-version\\":1,\\"order\\":\\"ordered\\"},{\\"a-chain\\":\\"neutron-1\\",\\"a-connection\\":\\"connection-0\\",\\"a-port\\":\\"transfer\\",\\"b-port\\":\\"transfer\\"}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-neutron-cosmos\\",\\"ics\\":{\\"consumer\\":\\"neutron-1\\",\\"enabled\\":true,\\"provider\\":\\"cosmoshub-4\\"},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"neutron-cosmos\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for neutron-1...\\" + hermes keys add \\\\ +@@ -240,8 +259,7 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true +- echo \\"Creating IBC connection for neutron-1...\\" +- hermes create connection --a-chain neutron-1 --a-client 07-tendermint-0 --b-client 07-tendermint-0 ++ + hermes create channel \\\\ + --a-connection connection-0 \\\\ + --channel-version 1 \\\\ +@@ -249,11 +267,16 @@ + --a-chain neutron-1 \\\\ + --a-port consumer \\\\ + --b-port provider ++ + hermes create channel \\\\ + --a-connection connection-0 \\\\ + --a-chain neutron-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -274,7 +297,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -282,12 +305,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -318,6 +341,7 @@ + echo \\"Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -340,16 +364,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for neutron-relayer that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- StatefulSet/neutron-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "neutron-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "neutron-1-genesis", ++ "app.kubernetes.io/part-of": "neutron-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "neutron-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "neutron", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "neutron-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "neutron", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "neutron-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "neutron", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "neutron-1-genesis", + "app.kubernetes.io/rawname": "neutron-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "neutron-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -535,11 +554,11 @@ + "name": "init-ics", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -588,16 +607,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- ConfigMap/consumer-proposal-neutron-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -29,6 +29,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "neutron", ++ "app.kubernetes.io/part-of": "neutron-1", ++ "app.kubernetes.io/role": "ics-proposal", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "neutron-1", ++ "starship.io/chain-name": "neutron", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "consumer-proposal-neutron-1", + }, + } + +--- ConfigMap/setup-scripts-neutron-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -87,8 +87,261 @@ + + echo \\"$json\\" | jq -r .result + exit 0", +- "create-genesis.sh": "#!/bin/bash ++ "create-ics.sh": "#!/bin/bash ++ ++ set -euxo pipefail ++ ++ DENOM=\\"\${DENOM:=uatom}\\" ++ CHAIN_ID=\\"\${CHAIN_ID:=cosmoshub-1}\\" ++ CHAIN_BIN=\\"\${CHAIN_BIN:=gaiad}\\" ++ NODE_URL=\\"\${NODE_URL:=http://0.0.0.0:26657}\\" ++ KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" ++ ++ PROPOSAL_FILE=\\"\${PROPOSAL_FILE}\\" ++ KEY_NAME=\\"ics-setup\\" ++ MAX_RETRIES=3 ++ RETRY_INTERVAL=30 ++ SUBMIT_PROPOSAL_CMD=\\"\\" ++ ++ add_key() { ++ # Add test keys to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".keys[0].name\\" $KEYS_CONFIG) ++ jq -r \\".keys[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend=\\"test\\" ++ echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend=\\"test\\") ++ } ++ ++ get_validator_address() { ++ echo \\"Getting validator address...\\" ++ VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') ++ echo \\"Selected validator address: $VALIDATOR_ADDRESS\\" ++ } ++ ++ stake_tokens() { ++ COINS=\\"10000000$DENOM\\" ++ echo \\"Staking tokens...\\" ++ $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \\\\ ++ --from $KEY_NAME \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --node $NODE_URL \\\\ ++ --keyring-backend=\\"test\\" \\\\ ++ --gas auto --gas-adjustment 2 \\\\ ++ --output json \\\\ ++ --yes ++ sleep 5 ++ } ++ ++ determine_proposal_command() { ++ echo \\"Determining the correct command to submit proposals...\\" ++ HELP_OUTPUT=$($CHAIN_BIN tx gov --help) ++ if echo \\"$HELP_OUTPUT\\" | grep -q \\"submit-legacy-proposal\\"; then ++ SUBMIT_PROPOSAL_CMD=\\"submit-legacy-proposal\\" ++ else ++ SUBMIT_PROPOSAL_CMD=\\"submit-proposal\\" ++ fi ++ echo \\"Using $SUBMIT_PROPOSAL_CMD for submitting proposals.\\" ++ } ++ ++ submit_proposal() { ++ echo \\"Get all proposals\\" ++ PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) ++ if echo \\"$PROPOSALS_OUTPUT\\" | grep -q \\"no proposals found\\"; then ++ echo \\"No existing proposals found. Proceeding to submit a new proposal.\\" ++ else ++ echo \\"Existing proposals: $PROPOSALS_OUTPUT\\" ++ fi ++ ++ echo \\"Submit gov proposal on chain\\" ++ PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \\\\ ++ --from $KEY_NAME \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --node $NODE_URL \\\\ ++ --keyring-backend=\\"test\\" \\\\ ++ --gas auto --gas-adjustment 2 \\\\ ++ --output json \\\\ ++ --yes) ++ echo $PROPOSAL_TX ++ ++ # Extract JSON part from the output ++ TX_HASH=$(echo \\"$PROPOSAL_TX\\" | grep -o '{.*}' | jq -r '.txhash') ++ if [ -n \\"$TX_HASH\\" ]; then ++ echo \\"Transaction hash: $TX_HASH\\" ++ else ++ echo \\"Failed to submit proposal. Output was not as expected.\\" ++ exit 1 ++ fi ++ ++ sleep 5 ++ } ++ ++ get_proposal_id() { ++ echo \\"Getting proposal ID\\" ++ PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) ++ LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') ++ if [ \\"$LOGS\\" != \\"null\\" ] && [ \\"$LOGS\\" != \\"[]\\" ]; then ++ PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type==\\"submit_proposal\\").attributes[] | select(.key==\\"proposal_id\\").value') ++ if [ -n \\"$PROPOSAL_ID\\" ]; then ++ echo \\"Proposal ID: $PROPOSAL_ID\\" ++ return 0 ++ fi ++ fi ++ echo \\"Failed to retrieve proposal ID from transaction logs. Logs might be empty.\\" ++ exit 1 ++ } ++ ++ vote_proposal() { ++ echo \\"Voting on proposal\\" ++ $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\\\ ++ --from $KEY_NAME \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --node $NODE_URL \\\\ ++ --keyring-backend=\\"test\\" \\\\ ++ --gas auto --gas-adjustment 2 \\\\ ++ --output json \\\\ ++ --yes ++ sleep 5 ++ } ++ ++ wait_for_proposal_to_pass() { ++ echo \\"Waiting for proposal to pass\\" ++ for ((i=1; i<=$MAX_RETRIES; i++)); do ++ STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') ++ if [ \\"$STATUS\\" == \\"PROPOSAL_STATUS_PASSED\\" ]; then ++ echo \\"Proposal has passed!\\" ++ return 0 ++ else ++ echo \\"Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting...\\" ++ sleep $RETRY_INTERVAL ++ fi ++ done ++ echo \\"Proposal did not pass after $MAX_RETRIES attempts.\\" ++ exit 1 ++ } ++ ++ main() { ++ add_key ++ get_validator_address ++ stake_tokens ++ determine_proposal_command ++ submit_proposal ++ get_proposal_id ++ vote_proposal ++ wait_for_proposal_to_pass ++ } ++ ++ main", ++ "create-validator.sh": "#!/bin/bash ++ ++ DENOM=\\"\${DENOM:=uosmo}\\" ++ CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" ++ CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.osmosisd}\\" ++ KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" ++ VAL_NAME=\\"\${VAL_NAME:=osmosis}\\" ++ NODE_URL=\\"\${NODE_URL:=http://0.0.0.0:26657}\\" ++ NODE_ARGS=\\"\${NODE_ARGS}\\" ++ GAS=\\"\${GAS:=auto}\\" ++ ++ set -eux ++ ++ # Wait for the node to be synced ++ max_tries=10 ++ while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq \\".SyncInfo.catching_up\\") == true ]] ++ do ++ if [[ max_tries -lt 0 ]]; then echo \\"Not able to sync with genesis node\\"; exit 1; fi ++ echo \\"Still syncing... Sleeping for 15 secs. Tries left $max_tries\\" ++ ((max_tries--)) ++ sleep 30 ++ done ++ ++ # Function to compare version numbers ++ version_compare() { ++ version1=\\"$1\\" ++ version2=\\"$2\\" ++ if [[ \\"$(printf '%s\\\\n' \\"$version1\\" \\"$version2\\" | sort -V | head -n 1)\\" == \\"$version1\\" ]]; then ++ return 1 # version1 is greater ++ else ++ return 0 # version2 is greater or equal ++ fi ++ } ++ ++ # Check if cosmos_sdk_version is greater than a specified version ++ is_greater() { ++ version_compare \\"$1\\" \\"$2\\" ++ return $? ++ } ++ ++ function cosmos-sdk-version-v50() { ++ # Content for the validator.json file ++ json_content='{ ++ \\"pubkey\\": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)' ++ \\"amount\\": \\"5000000000'$DENOM'\\" ++ \\"moniker\\": \\"'$VAL_NAME'\\" ++ \\"commission-rate\\": \\"0.1\\" ++ \\"commission-max-rate\\": \\"0.2\\" ++ \\"commission-max-change-rate\\": \\"0.01\\" ++ \\"min-self-delegation\\": \\"1000000\\" ++ }' ++ echo \\"$json_content\\" > /validator.json ++ cat /validator.json ++ ++ # Run create validator tx command ++ echo \\"Running txn for create-validator\\" ++ $CHAIN_BIN tx staking create-validator /validator.json \\\\ ++ --node $NODE_URL \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --from $VAL_NAME \\\\ ++ --fees 100000$DENOM \\\\ ++ --keyring-backend=\\"test\\" \\\\ ++ --output json \\\\ ++ --gas $GAS \\\\ ++ --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log ++ ++ cat /validator.log | jq ++ } ++ ++ function cosmos-sdk-version-default() { ++ # Run create validator tx command ++ echo \\"Running txn for create-validator\\" ++ args='' ++ if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c \\"min-self-delegation\\") -gt 0 ]]; ++ then ++ args+='--min-self-delegation=1000000' ++ fi ++ $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq ++ $CHAIN_BIN tx staking create-validator \\\\ ++ --node $NODE_URL \\\\ ++ --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\\\ ++ --moniker $VAL_NAME \\\\ ++ --amount 5000000000$DENOM \\\\ ++ --chain-id $CHAIN_ID \\\\ ++ --from $VAL_NAME \\\\ ++ --commission-rate=\\"0.10\\" \\\\ ++ --commission-max-rate=\\"0.20\\" \\\\ ++ --commission-max-change-rate=\\"0.01\\" \\\\ ++ --keyring-backend test \\\\ ++ --home $CHAIN_DIR \\\\ ++ --fees 100000$DENOM \\\\ ++ --gas $GAS \\\\ ++ --output json \\\\ ++ --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log + ++ cat /validator.log | jq ++ } ++ ++ set +e ++ # Fetch the cosmos-sdk version to be able to perform the create-validator tx ++ cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\\\(.*\\\\)/\\\\1/p') ++ echo \\"cosmos_sdk_version: $cosmos_sdk_version\\" ++ set -e ++ ++ if is_greater \\"$cosmos_sdk_version\\" \\"v0.50.0\\"; then ++ echo \\"cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format\\" ++ cosmos-sdk-version-v50 ++ else ++ echo \\"cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format\\" ++ cosmos-sdk-version-default ++ fi", ++ "createGenesis.sh": "#!/bin/bash ++ + DENOM=\\"\${DENOM:=untrn}\\" + STAKEDENOM=\${DENOM:-untrn} + COINS=\\"\${COINS:=100000000000000000untrn}\\" +@@ -898,259 +1151,6 @@ + fi + + echo \\"DAO $DAO_CONTRACT_ADDRESS\\"", +- "create-ics.sh": "#!/bin/bash +- +- set -euxo pipefail +- +- DENOM=\\"\${DENOM:=uatom}\\" +- CHAIN_ID=\\"\${CHAIN_ID:=cosmoshub-1}\\" +- CHAIN_BIN=\\"\${CHAIN_BIN:=gaiad}\\" +- NODE_URL=\\"\${NODE_URL:=http://0.0.0.0:26657}\\" +- KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" +- +- PROPOSAL_FILE=\\"\${PROPOSAL_FILE}\\" +- KEY_NAME=\\"ics-setup\\" +- MAX_RETRIES=3 +- RETRY_INTERVAL=30 +- SUBMIT_PROPOSAL_CMD=\\"\\" +- +- add_key() { +- # Add test keys to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".keys[0].name\\" $KEYS_CONFIG) +- jq -r \\".keys[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $KEY_NAME --recover --keyring-backend=\\"test\\" +- echo $($CHAIN_BIN keys show -a $KEY_NAME --keyring-backend=\\"test\\") +- } +- +- get_validator_address() { +- echo \\"Getting validator address...\\" +- VALIDATOR_ADDRESS=$($CHAIN_BIN q staking validators --node $NODE_URL --output json | jq -r '.validators[0].operator_address') +- echo \\"Selected validator address: $VALIDATOR_ADDRESS\\" +- } +- +- stake_tokens() { +- COINS=\\"10000000$DENOM\\" +- echo \\"Staking tokens...\\" +- $CHAIN_BIN tx staking delegate $VALIDATOR_ADDRESS $COINS \\\\ +- --from $KEY_NAME \\\\ +- --chain-id $CHAIN_ID \\\\ +- --node $NODE_URL \\\\ +- --keyring-backend=\\"test\\" \\\\ +- --gas auto --gas-adjustment 2 \\\\ +- --output json \\\\ +- --yes +- sleep 5 +- } +- +- determine_proposal_command() { +- echo \\"Determining the correct command to submit proposals...\\" +- HELP_OUTPUT=$($CHAIN_BIN tx gov --help) +- if echo \\"$HELP_OUTPUT\\" | grep -q \\"submit-legacy-proposal\\"; then +- SUBMIT_PROPOSAL_CMD=\\"submit-legacy-proposal\\" +- else +- SUBMIT_PROPOSAL_CMD=\\"submit-proposal\\" +- fi +- echo \\"Using $SUBMIT_PROPOSAL_CMD for submitting proposals.\\" +- } +- +- submit_proposal() { +- echo \\"Get all proposals\\" +- PROPOSALS_OUTPUT=$($CHAIN_BIN query gov proposals --output json --node $NODE_URL 2>&1 || true) +- if echo \\"$PROPOSALS_OUTPUT\\" | grep -q \\"no proposals found\\"; then +- echo \\"No existing proposals found. Proceeding to submit a new proposal.\\" +- else +- echo \\"Existing proposals: $PROPOSALS_OUTPUT\\" +- fi +- +- echo \\"Submit gov proposal on chain\\" +- PROPOSAL_TX=$($CHAIN_BIN tx gov $SUBMIT_PROPOSAL_CMD consumer-addition $PROPOSAL_FILE \\\\ +- --from $KEY_NAME \\\\ +- --chain-id $CHAIN_ID \\\\ +- --node $NODE_URL \\\\ +- --keyring-backend=\\"test\\" \\\\ +- --gas auto --gas-adjustment 2 \\\\ +- --output json \\\\ +- --yes) +- echo $PROPOSAL_TX +- +- # Extract JSON part from the output +- TX_HASH=$(echo \\"$PROPOSAL_TX\\" | grep -o '{.*}' | jq -r '.txhash') +- if [ -n \\"$TX_HASH\\" ]; then +- echo \\"Transaction hash: $TX_HASH\\" +- else +- echo \\"Failed to submit proposal. Output was not as expected.\\" +- exit 1 +- fi +- +- sleep 5 +- } +- +- get_proposal_id() { +- echo \\"Getting proposal ID\\" +- PROPOSAL_QUERY=$(gaiad query tx $TX_HASH --node $NODE_URL --output json) +- LOGS=$(echo $PROPOSAL_QUERY | jq -r '.logs') +- if [ \\"$LOGS\\" != \\"null\\" ] && [ \\"$LOGS\\" != \\"[]\\" ]; then +- PROPOSAL_ID=$(echo $PROPOSAL_QUERY | jq -r '.logs[0].events[] | select(.type==\\"submit_proposal\\").attributes[] | select(.key==\\"proposal_id\\").value') +- if [ -n \\"$PROPOSAL_ID\\" ]; then +- echo \\"Proposal ID: $PROPOSAL_ID\\" +- return 0 +- fi +- fi +- echo \\"Failed to retrieve proposal ID from transaction logs. Logs might be empty.\\" +- exit 1 +- } +- +- vote_proposal() { +- echo \\"Voting on proposal\\" +- $CHAIN_BIN tx gov vote $PROPOSAL_ID yes \\\\ +- --from $KEY_NAME \\\\ +- --chain-id $CHAIN_ID \\\\ +- --node $NODE_URL \\\\ +- --keyring-backend=\\"test\\" \\\\ +- --gas auto --gas-adjustment 2 \\\\ +- --output json \\\\ +- --yes +- sleep 5 +- } +- +- wait_for_proposal_to_pass() { +- echo \\"Waiting for proposal to pass\\" +- for ((i=1; i<=$MAX_RETRIES; i++)); do +- STATUS=$($CHAIN_BIN query gov proposal $PROPOSAL_ID --node $NODE_URL --output json | jq -r '.status') +- if [ \\"$STATUS\\" == \\"PROPOSAL_STATUS_PASSED\\" ]; then +- echo \\"Proposal has passed!\\" +- return 0 +- else +- echo \\"Current status: $STATUS. Attempt $i/$MAX_RETRIES. Waiting...\\" +- sleep $RETRY_INTERVAL +- fi +- done +- echo \\"Proposal did not pass after $MAX_RETRIES attempts.\\" +- exit 1 +- } +- +- main() { +- add_key +- get_validator_address +- stake_tokens +- determine_proposal_command +- submit_proposal +- get_proposal_id +- vote_proposal +- wait_for_proposal_to_pass +- } +- +- main", +- "create-validator.sh": "#!/bin/bash +- +- DENOM=\\"\${DENOM:=uosmo}\\" +- CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" +- CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.osmosisd}\\" +- KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" +- VAL_NAME=\\"\${VAL_NAME:=osmosis}\\" +- NODE_URL=\\"\${NODE_URL:=http://0.0.0.0:26657}\\" +- NODE_ARGS=\\"\${NODE_ARGS}\\" +- GAS=\\"\${GAS:=auto}\\" +- +- set -eux +- +- # Wait for the node to be synced +- max_tries=10 +- while [[ $($CHAIN_BIN status --output json --node $NODE_URL 2>&1 | jq \\".SyncInfo.catching_up\\") == true ]] +- do +- if [[ max_tries -lt 0 ]]; then echo \\"Not able to sync with genesis node\\"; exit 1; fi +- echo \\"Still syncing... Sleeping for 15 secs. Tries left $max_tries\\" +- ((max_tries--)) +- sleep 30 +- done +- +- # Function to compare version numbers +- version_compare() { +- version1=\\"$1\\" +- version2=\\"$2\\" +- if [[ \\"$(printf '%s\\\\n' \\"$version1\\" \\"$version2\\" | sort -V | head -n 1)\\" == \\"$version1\\" ]]; then +- return 1 # version1 is greater +- else +- return 0 # version2 is greater or equal +- fi +- } +- +- # Check if cosmos_sdk_version is greater than a specified version +- is_greater() { +- version_compare \\"$1\\" \\"$2\\" +- return $? +- } +- +- function cosmos-sdk-version-v50() { +- # Content for the validator.json file +- json_content='{ +- \\"pubkey\\": '$($CHAIN_BIN tendermint show-validator $NODE_ARGS)' +- \\"amount\\": \\"5000000000'$DENOM'\\" +- \\"moniker\\": \\"'$VAL_NAME'\\" +- \\"commission-rate\\": \\"0.1\\" +- \\"commission-max-rate\\": \\"0.2\\" +- \\"commission-max-change-rate\\": \\"0.01\\" +- \\"min-self-delegation\\": \\"1000000\\" +- }' +- echo \\"$json_content\\" > /validator.json +- cat /validator.json +- +- # Run create validator tx command +- echo \\"Running txn for create-validator\\" +- $CHAIN_BIN tx staking create-validator /validator.json \\\\ +- --node $NODE_URL \\\\ +- --chain-id $CHAIN_ID \\\\ +- --from $VAL_NAME \\\\ +- --fees 100000$DENOM \\\\ +- --keyring-backend=\\"test\\" \\\\ +- --output json \\\\ +- --gas $GAS \\\\ +- --gas-adjustment 1.5 $NODE_ARGS --yes > /validator.log +- +- cat /validator.log | jq +- } +- +- function cosmos-sdk-version-default() { +- # Run create validator tx command +- echo \\"Running txn for create-validator\\" +- args='' +- if [[ $($CHAIN_BIN tx staking create-validator --help | grep -c \\"min-self-delegation\\") -gt 0 ]]; +- then +- args+='--min-self-delegation=1000000' +- fi +- $CHAIN_BIN keys list --keyring-backend test --output json --home $CHAIN_DIR | jq +- $CHAIN_BIN tx staking create-validator \\\\ +- --node $NODE_URL \\\\ +- --pubkey=$($CHAIN_BIN tendermint show-validator $NODE_ARGS) \\\\ +- --moniker $VAL_NAME \\\\ +- --amount 5000000000$DENOM \\\\ +- --chain-id $CHAIN_ID \\\\ +- --from $VAL_NAME \\\\ +- --commission-rate=\\"0.10\\" \\\\ +- --commission-max-rate=\\"0.20\\" \\\\ +- --commission-max-change-rate=\\"0.01\\" \\\\ +- --keyring-backend test \\\\ +- --home $CHAIN_DIR \\\\ +- --fees 100000$DENOM \\\\ +- --gas $GAS \\\\ +- --output json \\\\ +- --gas-adjustment 1.5 $args $NODE_ARGS --yes > /validator.log +- +- cat /validator.log | jq +- } +- +- set +e +- # Fetch the cosmos-sdk version to be able to perform the create-validator tx +- cosmos_sdk_version=$($CHAIN_BIN version --long | sed -n 's/cosmos_sdk_version: \\\\(.*\\\\)/\\\\1/p') +- echo \\"cosmos_sdk_version: $cosmos_sdk_version\\" +- set -e +- +- if is_greater \\"$cosmos_sdk_version\\" \\"v0.50.0\\"; then +- echo \\"cosmos_sdk_version is greater than v0.50.0, running create-validator tx with new format\\" +- cosmos-sdk-version-v50 +- else +- echo \\"cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format\\" +- cosmos-sdk-version-default +- fi", + "ibc-connection.sh": "#!/bin/bash + + REGISTRY_URL=\\"$1\\" +@@ -1213,7 +1213,7 @@ + ((max_tries--)) + sleep 2 + done", +- "update-config.sh": "#!/bin/bash ++ "updateConfig.sh": "#!/bin/bash + + STAKEDENOM=\${DENOM:-untrn} + CHAIN_ID=\\"\${CHAIN_ID:=osmosis}\\" +@@ -1250,7 +1250,7 @@ + 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", +- "update-genesis.sh": "#!/bin/bash ++ "updateGenesis.sh": "#!/bin/bash + + DENOM=\\"\${DENOM:=uosmo}\\" + CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" +@@ -1264,6 +1264,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-neutron-1", ++ "app.kubernetes.io/part-of": "neutron-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "neutron-1", ++ "starship.io/chain-name": "neutron", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-neutron-1", + }, + } + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/neutron-1", +- "name": "registry-configs-neutron-1", ++ "mountPath": "/chains/neutron-1", ++ "name": "registry-neutron-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-neutron-1", + }, +- "name": "registry-configs-neutron-1", ++ "name": "registry-neutron-1", + }, + ], + }, + +--- ConfigMap/registry-neutron-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -6,8 +6,7 @@ + \\"chain_name\\": \\"neutron\\", + \\"assets\\": [ + { +- \\"base\\": \\"untrn\\", +- \\"coingecko_id\\": \\"neutron\\", ++ \\"description\\": \\"The native token of Neutron chain.\\", + \\"denom_units\\": [ + { + \\"denom\\": \\"untrn\\", +@@ -18,14 +17,15 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Neutron chain.\\", ++ \\"base\\": \\"untrn\\", ++ \\"name\\": \\"Neutron\\", + \\"display\\": \\"ntrn\\", ++ \\"symbol\\": \\"NTRN\\", + \\"logo_URIs\\": { + \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png\\", + \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg\\" + }, +- \\"name\\": \\"Neutron\\", +- \\"symbol\\": \\"NTRN\\" ++ \\"coingecko_id\\": \\"neutron\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-neutron-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-neutron-1", + }, + } + +--- ConfigMap/hermes-neutron-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,93 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"neutron-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"neutron-1-cli\\" + ccv_consumer_chain = true +- rpc_addr = \\"http://neutron-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://neutron-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://neutron-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ rpc_addr = \\"http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"neutron\\" + default_gas = 500000000 +@@ -104,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"untrn\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"untrn\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -129,86 +80,38 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] +@@ -216,10 +119,9 @@ + type = \\"CosmosSdk\\" + key_name = \\"neutron-1\\" + ccv_consumer_chain = true +- rpc_addr = \\"http://neutron-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://neutron-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://neutron-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ rpc_addr = \\"http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://neutron-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"neutron\\" + default_gas = 500000000 +@@ -236,16 +138,14 @@ + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"untrn\\" } + +- +- + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -264,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-neutron-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-neutron-cosmos", + }, + } + +--- StatefulSet/hermes-neutron-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-neutron-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-neutron-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-neutron-cosmos", + "app.kubernetes.io/rawname": "neutron-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "# Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml ++ ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for neutron-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"neutron-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"neutron-1\\",\\"a-connection\\":\\"connection-0\\",\\"a-port\\":\\"consumer\\",\\"b-port\\":\\"provider\\",\\"channel-version\\":1,\\"order\\":\\"ordered\\"},{\\"a-chain\\":\\"neutron-1\\",\\"a-connection\\":\\"connection-0\\",\\"a-port\\":\\"transfer\\",\\"b-port\\":\\"transfer\\"}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-neutron-cosmos\\",\\"ics\\":{\\"consumer\\":\\"neutron-1\\",\\"enabled\\":true,\\"provider\\":\\"cosmoshub-4\\"},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"neutron-cosmos\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for neutron-1...\\" + hermes keys add \\\\ +@@ -240,8 +259,7 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true +- echo \\"Creating IBC connection for neutron-1...\\" +- hermes create connection --a-chain neutron-1 --a-client 07-tendermint-0 --b-client 07-tendermint-0 ++ + hermes create channel \\\\ + --a-connection connection-0 \\\\ + --channel-version 1 \\\\ +@@ -249,11 +267,16 @@ + --a-chain neutron-1 \\\\ + --a-port consumer \\\\ + --b-port provider ++ + hermes create channel \\\\ + --a-connection connection-0 \\\\ + --a-chain neutron-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -274,7 +297,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -282,12 +305,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -318,6 +341,7 @@ + echo \\"Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -340,16 +364,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- ConfigMap/neutron-query-relayer-nqr-neutron-cosmos --- +- Expected (reference) ++ Generated (actual) + + Object { + "apiVersion": "v1", + "data": Object { +- "relayer-listen-addr": "127.0.0.1:9999", +- "relayer-neutron-chain-home-dir": "/root/.neutrond", +- "relayer-neutron-chain-rest-addr": "http://neutron-1-genesis.default.svc.cluster.local:1317", +- "relayer-neutron-chain-rpc-addr": "http://neutron-1-genesis.default.svc.cluster.local:26657", +- "relayer-registry-addresses": "", +- "relayer-target-chain-rpc-addr": "http://cosmoshub-4-genesis.default.svc.cluster.local:26657", ++ "config.json": "{ ++ \\"relayer\\": { ++ \\"neutron_chain\\": { ++ \\"chain_id\\": \\"neutron-1\\", ++ \\"rpc_addr\\": \\"http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657\\", ++ \\"grpc_addr\\": \\"http://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:9090\\", ++ \\"websocket_addr\\": \\"ws://neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket\\", ++ \\"account_prefix\\": \\"neutron\\", ++ \\"keyring_backend\\": \\"test\\", ++ \\"gas_prices\\": \\"0.025untrn\\", ++ \\"gas_adjustment\\": 1.5, ++ \\"connection_id\\": \\"connection-0\\", ++ \\"debug\\": false, ++ \\"timeout\\": \\"10s\\", ++ \\"tx_memo\\": \\"neutron-query-relayer\\" ++ }, ++ \\"target_chain\\": { ++ \\"chain_id\\": \\"cosmoshub-4\\", ++ \\"rpc_addr\\": \\"http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657\\", ++ \\"grpc_addr\\": \\"http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090\\", ++ \\"websocket_addr\\": \\"ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket\\", ++ \\"account_prefix\\": \\"cosmos\\", ++ \\"keyring_backend\\": \\"test\\", ++ \\"gas_prices\\": \\"0.025uatom\\", ++ \\"gas_adjustment\\": 1.5, ++ \\"connection_id\\": \\"connection-0\\", ++ \\"debug\\": false, ++ \\"timeout\\": \\"10s\\", ++ \\"tx_memo\\": \\"neutron-query-relayer\\" ++ }, ++ \\"queries_file\\": \\"/configs/queries.json\\", ++ \\"check_submitted_tx\\": true, ++ \\"storage_path\\": \\"./storage\\", ++ \\"log_level\\": \\"info\\" ++ } ++ }", + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "neutron-query-relayer-nqr-neutron-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "neutron-query-relayer", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "neutron-query-relayer-nqr-neutron-cosmos", + }, + } + +--- Service/neutron-query-relayer-nqr-neutron-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -11,10 +11,10 @@ + "clusterIP": "None", + "ports": Array [ + Object { +- "name": "rest", +- "port": 3000, ++ "name": "metrics", ++ "port": 9090, + "protocol": "TCP", +- "targetPort": 9999, ++ "targetPort": 9090, + }, + ], + "selector": Object { + +--- StatefulSet/neutron-query-relayer-nqr-neutron-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "neutron-query-relayer-nqr-neutron-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "neutron-query-relayer", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "neutron-query-relayer-nqr-neutron-cosmos", + }, + "spec": Object { +@@ -29,162 +38,53 @@ + "app.kubernetes.io/name": "neutron-query-relayer-nqr-neutron-cosmos", + "app.kubernetes.io/rawname": "nqr-neutron-cosmos", + "app.kubernetes.io/type": "neutron-query-relayer", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ neutron-query-relayer start --config /configs/config.json", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- +- echo \\"Query connection id from registry service\\" +- CONNECTION_ID=$(curl -s -X GET curl http://registry.$NAMESPACE.svc.cluster.local:8080/ibc/neutron-1/cosmoshub-4 | jq -r \\".chain_1.connection_id\\") +- echo \\"Connection ID: $CONNECTION_ID\\" +- +- RELAYER_NEUTRON_CHAIN_CONNECTION_ID=$CONNECTION_ID neutron_query_relayer start", + ], + "env": Array [ + Object { +- "name": "NAMESPACE", +- "valueFrom": Object { +- "fieldRef": Object { +- "fieldPath": "metadata.namespace", +- }, +- }, +- }, +- Object { +- "name": "RELAYER_ALLOW_KV_CALLBACKS", +- "value": "true", ++ "name": "CONFIG_PATH", ++ "value": "/configs/config.json", + }, + Object { +- "name": "RELAYER_ALLOW_TX_QUERIES", +- "value": "true", ++ "name": "KEYS_CONFIG", ++ "value": "/keys/keys.json", + }, + Object { +- "name": "RELAYER_CHECK_SUBMITTED_TX_STATUS_DELAY", +- "value": "10s", ++ "name": "LOG_LEVEL", ++ "value": "info", + }, + Object { +- "name": "RELAYER_DIR", +- "value": "/root/.hermes", ++ "name": "METRICS_PORT", ++ "value": "9090", + }, + Object { +- "name": "RELAYER_LISTEN_ADDR", ++ "name": "NAMESPACE", + "valueFrom": Object { +- "configMapKeyRef": Object { +- "key": "relayer-listen-addr", +- "name": "neutron-query-relayer-nqr-neutron-cosmos", ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", + }, + }, + }, + Object { +- "name": "RELAYER_MIN_KV_UPDATE_PERIOD", +- "value": "1", ++ "name": "RELAYER_INDEX", ++ "value": "\${HOSTNAME##*-}", + }, + Object { +- "name": "RELAYER_NEUTRON_CHAIN_DEBUG", +- "value": "false", +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_GAS_ADJUSTMENT", +- "value": "2", +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_GAS_LIMIT", +- "value": "200000", +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_GAS_PRICES", +- "value": "0.5untrn", +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_HOME_DIR", +- "valueFrom": Object { +- "configMapKeyRef": Object { +- "key": "relayer-neutron-chain-home-dir", +- "name": "neutron-query-relayer-nqr-neutron-cosmos", +- }, +- }, +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_KEYRING_BACKEND", +- "value": "test", +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_OUTPUT_FORMAT", +- "value": "json", +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_REST_ADDR", +- "valueFrom": Object { +- "configMapKeyRef": Object { +- "key": "relayer-neutron-chain-rest-addr", +- "name": "neutron-query-relayer-nqr-neutron-cosmos", +- }, +- }, +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_RPC_ADDR", +- "valueFrom": Object { +- "configMapKeyRef": Object { +- "key": "relayer-neutron-chain-rpc-addr", +- "name": "neutron-query-relayer-nqr-neutron-cosmos", +- }, +- }, +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_SIGN_KEY_NAME", +- "value": "relayer", +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_SIGN_MODE_STR", +- "value": "direct", +- }, +- Object { +- "name": "RELAYER_NEUTRON_CHAIN_TIMEOUT", +- "value": "1000s", +- }, +- Object { +- "name": "RELAYER_QUERIES_TASK_QUEUE_CAPACITY", +- "value": "10000", +- }, +- Object { +- "name": "RELAYER_REGISTRY_ADDRESS", +- "value": "", +- }, +- Object { +- "name": "RELAYER_REGISTRY_ADDRESSES", +- "valueFrom": Object { +- "configMapKeyRef": Object { +- "key": "relayer-registry-addresses", +- "name": "neutron-query-relayer-nqr-neutron-cosmos", +- }, +- }, +- }, +- Object { +- "name": "RELAYER_STORAGE_PATH", +- "value": "storage/leveldb", +- }, +- Object { +- "name": "RELAYER_TARGET_CHAIN_DEBUG", +- "value": "true", +- }, +- Object { +- "name": "RELAYER_TARGET_CHAIN_RPC_ADDR", +- "valueFrom": Object { +- "configMapKeyRef": Object { +- "key": "relayer-target-chain-rpc-addr", +- "name": "neutron-query-relayer-nqr-neutron-cosmos", +- }, +- }, +- }, +- Object { +- "name": "RELAYER_TARGET_CHAIN_TIMEOUT", +- "value": "1000s", ++ "name": "STORAGE_PATH", ++ "value": "./storage", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/neutron-query-relayer:v0.2.0", +@@ -192,12 +92,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -218,35 +118,56 @@ + ], + "initContainers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + +- echo \\"Adding key.... relayer\\" +- jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG | neutrond keys add relayer --recover --keyring-backend=\\"test\\" ++ RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ ++ mkdir -p $STORAGE_PATH ++ ++ NEUTRON_MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) ++ TARGET_MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) ++ ++ ++ echo \\"Setting up keys for neutron-1...\\" ++ # Keys will be managed through environment variables for neutron-query-relayer + + DENOM=\\"untrn\\" +- RLY_ADDR=$(neutrond keys show relayer -a --keyring-backend='test') +- echo \\"Transfer tokens to address $RLY_ADDR\\" ++ # For neutron-query-relayer, we need to derive the address from mnemonic ++ # This will be handled by the relayer binary itself + +- echo \\"Transfer tokens to address $RLY_ADDR\\" +- bash -e /scripts/transfer-tokens.sh \\\\ +- $RLY_ADDR \\\\ +- $DENOM \\\\ +- http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ +- \\"false\\" || true ++ echo \\"Chain neutron-1 setup completed\\" ++ ++ echo \\"Setting up keys for cosmoshub-4...\\" ++ # Keys will be managed through environment variables for neutron-query-relayer ++ ++ DENOM=\\"uatom\\" ++ # For neutron-query-relayer, we need to derive the address from mnemonic ++ # This will be handled by the relayer binary itself + +- echo \\"Wait for connection id to be created\\" +- bash -e /scripts/ibc-connection.sh \\\\ +- http://registry.$NAMESPACE.svc.cluster.local:8080 \\\\ +- neutron-1 \\\\ +- cosmoshub-4", ++ echo \\"Chain cosmoshub-4 setup completed\\"", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { ++ "name": "CONFIG_PATH", ++ "value": "/configs/config.json", ++ }, ++ Object { + "name": "KEYS_CONFIG", + "value": "/keys/keys.json", ++ }, ++ Object { ++ "name": "LOG_LEVEL", ++ "value": "info", ++ }, ++ Object { ++ "name": "METRICS_PORT", ++ "value": "9090", + }, + Object { + "name": "NAMESPACE", +@@ -257,17 +178,27 @@ + }, + }, + Object { +- "name": "RELAYER_DIR", +- "value": "/root/.neutrond", ++ "name": "RELAYER_INDEX", ++ "value": "\${HOSTNAME##*-}", + }, + Object { +- "name": "RELAYER_INDEX", +- "value": "1", ++ "name": "STORAGE_PATH", ++ "value": "./storage", + }, + ], +- "image": "ghcr.io/cosmology-tech/starship/neutron:v3.0.5", ++ "image": "ghcr.io/cosmology-tech/starship/neutron-query-relayer:v0.2.0", + "imagePullPolicy": "IfNotPresent", + "name": "init-relayer", ++ "resources": Object { ++ "limits": Object { ++ "cpu": "0.2", ++ "memory": "200M", ++ }, ++ "requests": Object { ++ "cpu": "0.2", ++ "memory": "200M", ++ }, ++ }, + "volumeMounts": Array [ + Object { + "mountPath": "/keys", +@@ -296,6 +227,7 @@ + echo \\"Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -318,16 +250,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for noble that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- StatefulSet/noble-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "noble-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "noble-1-genesis", ++ "app.kubernetes.io/part-of": "noble-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "noble-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "noble", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "noble-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "noble", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "noble-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "noble", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "noble-1-genesis", + "app.kubernetes.io/rawname": "noble-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "noble-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-noble-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -87,171 +87,6 @@ + + echo \\"$json\\" | jq -r .result + exit 0", +- "create-genesis.sh": "#!/bin/bash +- +- set -eux +- +- 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}\\" +- +- # 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, if not, set CHAIN_GENESIS_CMD to empty +- CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q \\"genesis-related subcommands\\" && echo \\"genesis\\" || echo \\"\\") +- +- CHAIN_INIT_ID=\\"$CHAIN_ID\\" +- if [ \\"$CHAIN_BIN\\" == \\"osmosisd\\" ]; then +- CHAIN_INIT_ID=\\"test-1\\" +- fi +- jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover +- sed -i -e \\"s/$CHAIN_INIT_ID/$CHAIN_ID/g\\" $CHAIN_DIR/config/genesis.json +- +- # Add genesis keys to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) +- jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" +- +- # Add faucet key to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) +- jq -r \\".faucet[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" +- +- # Add test keys to the keyring and self delegate initial coins +- 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\\" +- +- # 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 +- # Add relayer key and delegate tokens +- RELAYER_KEY_NAME=\\"$(jq -r \\".relayers[$i].name\\" $KEYS_CONFIG)\\" +- echo \\"Adding relayer key.... $RELAYER_KEY_NAME\\" +- jq -r \\".relayers[$i].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" +- # Add relayer-cli key and delegate tokens +- RELAYER_CLI_KEY_NAME=\\"$(jq -r \\".relayers_cli[$i].name\\" $KEYS_CONFIG)\\" +- echo \\"Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME\\" +- jq -r \\".relayers_cli[$i].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" +- done +- 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 +- ## Add validators key and delegate tokens +- 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\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" +- done +- fi +- +- echo \\"Creating gentx...\\" +- COIN=$(echo $COINS | cut -d ',' -f1) +- AMT=$(echo \${COIN//[!0-9]/} | sed -e \\"s/0000$//\\") +- $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) $AMT$DENOM --keyring-backend=\\"test\\" --chain-id $CHAIN_ID +- +- echo \\"Output of gentx\\" +- cat $CHAIN_DIR/config/gentx/*.json | jq +- +- echo \\"Running collect-gentxs\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +- +- ls $CHAIN_DIR/config", + "create-ics.sh": "#!/bin/bash + + set -euxo pipefail +@@ -505,6 +340,171 @@ + echo \\"cosmos_sdk_version is less than v0.50.0, running create-validator tx with old format\\" + cosmos-sdk-version-default + fi", ++ "createGenesis.sh": "#!/bin/bash ++ ++ set -eux ++ ++ 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}\\" ++ ++ # 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, if not, set CHAIN_GENESIS_CMD to empty ++ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q \\"genesis-related subcommands\\" && echo \\"genesis\\" || echo \\"\\") ++ ++ CHAIN_INIT_ID=\\"$CHAIN_ID\\" ++ if [ \\"$CHAIN_BIN\\" == \\"osmosisd\\" ]; then ++ CHAIN_INIT_ID=\\"test-1\\" ++ fi ++ jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover ++ sed -i -e \\"s/$CHAIN_INIT_ID/$CHAIN_ID/g\\" $CHAIN_DIR/config/genesis.json ++ ++ # Add genesis keys to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) ++ jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" ++ ++ # Add faucet key to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) ++ jq -r \\".faucet[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" ++ ++ # Add test keys to the keyring and self delegate initial coins ++ 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\\" ++ ++ # 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 ++ # Add relayer key and delegate tokens ++ RELAYER_KEY_NAME=\\"$(jq -r \\".relayers[$i].name\\" $KEYS_CONFIG)\\" ++ echo \\"Adding relayer key.... $RELAYER_KEY_NAME\\" ++ jq -r \\".relayers[$i].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_KEY_NAME --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_KEY_NAME --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" ++ # Add relayer-cli key and delegate tokens ++ RELAYER_CLI_KEY_NAME=\\"$(jq -r \\".relayers_cli[$i].name\\" $KEYS_CONFIG)\\" ++ echo \\"Adding relayer-cli key.... $RELAYER_CLI_KEY_NAME\\" ++ jq -r \\".relayers_cli[$i].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $RELAYER_CLI_KEY_NAME --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $RELAYER_CLI_KEY_NAME --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" ++ done ++ 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 ++ ## Add validators key and delegate tokens ++ 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\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $VAL_KEY_NAME --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" ++ done ++ fi ++ ++ echo \\"Creating gentx...\\" ++ COIN=$(echo $COINS | cut -d ',' -f1) ++ AMT=$(echo \${COIN//[!0-9]/} | sed -e \\"s/0000$//\\") ++ $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) $AMT$DENOM --keyring-backend=\\"test\\" --chain-id $CHAIN_ID ++ ++ echo \\"Output of gentx\\" ++ cat $CHAIN_DIR/config/gentx/*.json | jq ++ ++ echo \\"Running collect-gentxs\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs ++ ++ ls $CHAIN_DIR/config", + "ibc-connection.sh": "#!/bin/bash + + REGISTRY_URL=\\"$1\\" +@@ -633,7 +633,7 @@ + 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", +- "update-genesis.sh": "#!/bin/bash ++ "updateGenesis.sh": "#!/bin/bash + + DENOM=\\"\${DENOM:=uusdc}\\" + CHAIN_BIN=\\"\${CHAIN_BIN:=nobled}\\" +@@ -914,6 +914,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-noble-1", ++ "app.kubernetes.io/part-of": "noble-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "noble-1", ++ "starship.io/chain-name": "noble", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-noble-1", + }, + } + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/noble-1", +- "name": "registry-configs-noble-1", ++ "mountPath": "/chains/noble-1", ++ "name": "registry-noble-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-noble-1", + }, +- "name": "registry-configs-noble-1", ++ "name": "registry-noble-1", + }, + ], + }, + +--- ConfigMap/registry-noble-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uusdc\\", +- \\"coingecko_id\\": \\"usdc\\", ++ \\"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\\", +@@ -18,21 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"USD Coin\\", +- \\"display\\": \\"usdc\\", ++ \\"coingecko_id\\": \\"usdc\\", + \\"keywords\\": [ + \\"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\\" +- }, +- \\"name\\": \\"USDC\\", +- \\"symbol\\": \\"USDC\\" ++ ] + }, + { + \\"base\\": \\"ustake\\", +- \\"coingecko_id\\": \\"stake\\", ++ \\"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\\", +@@ -43,17 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"Permissioned stake token for noble\\", +- \\"display\\": \\"stake\\", ++ \\"coingecko_id\\": \\"stake\\", + \\"keywords\\": [ + \\"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\\" +- }, +- \\"name\\": \\"Stake\\", +- \\"symbol\\": \\"STAKE\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-noble-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-noble-1", + }, + } + +--- ConfigMap/hermes-noble-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"noble-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"noble-1-cli\\" +- rpc_addr = \\"http://noble-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://noble-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://noble-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://noble-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"noble\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uusdc\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"uusdc\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"noble-1\\" + type = \\"CosmosSdk\\" + key_name = \\"noble-1\\" +- rpc_addr = \\"http://noble-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://noble-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://noble-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://noble-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://noble-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"noble\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uusdc\\" } +- +- + + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-noble-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-noble-cosmos", + }, + } + +--- StatefulSet/hermes-noble-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-noble-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-noble-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-noble-cosmos", + "app.kubernetes.io/rawname": "noble-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for noble-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"noble-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"noble-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-noble-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"noble-cosmos\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for noble-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain noble-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://noble-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for one-chain that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- ConfigMap/patch-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -3,6 +3,11 @@ + "data": Object { + "genesis.json": "{ + \\"app_state\\": { ++ \\"staking\\": { ++ \\"params\\": { ++ \\"unbonding_time\\": \\"5s\\" ++ } ++ }, + \\"gamm\\": { + \\"params\\": { + \\"pool_creation_fee\\": [ +@@ -11,11 +16,6 @@ + \\"denom\\": \\"uosmo\\" + } + ] +- } +- }, +- \\"staking\\": { +- \\"params\\": { +- \\"unbonding_time\\": \\"5s\\" + } + } + } +@@ -23,6 +23,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis-patch", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "patch-osmosis-1", + }, + } + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,7 +325,9 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -389,11 +409,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -420,20 +440,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -470,8 +488,10 @@ + + echo \\"Add custom accounts and balances\\" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q \\"genesis-related subcommands\\" && echo \\"genesis\\" || echo \\"\\") ++ + echo \\"Adding balance to osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5\\" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo1e9ucjn5fjmetky5wezzcsccp7hqcwzrrhthpf5 2000000000000uosmo --keyring-backend=\\"test\\" ++ + echo \\"Adding balance to osmo10eykchznjdn8jdlwaj5v9wvlmdsp6kxx7u0hv9\\" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account osmo10eykchznjdn8jdlwaj5v9wvlmdsp6kxx7u0hv9 2000000000000uosmo --keyring-backend=\\"test\\"", + ], +@@ -562,11 +582,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + }" +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for one-chain-cometmock that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-cometmock --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-cometmock", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "cometmock", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-cometmock", + }, + "spec": Object { +@@ -27,7 +39,7 @@ + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/rawname": "cosmoshub-4-cometmock", + "app.kubernetes.io/type": "cometmock", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -38,6 +50,7 @@ + "-c", + "NODE_LISTEN_ADDR_STR=\\"tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658\\" + NODE_HOME_STR=\\"/chain/genesis\\" ++  + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc", + ], + "env": Array [ +@@ -107,11 +120,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + }, +@@ -145,7 +158,7 @@ + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{\\"height\\":\\"0\\",\\"round\\":0,\\"step\\":0}' > /chain/genesis/data/priv_validator_state.json +- ++  + echo \\"copy cometmock binary to shared dir\\" + cp /usr/local/bin/cometmock /chain/cometmock", + ], +@@ -236,11 +249,11 @@ + "name": "init-comet", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + }, +@@ -268,6 +281,7 @@ + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys\\" + sleep 10; + done ++  + echo \\"Ready to start\\" + exit 0", + ], +@@ -290,11 +304,11 @@ + "name": "init-wait", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,8 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" + START_ARGS=\\"--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658\\" ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -165,11 +182,11 @@ + "name": "validator", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + }, +@@ -198,6 +215,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -239,7 +257,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -279,11 +297,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + }, +@@ -416,11 +434,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + "requests": Object { +- "cpu": 0.3, ++ "cpu": "0.3", + "memory": "300M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + }" +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for one-chain-cosmjs-faucet that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -191,7 +204,7 @@ + "value": "m/44'/118'/0'/0/0", + }, + ], +- "image": "ghcr.io/cosmology-tech/starship/cosmjs-faucet:v0.31.1", ++ "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "faucet", + "readinessProbe": Object { +@@ -204,11 +217,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -227,7 +240,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -290,11 +308,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -323,6 +341,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -364,7 +383,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -404,11 +423,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -541,11 +560,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + }" +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for one-chain-custom-scripts that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -87,53 +87,6 @@ + + echo \\"$json\\" | jq -r .result + exit 0", +- "create-genesis.sh": "#!/bin/bash +- +- DENOM=\\"\${DENOM:=uosmo}\\" +- COINS=\\"\${COINS:=100000000000000000uosmo}\\" +- CHAIN_ID=\\"\${CHAIN_ID:=osmosis}\\" +- CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" +- CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.osmosisd}\\" +- KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" +- +- set -eu +- +- # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty +- CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q \\"genesis-related subcommands\\" && echo \\"genesis\\" || echo \\"\\") +- +- CHAIN_INIT_ID=\\"$CHAIN_ID\\" +- if [ \\"$CHAIN_BIN\\" == \\"osmosisd\\" ]; then +- CHAIN_INIT_ID=\\"test-1\\" +- fi +- jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover +- sed -i -e \\"s/$CHAIN_INIT_ID/$CHAIN_ID/g\\" $CHAIN_DIR/config/genesis.json +- +- # Add genesis keys to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) +- jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" +- +- +- # Add faucet key to the keyring and self delegate initial coins +- echo \\"Adding key....\\" $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) +- jq -r \\".faucet[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" +- +- # Add relayer key and delegate tokens +- echo \\"Adding key....\\" $(jq -r \\".relayers[0].name\\" $KEYS_CONFIG) +- jq -r \\".relayers[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".relayers[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" +- +- echo \\"Creating gentx...\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) 5000000000$DENOM --keyring-backend=\\"test\\" --chain-id $CHAIN_ID +- +- echo \\"Output of gentx\\" +- cat $CHAIN_DIR/config/gentx/*.json | jq +- +- echo \\"Running collect-gentxs\\" +- $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs +- +- ls $CHAIN_DIR/config", + "create-ics.sh": "#!/bin/bash + + set -euxo pipefail +@@ -276,8 +229,55 @@ + } + + main", +- "create-validator.sh": "#!/bin/bash ++ "createGenesis.sh": "#!/bin/bash ++ ++ DENOM=\\"\${DENOM:=uosmo}\\" ++ COINS=\\"\${COINS:=100000000000000000uosmo}\\" ++ CHAIN_ID=\\"\${CHAIN_ID:=osmosis}\\" ++ CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" ++ CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.osmosisd}\\" ++ KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" ++ ++ set -eu ++ ++ # check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty ++ CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q \\"genesis-related subcommands\\" && echo \\"genesis\\" || echo \\"\\") ++ ++ CHAIN_INIT_ID=\\"$CHAIN_ID\\" ++ if [ \\"$CHAIN_BIN\\" == \\"osmosisd\\" ]; then ++ CHAIN_INIT_ID=\\"test-1\\" ++ fi ++ jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_INIT_ID --recover ++ sed -i -e \\"s/$CHAIN_INIT_ID/$CHAIN_ID/g\\" $CHAIN_DIR/config/genesis.json ++ ++ # Add genesis keys to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) ++ jq -r \\".genesis[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" ++ ++ ++ # Add faucet key to the keyring and self delegate initial coins ++ echo \\"Adding key....\\" $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) ++ jq -r \\".faucet[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".faucet[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" ++ ++ # Add relayer key and delegate tokens ++ echo \\"Adding key....\\" $(jq -r \\".relayers[0].name\\" $KEYS_CONFIG) ++ jq -r \\".relayers[0].mnemonic\\" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r \\".relayers[0].name\\" $KEYS_CONFIG) --recover --keyring-backend=\\"test\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend=\\"test\\") $COINS --keyring-backend=\\"test\\" ++ ++ echo \\"Creating gentx...\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r \\".genesis[0].name\\" $KEYS_CONFIG) 5000000000$DENOM --keyring-backend=\\"test\\" --chain-id $CHAIN_ID ++ ++ echo \\"Output of gentx\\" ++ cat $CHAIN_DIR/config/gentx/*.json | jq + ++ echo \\"Running collect-gentxs\\" ++ $CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs ++ ++ ls $CHAIN_DIR/config", ++ "createValidator.sh": "#!/bin/bash ++ + DENOM=\\"\${DENOM:=uosmo}\\" + CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" + KEYS_CONFIG=\\"\${KEYS_CONFIG:=configs/keys.json}\\" +@@ -395,7 +395,7 @@ + ((max_tries--)) + sleep 10 + done", +- "transfer-tokens.sh": "#!/bin/bash ++ "transferTokens.sh": "#!/bin/bash + + ADDRESS=\\"$1\\" + DENOM=\\"$2\\" +@@ -424,7 +424,7 @@ + ((max_tries--)) + sleep 2 + done", +- "update-config.sh": "#!/bin/bash ++ "updateConfig.sh": "#!/bin/bash + + CHAIN_ID=\\"\${CHAIN_ID:=osmosis}\\" + CHAIN_DIR=\\"\${CHAIN_DIR:=$HOME/.osmosisd}\\" +@@ -496,7 +496,7 @@ + fi + + $CHAIN_BIN tendermint show-node-id", +- "update-genesis.sh": "#!/bin/bash ++ "updateGenesis.sh": "#!/bin/bash + + DENOM=\\"\${DENOM:=uosmo}\\" + CHAIN_BIN=\\"\${CHAIN_BIN:=osmosisd}\\" +@@ -534,6 +534,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + }" +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for one-cosmoshub-cosmjs-faucet that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -191,7 +204,7 @@ + "value": "m/44'/118'/0'/0/0", + }, + ], +- "image": "ghcr.io/cosmology-tech/starship/cosmjs-faucet:v0.31.1", ++ "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "faucet", + "readinessProbe": Object { +@@ -204,11 +217,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -227,7 +240,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -290,11 +308,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -323,6 +341,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -364,7 +383,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -404,11 +423,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -541,11 +560,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + ], + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for one-custom-chain that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/custom-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "custom-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "custom-1-genesis", ++ "app.kubernetes.io/part-of": "custom-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "custom-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "custom", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "custom-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "custom", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "custom-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "custom", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "custom-1-genesis", + "app.kubernetes.io/rawname": "custom-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "custom-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-custom-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-custom-1", ++ "app.kubernetes.io/part-of": "custom-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "custom-1", ++ "starship.io/chain-name": "custom", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-custom-1", + }, + } + +--- ConfigMap/registry-custom-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -31,7 +31,7 @@ + \\"status\\": \\"live\\", + \\"network_type\\": \\"devnet\\", + \\"chain_id\\": \\"custom-1\\", +- \\"pretty_name\\": \\" Devnet\\", ++ \\"pretty_name\\": \\"undefined Devnet\\", + \\"bech32_prefix\\": \\"osmo\\", + \\"daemon_name\\": \\"osmosisd\\", + \\"node_home\\": \\"/root/.osmosisd\\", +@@ -78,6 +78,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-custom-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-custom-1", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -66,7 +71,7 @@ + }, + Object { + "name": "REGISTRY_CHAIN_CLIENT_NAMES", +- "value": "custom-1", ++ "value": "custom", + }, + Object { + "name": "REGISTRY_CHAIN_CLIENT_RPCS", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/custom-1", +- "name": "registry-configs-custom-1", ++ "mountPath": "/chains/custom-1", ++ "name": "registry-custom-1", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-custom-1", + }, +- "name": "registry-configs-custom-1", ++ "name": "registry-custom-1", + }, + ], + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for simapp that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "Always", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/simapp", +- "name": "registry-configs-simapp", ++ "mountPath": "/chains/simapp", ++ "name": "registry-simapp", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "Always", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-simapp", + }, +- "name": "registry-configs-simapp", ++ "name": "registry-simapp", + }, + ], + }, + +--- ConfigMap/registry-simapp --- +- Expected (reference) ++ Generated (actual) + +@@ -78,6 +78,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-simapp", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-simapp", + }, + } + +--- StatefulSet/simapp-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "simapp", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "simapp-genesis", ++ "app.kubernetes.io/part-of": "simapp", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "simapp-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "simapp", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "simapp-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "simapp", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "simapp-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "simapp", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "simapp-genesis", + "app.kubernetes.io/rawname": "simapp", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "simapp", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -184,11 +197,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "200M", + }, + }, +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, + +--- ConfigMap/setup-scripts-simapp --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-simapp", ++ "app.kubernetes.io/part-of": "simapp", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "simapp", ++ "starship.io/chain-name": "simapp", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-simapp", + }, + } + +--- Service/simapp-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/simapp-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "simapp", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "simapp-validator", ++ "app.kubernetes.io/part-of": "simapp", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "simapp-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "simapp", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "simapp-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "simapp", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "simapp-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "simapp", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "simapp-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "simapp", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "Always", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for three-chain that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- StatefulSet/juno-2-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "juno-2", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "juno-2-genesis", ++ "app.kubernetes.io/part-of": "juno-2", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "juno-2-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "juno", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "juno-2-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "juno", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "juno-2-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "juno", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "juno-2-genesis", + "app.kubernetes.io/rawname": "juno-2", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "juno-2", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-juno-2 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-juno-2", ++ "app.kubernetes.io/part-of": "juno-2", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "juno-2", ++ "starship.io/chain-name": "juno", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-juno-2", + }, + } + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,26 +100,26 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/juno-2", +- "name": "registry-configs-juno-2", ++ "mountPath": "/chains/juno-2", ++ "name": "registry-juno-2", + }, + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -130,11 +134,13 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: juno-2. Waiting for it to start...\\" + echo \\"Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -157,16 +163,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -177,19 +183,19 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-juno-2", + }, +- "name": "registry-configs-juno-2", ++ "name": "registry-juno-2", + }, + Object { + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-juno-2 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"ujuno\\", +- \\"coingecko_id\\": \\"juno-network\\", ++ \\"description\\": \\"The native token of JUNO Chain\\", ++ \\"name\\": \\"Juno\\", ++ \\"display\\": \\"juno\\", ++ \\"symbol\\": \\"JUNO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"ujuno\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of JUNO Chain\\", +- \\"display\\": \\"juno\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg\\" +- }, +- \\"name\\": \\"Juno\\", +- \\"symbol\\": \\"JUNO\\" ++ \\"coingecko_id\\": \\"juno-network\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-juno-2", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-juno-2", + }, + } + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + } + +--- ConfigMap/hermes-relayer --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 + + +- + [[chains]] + id = \\"osmosis-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"osmosis-1-cli\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uosmo\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"uosmo\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,17 +80,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" } ++ gas_price = { price = 1.25, denom = \\"uatom\\" } + +- +- + [[chains]] + id = \\"juno-2\\" ++ type = \\"CosmosSdk\\" + key_name = \\"juno-2-cli\\" +- rpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://juno-2-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"juno\\" + default_gas = 500000000 +@@ -153,96 +104,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"ujuno\\" }", ++ gas_price = { price = 1.25, denom = \\"ujuno\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 + + +- + [[chains]] + id = \\"osmosis-1\\" + type = \\"CosmosSdk\\" + key_name = \\"osmosis-1\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -258,17 +161,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uosmo\\" } +- + +- + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -284,17 +185,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uatom\\" } +- +- + + [[chains]] + id = \\"juno-2\\" + type = \\"CosmosSdk\\" + key_name = \\"juno-2\\" +- rpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://juno-2-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://juno-2-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://juno-2-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://juno-2-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"juno\\" + default_gas = 500000000 +@@ -313,6 +212,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-relayer", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-relayer", + }, + } + +--- StatefulSet/hermes-relayer --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-relayer", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-relayer", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-relayer", + "app.kubernetes.io/rawname": "relayer", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "# Install exposer binary from the image + cp /bin/exposer /exposer/exposer + chmod +x /exposer/exposer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml ++ ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for relayer...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"osmosis-1\\",\\"cosmoshub-4\\",\\"juno-2\\"],\\"channels\\":[{\\"a-chain\\":\\"osmosis-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true},{\\"a-chain\\":\\"osmosis-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"juno-2\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true},{\\"a-chain\\":\\"juno-2\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-relayer\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"relayer\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for osmosis-1...\\" + hermes keys add \\\\ +@@ -271,24 +290,31 @@ + $DENOM \\\\ + http://juno-2-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"false\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain osmosis-1 \\\\ + --a-port transfer \\\\ + --b-port transfer ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain juno-2 \\\\ + --a-chain osmosis-1 \\\\ + --a-port transfer \\\\ + --b-port transfer ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain juno-2 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -309,7 +335,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -317,12 +343,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -353,11 +379,13 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: juno-2. Waiting for it to start...\\" + echo \\"Checking: http://juno-2-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -380,16 +408,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for two-chain that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -251,7 +270,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- Service/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -144,8 +157,10 @@ + "-c", + "set -eux + START_ARGS=\\"\\" ++ + + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -287,6 +302,7 @@ + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" + ++ + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh + +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- ConfigMap/explorer --- +- Expected (reference) ++ Generated (actual) + +@@ -6,12 +6,11 @@ + \\"coingecko\\": \\"cosmoshub\\", + \\"api\\": \\"http://localhost:1317\\", + \\"rpc\\": [ +- \\"http://localhost:26657\\", + \\"http://localhost:26657\\" + ], + \\"snapshot_provider\\": \\"\\", + \\"sdk_version\\": \\"0.45.6\\", +- \\"coin_type\\": \\"118\\", ++ \\"coin_type\\": 118, + \\"min_tx_fee\\": \\"3000\\", + \\"addr_prefix\\": \\"cosmos\\", + \\"logo\\": \\"\\", +@@ -30,12 +29,11 @@ + \\"coingecko\\": \\"osmosis\\", + \\"api\\": \\"http://localhost:1313\\", + \\"rpc\\": [ +- \\"http://localhost:26653\\", + \\"http://localhost:26653\\" + ], + \\"snapshot_provider\\": \\"\\", + \\"sdk_version\\": \\"0.45.6\\", +- \\"coin_type\\": \\"118\\", ++ \\"coin_type\\": 118, + \\"min_tx_fee\\": \\"3000\\", + \\"addr_prefix\\": \\"osmo\\", + \\"logo\\": \\"\\", +@@ -52,6 +50,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "explorer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "explorer", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "explorer", + }, + } + +--- Deployment/explorer --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "explorer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "explorer", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "explorer", + }, + "spec": Object { +@@ -26,34 +34,28 @@ + "app.kubernetes.io/name": "explorer", + "app.kubernetes.io/rawname": "explorer", + "app.kubernetes.io/type": "ping-pub", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", +- "yarn serve --host 0.0.0.0 --port 8080", ++ "env": Array [ ++ Object { ++ "name": "CHAINS_CONFIG_PATH", ++ "value": "/explorer", ++ }, + ], + "image": "ghcr.io/cosmology-tech/starship/ping-pub:6b7b0d096946b6bcd75d15350c7345da0d4576db", + "imagePullPolicy": "IfNotPresent", +- "livenessProbe": Object { +- "initialDelaySeconds": 60, +- "periodSeconds": 30, +- "tcpSocket": Object { +- "port": 8080, +- }, +- }, + "name": "explorer", +- "readinessProbe": Object { +- "initialDelaySeconds": 60, +- "periodSeconds": 30, +- "tcpSocket": Object { +- "port": 8080, +- }, ++ "ports": Array [ ++ Object { ++ "containerPort": 8080, ++ "name": "http", ++ "protocol": "TCP", + }, ++ ], + "resources": Object { + "limits": Object { + "cpu": 1, +@@ -66,8 +68,8 @@ + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/home/explorer/chains/mainnet", +- "name": "explorer-configs", ++ "mountPath": "/explorer", ++ "name": "explorer-config", + }, + ], + }, +@@ -77,7 +79,7 @@ + "configMap": Object { + "name": "explorer", + }, +- "name": "explorer-configs", ++ "name": "explorer-config", + }, + ], + }, + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Service/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -73,21 +73,29 @@ + \\"consensus\\": { + \\"type\\": \\"tendermint\\" + } ++ }, ++ \\"peers\\": { ++ \\"seeds\\": [], ++ \\"persistent_peers\\": [] + }, + \\"explorers\\": [ + { + \\"kind\\": \\"ping-pub\\", + \\"url\\": \\"http://localhost:8080\\" + } +- ], +- \\"peers\\": { +- \\"seeds\\": [], +- \\"persistent_peers\\": [] +- } ++ ] + }", + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -101,21 +101,29 @@ + \\"consensus\\": { + \\"type\\": \\"tendermint\\" + } ++ }, ++ \\"peers\\": { ++ \\"seeds\\": [], ++ \\"persistent_peers\\": [] + }, + \\"explorers\\": [ + { + \\"kind\\": \\"ping-pub\\", + \\"url\\": \\"http://localhost:8080\\" + } +- ], +- \\"peers\\": { +- \\"seeds\\": [], +- \\"persistent_peers\\": [] +- } ++ ] + }", + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + } + +--- ConfigMap/hermes-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = false +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 + + +- + [[chains]] + id = \\"osmosis-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"osmosis-1-cli\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" + event_source = { mode = 'pull', interval = '500ms' } +- # Experimental: Whether or not the full node is trusted. + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uosmo\\" } +- ++ gas_price = { price = 1.25, denom = \\"uosmo\\" } + +- + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" + event_source = { mode = 'pull', interval = '500ms' } +- # Experimental: Whether or not the full node is trusted. + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = false +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"osmosis-1\\" + type = \\"CosmosSdk\\" + key_name = \\"osmosis-1\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" + event_source = { mode = 'pull', interval = '500ms' } +- # Experimental: Whether or not the full node is trusted. + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uosmo\\" } +- +- + + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" + event_source = { mode = 'pull', interval = '500ms' } +- # Experimental: Whether or not the full node is trusted. + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmos-cosmos", + }, + } + +--- StatefulSet/hermes-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmos-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-osmos-cosmos", + "app.kubernetes.io/rawname": "osmos-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for osmos-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"osmosis-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"osmosis-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"pull\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":false,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-osmos-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/hyperweb-io/starship/hermes:1.12.0\\",\\"name\\":\\"osmos-cosmos\\",\\"ports\\":{\\"exposer\\":3002,\\"rest\\":3000},\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for osmosis-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"false\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain osmosis-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/hermes:1.12.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for two-chain-cometmock that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-cometmock --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-cometmock", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "cometmock", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-cometmock", + }, + "spec": Object { +@@ -27,7 +39,7 @@ + "app.kubernetes.io/name": "cosmoshub-4-cometmock", + "app.kubernetes.io/rawname": "cosmoshub-4-cometmock", + "app.kubernetes.io/type": "cometmock", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -38,6 +50,7 @@ + "-c", + "NODE_LISTEN_ADDR_STR=\\"tcp://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26658\\" + NODE_HOME_STR=\\"/chain/genesis\\" ++  + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc", + ], + "env": Array [ +@@ -107,11 +120,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -145,7 +158,7 @@ + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{\\"height\\":\\"0\\",\\"round\\":0,\\"step\\":0}' > /chain/genesis/data/priv_validator_state.json +- ++  + echo \\"copy cometmock binary to shared dir\\" + cp /usr/local/bin/cometmock /chain/cometmock", + ], +@@ -236,11 +249,11 @@ + "name": "init-comet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -268,6 +281,7 @@ + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys\\" + sleep 10; + done ++  + echo \\"Ready to start\\" + exit 0", + ], +@@ -290,11 +304,11 @@ + "name": "init-wait", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,8 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" + START_ARGS=\\"--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658\\" ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -165,11 +182,11 @@ + "name": "validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -198,6 +215,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -239,7 +257,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -279,11 +297,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -416,11 +434,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- StatefulSet/osmosis-1-cometmock --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-cometmock", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "cometmock", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-cometmock", + }, + "spec": Object { +@@ -27,7 +39,7 @@ + "app.kubernetes.io/name": "osmosis-1-cometmock", + "app.kubernetes.io/rawname": "osmosis-1-cometmock", + "app.kubernetes.io/type": "cometmock", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -38,11 +50,12 @@ + "-c", + "NODE_LISTEN_ADDR_STR=\\"tcp://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26658\\" + NODE_HOME_STR=\\"/chain/genesis\\" +- for i in $(seq 0 0); +- do ++  ++ for i in $(seq 0 0); do + NODE_LISTEN_ADDR_STR=\\"tcp://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:26658,$NODE_LISTEN_ADDR_STR\\" + NODE_HOME_STR=\\"/chain/validator-$i,$NODE_HOME_STR\\" + done ++  + /chain/cometmock --block-time=800 $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc", + ], + "env": Array [ +@@ -111,8 +124,8 @@ + "set -eux + + sleep 10 +- for i in $(seq 0 0); +- do ++ ++ for i in $(seq 0 0); do + $CHAIN_BIN keys list --keyring-backend test --home /chain/validator-$i --output json | jq + VAL_KEY_NAME=\\"$(jq -r '.validators[0].name' $KEYS_CONFIG)-$i\\" + echo \\"Create validator.... $VAL_KEY_NAME\\" +@@ -137,11 +150,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -175,15 +188,15 @@ + ## fetch priv_validator and priv_validator_state of all validators + curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json + echo '{\\"height\\":\\"0\\",\\"round\\":0,\\"step\\":0}' > /chain/genesis/data/priv_validator_state.json +- for i in $(seq 0 0); +- do ++  ++ for i in $(seq 0 0); do + mkdir -p /chain/validator-$i/config + mkdir -p /chain/validator-$i/data + curl http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_key -o /chain/validator-$i/config/node_key.json + curl http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/validator-$i/config/priv_validator_key.json + echo '{\\"height\\":\\"0\\",\\"round\\":0,\\"step\\":0}' > /chain/validator-$i/data/priv_validator_state.json + done +- ++  + echo \\"copy cometmock binary to shared dir\\" + cp /usr/local/bin/cometmock /chain/cometmock", + ], +@@ -274,11 +287,11 @@ + "name": "init-comet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -301,8 +314,7 @@ + "command": Array [ + "bash", + "-c", +- "for i in $(seq 0 0); +- do ++ "for i in $(seq 0 0); do + mkdir -p /chain/validator-$i/config /chain/validator-$i/data + VAL_KEY_NAME=\\"$(jq -r '.validators[0].name' $KEYS_CONFIG)-$i\\" + echo \\"Adding validator key.... $VAL_KEY_NAME\\" +@@ -368,11 +380,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -400,14 +412,15 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys\\" + sleep 10; + done +- for i in $(seq 0 0); +- do ++  ++ for i in $(seq 0 0); do + while [ $(curl -sw '%{http_code}' http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo \\"Validator does not seem to be ready for: osmosis-1 validator-$i. Waiting for it to start...\\" + echo \\"Checking: http://osmosis-1-validator-$i.osmosis-1-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys\\" + sleep 10; + done + done ++  + echo \\"Ready to start\\" + exit 0", + ], +@@ -430,11 +443,11 @@ + "name": "init-wait", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,8 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" + START_ARGS=\\"--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658\\" ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -165,11 +182,11 @@ + "name": "validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -198,6 +215,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -239,7 +257,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -279,11 +297,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -416,11 +434,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Service/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -147,6 +160,7 @@ + START_ARGS=\\"--grpc-web.enable=false --transport=grpc --with-tendermint=false --address tcp://0.0.0.0:26658\\" + + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -212,11 +226,11 @@ + "name": "validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -244,6 +258,7 @@ + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" + ++ + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh + +@@ -308,7 +323,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -356,11 +371,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -385,6 +400,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -457,7 +473,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -505,11 +521,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -554,16 +570,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for two-chain-cosmos that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- Service/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Service/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + } + +--- ConfigMap/hermes-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'error' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"error\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = false +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 + + +- + [[chains]] + id = \\"osmosis-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"osmosis-1-cli\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" + event_source = { mode = 'pull', interval = '500ms' } +- # Experimental: Whether or not the full node is trusted. + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uosmo\\" } +- ++ gas_price = { price = 1.25, denom = \\"uosmo\\" } + +- + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" + event_source = { mode = 'pull', interval = '500ms' } +- # Experimental: Whether or not the full node is trusted. + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'error' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"error\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = false +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"osmosis-1\\" + type = \\"CosmosSdk\\" + key_name = \\"osmosis-1\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" + event_source = { mode = 'pull', interval = '500ms' } +- # Experimental: Whether or not the full node is trusted. + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uosmo\\" } +- +- + + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" + event_source = { mode = 'pull', interval = '500ms' } +- # Experimental: Whether or not the full node is trusted. + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmos-cosmos", + }, + } + +--- StatefulSet/hermes-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmos-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-osmos-cosmos", + "app.kubernetes.io/rawname": "osmos-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for osmos-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"osmosis-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"osmosis-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"pull\\"},\\"global\\":{\\"log_level\\":\\"error\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":false,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-osmos-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"osmos-cosmos\\",\\"ports\\":{\\"exposer\\":3002,\\"rest\\":3000},\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for osmosis-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain osmosis-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for two-chain-gorelayer that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- Service/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,6 +325,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -348,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "TIME_IOTA_MS", +@@ -388,11 +407,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -415,20 +434,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -553,11 +570,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Service/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -286,6 +301,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh +@@ -351,7 +367,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -500,7 +517,7 @@ + }, + Object { + "name": "METRICS", +- "value": "", ++ "value": "false", + }, + Object { + "name": "NAMESPACE", +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -618,6 +635,10 @@ + "name": "keys", + }, + "name": "addresses", ++ }, ++ Object { ++ "emptyDir": Object {}, ++ "name": "faucet", + }, + Object { + "emptyDir": Object {}, + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + } + +--- ConfigMap/go-relayer-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -4,52 +4,77 @@ + "cosmoshub-4.json": "{ + \\"type\\": \\"cosmos\\", + \\"value\\": { +- \\"key\\": \\"default\\", ++ \\"key\\": \\"cosmoshub-4\\", + \\"chain-id\\": \\"cosmoshub-4\\", +- \\"rpc-addr\\": \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\", ++ \\"rpc-addr\\": \\"http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657\\", + \\"account-prefix\\": \\"cosmos\\", + \\"keyring-backend\\": \\"test\\", +- \\"gas-adjustment\\": 1.5, +- \\"gas-prices\\": \\"0.025uatom\\", +- \\"min-gas-amount\\": 1, +- \\"debug\\": true, ++ \\"gas-adjustment\\": 1.2, ++ \\"gas-prices\\": \\"0.01uatom\\", ++ \\"min-gas-amount\\": 0, ++ \\"debug\\": false, + \\"timeout\\": \\"20s\\", ++ \\"block-timeout\\": \\"\\", + \\"output-format\\": \\"json\\", +- \\"sign-mode\\": \\"direct\\" ++ \\"sign-mode\\": \\"direct\\", ++ \\"extra-codecs\\": [] + } + }", + "osmosis-1.json": "{ + \\"type\\": \\"cosmos\\", + \\"value\\": { +- \\"key\\": \\"default\\", ++ \\"key\\": \\"osmosis-1\\", + \\"chain-id\\": \\"osmosis-1\\", +- \\"rpc-addr\\": \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\", ++ \\"rpc-addr\\": \\"http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657\\", + \\"account-prefix\\": \\"osmo\\", + \\"keyring-backend\\": \\"test\\", +- \\"gas-adjustment\\": 1.5, +- \\"gas-prices\\": \\"0.025uosmo\\", +- \\"min-gas-amount\\": 1, +- \\"debug\\": true, ++ \\"gas-adjustment\\": 1.2, ++ \\"gas-prices\\": \\"0.01uosmo\\", ++ \\"min-gas-amount\\": 0, ++ \\"debug\\": false, + \\"timeout\\": \\"20s\\", ++ \\"block-timeout\\": \\"\\", + \\"output-format\\": \\"json\\", +- \\"sign-mode\\": \\"direct\\" ++ \\"sign-mode\\": \\"direct\\", ++ \\"extra-codecs\\": [] + } + }", + "path.json": "{ +- \\"src\\": { +- \\"chain-id\\": \\"osmosis-1\\" +- }, +- \\"dst\\": { +- \\"chain-id\\": \\"cosmoshub-4\\" +- }, +- \\"src-channel-filter\\": { +- \\"rule\\": null, +- \\"channel-list\\": [] ++ \\"paths\\": { ++ \\"path0\\": { ++ \\"src\\": { ++ \\"chain-id\\": \\"osmosis-1\\", ++ \\"client-id\\": \\"\\", ++ \\"connection-id\\": \\"\\", ++ \\"channel-id\\": \\"\\", ++ \\"port-id\\": \\"transfer\\" ++ }, ++ \\"dst\\": { ++ \\"chain-id\\": \\"cosmoshub-4\\", ++ \\"client-id\\": \\"\\", ++ \\"connection-id\\": \\"\\", ++ \\"channel-id\\": \\"\\", ++ \\"port-id\\": \\"transfer\\" ++ }, ++ \\"src-channel-filter\\": { ++ \\"rule\\": null, ++ \\"channel-list\\": [] ++ } ++ } + } + }", + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "go-relayer-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "go-relayer", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "go-relayer-osmos-cosmos", + }, + } + +--- StatefulSet/go-relayer-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "go-relayer-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "go-relayer", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "go-relayer-osmos-cosmos", + }, + "spec": Object { +@@ -29,21 +38,33 @@ + "app.kubernetes.io/name": "go-relayer-osmos-cosmos", + "app.kubernetes.io/rawname": "osmos-cosmos", + "app.kubernetes.io/type": "go-relayer", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ rly start", ++ ], + "command": Array [ + "bash", + "-c", +- "rly start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", +- "value": "/root", ++ "value": "/root/.relayer", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1", +@@ -51,12 +72,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -77,26 +98,27 @@ + ], + "initContainers": Array [ + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ ++ mkdir -p $RELAYER_DIR/config ++ cp /configs/path.json $RELAYER_DIR/config/ ++ + MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + +- rly config init + +- +- echo \\"Adding osmosis-1 chain\\" +- rly chains add --file \\"/configs/osmosis-1.json\\" osmosis-1 ++ echo \\"Setting up chain osmosis-1...\\" ++ cp /configs/osmosis-1.json $RELAYER_DIR/config/ ++ rly chains add --file /configs/osmosis-1.json osmosis-1 + +- echo \\"Restoring osmosis-1 keys\\" +- rly keys restore osmosis-1 default \\"$MNEMONIC\\" ++ echo \\"Creating key for osmosis-1...\\" ++ echo \\"$MNEMONIC\\" | rly keys restore osmosis-1 osmosis-1 --restore-key-type secp256k1 --coin-type 118 + + DENOM=\\"uosmo\\" +- RLY_ADDR=$(rly address \\"osmosis-1\\" | awk 'END{print}') +- echo \\"Relayer address $RLY_ADDR on osmosis-1 chain with denom $DENOM\\" ++ RLY_ADDR=$(rly keys show osmosis-1 osmosis-1) + + echo \\"Transfer tokens to address $RLY_ADDR\\" + bash -e /scripts/transfer-tokens.sh \\\\ +@@ -105,16 +127,15 @@ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true + ++ echo \\"Setting up chain cosmoshub-4...\\" ++ cp /configs/cosmoshub-4.json $RELAYER_DIR/config/ ++ rly chains add --file /configs/cosmoshub-4.json cosmoshub-4 + +- echo \\"Adding cosmoshub-4 chain\\" +- rly chains add --file \\"/configs/cosmoshub-4.json\\" cosmoshub-4 +- +- echo \\"Restoring cosmoshub-4 keys\\" +- rly keys restore cosmoshub-4 default \\"$MNEMONIC\\" ++ echo \\"Creating key for cosmoshub-4...\\" ++ echo \\"$MNEMONIC\\" | rly keys restore cosmoshub-4 cosmoshub-4 --restore-key-type secp256k1 --coin-type 118 + + DENOM=\\"uatom\\" +- RLY_ADDR=$(rly address \\"cosmoshub-4\\" | awk 'END{print}') +- echo \\"Relayer address $RLY_ADDR on cosmoshub-4 chain with denom $DENOM\\" ++ RLY_ADDR=$(rly keys show cosmoshub-4 cosmoshub-4) + + echo \\"Transfer tokens to address $RLY_ADDR\\" + bash -e /scripts/transfer-tokens.sh \\\\ +@@ -123,22 +144,16 @@ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"true\\" || true + +- PATHEND=\\"osmosis-1-cosmoshub-4\\" +- echo \\"Creating path $PATHEND\\" +- rly paths add \\\\ +- osmosis-1 \\\\ +- cosmoshub-4 \\\\ +- $PATHEND \\\\ +- --file \\"/configs/path.json\\" ++ echo \\"Adding paths...\\" ++ rly paths add --file /configs/path.json + +- echo \\"Creating a channel\\" +- rly transact link $PATHEND --src-port transfer --dst-port transfer -d + +- echo \\"Creating a client on $PATHEND\\" +- rly transact clients $PATHEND +- +- echo \\"Creating a connection on $PATHEND\\" +- rly transact connection $PATHEND", ++ echo \\"Creating client, connection and channel for path0...\\" ++ rly tx link path0 --src-port transfer --dst-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -155,16 +170,25 @@ + }, + Object { + "name": "RELAYER_DIR", +- "value": "/root", ++ "value": "/root/.relayer", ++ }, ++ Object { ++ "name": "RELAYER_INDEX", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1", + "imagePullPolicy": "IfNotPresent", + "name": "init-relayer", +- "resources": null, +- "securityContext": Object { +- "allowPrivilegeEscalation": false, +- "runAsUser": 0, ++ "resources": Object { ++ "limits": Object { ++ "cpu": "0.2", ++ "memory": "200M", ++ }, ++ "requests": Object { ++ "cpu": "0.2", ++ "memory": "200M", ++ }, + }, + "volumeMounts": Array [ + Object { +@@ -194,6 +218,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -216,16 +241,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for two-chain-monitoring that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts", + }, + } + +--- StatefulSet/cosmoshub-4-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-genesis", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-genesis", + "app.kubernetes.io/rawname": "cosmoshub-4", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-cosmoshub-4", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "cosmoshub-4", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-cosmoshub-4", + }, + } + +--- Service/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/cosmoshub-4-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "cosmoshub-4", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/part-of": "cosmoshub-4", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "cosmoshub-4-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "cosmoshub", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "cosmoshub-4-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "cosmoshub", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "cosmoshub-4-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "cosmoshub-4", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -287,6 +302,7 @@ + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" + ++ + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh + +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- ConfigMap/grafana-dashboard-providers --- +- Expected (reference) ++ Generated (actual) + +@@ -2,13 +2,13 @@ + "apiVersion": "v1", + "data": Object { + "default.yaml": "{ +- \\"apiVersion\\": 1 ++ \\"apiVersion\\": 1, + \\"providers\\": [ + { +- \\"name\\": \\"chain-dashboard\\" +- \\"orgId\\": 1 +- \\"type\\": \\"file\\" +- \\"allowUiUpdates\\": true ++ \\"name\\": \\"chain-dashboard\\", ++ \\"orgId\\": 1, ++ \\"type\\": \\"file\\", ++ \\"allowUiUpdates\\": true, + \\"options\\": { + \\"path\\": \\"/var/lib/grafana/dashboards\\" + } +@@ -18,6 +18,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "grafana-dashboard-providers", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "grafana-dashboard-providers", + }, + } + +--- ConfigMap/grafana-dashboards --- +- Expected (reference) ++ Generated (actual) + +@@ -2281,6 +2281,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "grafana-dashboards", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "grafana-dashboards", + }, + } + +--- ConfigMap/grafana-datasources --- +- Expected (reference) ++ Generated (actual) + +@@ -18,6 +18,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "grafana-datasources", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "grafana-datasources", + }, + } + +--- Deployment/grafana --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "grafana", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "grafana", + }, + "spec": Object { +@@ -58,11 +66,11 @@ + ], + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, + +--- Service/grafana --- +- Expected (reference) ++ Generated (actual) + +@@ -6,6 +6,14 @@ + "prometheus.io/port": "8080", + "prometheus.io/scrape": "true", + }, ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "grafana", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "grafana", + }, + "spec": Object { + +--- ClusterRole/prometheus --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "ClusterRole", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "prometheus", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "prometheus", + }, + } + +--- ClusterRoleBinding/prometheus --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "ClusterRoleBinding", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "prometheus", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "prometheus", + }, + } + +--- ConfigMap/prometheus-config --- +- Expected (reference) ++ Generated (actual) + +@@ -44,7 +44,6 @@ + target_label: __metrics_path__ + replacement: /api/v1/nodes/\${1}/proxy/metrics + +- + - job_name: 'kubernetes-pods' + + kubernetes_sd_configs: +@@ -147,29 +146,28 @@ +  + - job_name: 'osmosis-genesis' + static_configs: +- - targets: ['osmosis-1-genesis.default.svc.cluster.local:26660'] ++ - targets: ['osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26660'] + labels: + instance: genesis + type: genesis + network: \\"osmosis\\" + - job_name: 'osmosis-validator-0' + static_configs: +- - targets: ['osmosis-1-validator-0.osmosis-1-validator.default.svc.cluster.local:26660'] ++ - targets: ['osmosis-1-validator-0.osmosis-1-validator.$(NAMESPACE).svc.cluster.local:26660'] + labels: + instance: \\"validator-0\\" + type: validator + network: \\"osmosis\\" +-  + - job_name: 'cosmoshub-genesis' + static_configs: +- - targets: ['cosmoshub-4-genesis.default.svc.cluster.local:26660'] ++ - targets: ['cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26660'] + labels: + instance: genesis + type: genesis + network: \\"cosmoshub\\" + - job_name: 'cosmoshub-validator-0' + static_configs: +- - targets: ['cosmoshub-4-validator-0.cosmoshub-4-validator.default.svc.cluster.local:26660'] ++ - targets: ['cosmoshub-4-validator-0.cosmoshub-4-validator.$(NAMESPACE).svc.cluster.local:26660'] + labels: + instance: \\"validator-0\\" + type: validator +@@ -177,6 +175,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "prometheus-config", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "prometheus-config", + }, + } + +--- Deployment/prometheus --- +- Expected (reference) ++ Generated (actual) + +@@ -43,11 +43,11 @@ + ], + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "400M", + }, + }, + +--- Service/prometheus --- +- Expected (reference) ++ Generated (actual) + +@@ -6,6 +6,14 @@ + "prometheus.io/port": "9090", + "prometheus.io/scrape": "true", + }, ++ "labels": Object { ++ "app.kubernetes.io/component": "monitoring", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "prometheus", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "prometheus", + }, + "spec": Object { + +--- StatefulSet/osmosis-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-genesis", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-genesis", + }, + "spec": Object { +@@ -9,7 +21,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + }, + }, +@@ -23,11 +35,12 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-genesis", + "app.kubernetes.io/rawname": "osmosis-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -114,7 +127,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -177,11 +195,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -210,6 +228,7 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -291,11 +310,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,11 +447,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -608,6 +608,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-osmosis-1", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "osmosis-1", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "setup-scripts-osmosis-1", + }, + } + +--- Service/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -23,6 +23,12 @@ + "targetPort": 8081, + }, + Object { ++ "name": "faucet", ++ "port": 8000, ++ "protocol": "TCP", ++ "targetPort": 8000, ++ }, ++ Object { + "name": "grpc", + "port": 9090, + "protocol": "TCP", + +--- StatefulSet/osmosis-1-validator --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "osmosis-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/part-of": "osmosis-1", ++ "app.kubernetes.io/role": "validator", ++ "app.kubernetes.io/type": "osmosis-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "osmosis", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "osmosis-1-validator", + }, + "spec": Object { +@@ -10,7 +22,7 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", + }, + }, +@@ -24,10 +36,11 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "osmosis", ++ "app.kubernetes.io/instance": "starship-e2e-tests", + "app.kubernetes.io/name": "osmosis-1-validator", ++ "app.kubernetes.io/role": "validator", + "app.kubernetes.io/type": "osmosis-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -119,11 +132,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -145,7 +158,9 @@ + "set -eux + START_ARGS=\\"\\" + ++ + # Starting the chain ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -255,11 +270,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -287,6 +302,7 @@ + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" + ++ + echo \\"Running setup config script...\\" + bash -e /scripts/update-config.sh + +@@ -399,11 +415,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -428,6 +444,7 @@ + "-c", + "VAL_INDEX=\${HOSTNAME##*-} + echo \\"Validator Index: $VAL_INDEX\\" ++ + + if [ -f $CHAIN_DIR/config/genesis.json ]; then + echo \\"Genesis file exists, exiting early\\" +@@ -548,11 +565,11 @@ + "name": "init-validator", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -597,16 +614,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + +--- ConfigMap/registry-cosmoshub-4 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uatom\\", +- \\"coingecko_id\\": \\"atom\\", ++ \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", ++ \\"name\\": \\"Cosmos Hub Atom\\", ++ \\"display\\": \\"atom\\", ++ \\"symbol\\": \\"ATOM\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uatom\\", +@@ -18,14 +25,7 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native staking and governance token of the Cosmos Hub.\\", +- \\"display\\": \\"atom\\", +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg\\" +- }, +- \\"name\\": \\"Cosmos Hub Atom\\", +- \\"symbol\\": \\"ATOM\\" ++ \\"coingecko_id\\": \\"atom\\" + } + ] + }", +@@ -82,6 +82,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-cosmoshub-4", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-cosmoshub-4", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,22 +100,22 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/cosmoshub-4", +- "name": "registry-configs-cosmoshub-4", ++ "mountPath": "/chains/cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { +- "mountPath": "/configs/osmosis-1", +- "name": "registry-configs-osmosis-1", ++ "mountPath": "/chains/osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, +@@ -126,6 +130,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -148,16 +153,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -168,13 +173,13 @@ + "configMap": Object { + "name": "registry-cosmoshub-4", + }, +- "name": "registry-configs-cosmoshub-4", ++ "name": "registry-cosmoshub-4", + }, + Object { + "configMap": Object { + "name": "registry-osmosis-1", + }, +- "name": "registry-configs-osmosis-1", ++ "name": "registry-osmosis-1", + }, + ], + }, + +--- ConfigMap/registry-osmosis-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,7 +7,14 @@ + \\"assets\\": [ + { + \\"base\\": \\"uosmo\\", +- \\"coingecko_id\\": \\"osmosis\\", ++ \\"description\\": \\"The native token of Osmosis\\", ++ \\"name\\": \\"Osmosis\\", ++ \\"display\\": \\"osmo\\", ++ \\"symbol\\": \\"OSMO\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uosmo\\", +@@ -18,22 +25,21 @@ + \\"exponent\\": 6 + } + ], +- \\"description\\": \\"The native token of Osmosis\\", +- \\"display\\": \\"osmo\\", ++ \\"coingecko_id\\": \\"osmosis\\", + \\"keywords\\": [ + \\"staking\\", + \\"dex\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg\\" +- }, +- \\"name\\": \\"Osmosis\\", +- \\"symbol\\": \\"OSMO\\" ++ ] + }, + { + \\"base\\": \\"uion\\", +- \\"coingecko_id\\": \\"ion\\", ++ \\"name\\": \\"Ion\\", ++ \\"display\\": \\"ion\\", ++ \\"symbol\\": \\"ION\\", ++ \\"logo_URIs\\": { ++ \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", ++ \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" ++ }, + \\"denom_units\\": [ + { + \\"denom\\": \\"uion\\", +@@ -44,16 +50,10 @@ + \\"exponent\\": 6 + } + ], +- \\"display\\": \\"ion\\", ++ \\"coingecko_id\\": \\"ion\\", + \\"keywords\\": [ + \\"memecoin\\" +- ], +- \\"logo_URIs\\": { +- \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png\\", +- \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg\\" +- }, +- \\"name\\": \\"Ion\\", +- \\"symbol\\": \\"ION\\" ++ ] + } + ] + }", +@@ -110,6 +110,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-osmosis-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "registry-osmosis-1", + }, + } + +--- ConfigMap/hermes-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -3,92 +3,45 @@ + "data": Object { + "config-cli.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"osmosis-1\\" ++ type = \\"CosmosSdk\\" + key_name = \\"osmosis-1-cli\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -103,17 +56,16 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uosmo\\" } +- +- ++ gas_price = { price = 1.25, denom = \\"uosmo\\" } + + [[chains]] + id = \\"cosmoshub-4\\" ++ type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4-cli\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -128,96 +80,48 @@ + trusting_period = \\"75s\\" + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } +- gas_price = { price = 0.25, denom = \\"uatom\\" }", ++ gas_price = { price = 1.25, denom = \\"uatom\\" }", + "config.toml": "# The global section has parameters that apply globally to the relayer operation. + [global] +- # Specify the verbosity for the relayer logging output. Default: 'info' +- # Valid options are 'error', 'warn', 'info', 'debug', 'trace'. +- log_level = 'info' +- # Specify the mode to be used by the relayer. [Required] ++ log_level = \\"info\\" ++ + [mode] +- # Specify the client mode. + [mode.clients] +- # Whether or not to enable the client workers. [Required] + enabled = true +- # Whether or not to enable periodic refresh of clients. [Default: true] +- # This feature only applies to clients that underlie an open channel. +- # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their +- # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). +- # Note: Even if this is disabled, clients will be refreshed automatically if +- # there is activity on a connection or channel they are involved with. + refresh = true +- # Whether or not to enable misbehaviour detection for clients. [Default: false] + misbehaviour = true +- # Specify the connections mode. ++ + [mode.connections] +- # Whether or not to enable the connection workers for handshake completion. [Required] + enabled = true +- # Specify the channels mode. ++ + [mode.channels] +- # Whether or not to enable the channel workers for handshake completion. [Required] + enabled = true +- # Specify the packets mode. ++ + [mode.packets] +- # Whether or not to enable the packet workers. [Required] + enabled = true +- # Parametrize the periodic packet clearing feature. +- # Interval (in number of blocks) at which pending packets +- # should be periodically cleared. A value of '0' will disable +- # periodic packet clearing. [Default: 100] + clear_interval = 100 +- # Whether or not to clear packets on start. [Default: false] + clear_on_start = true +- # Toggle the transaction confirmation mechanism. +- # The tx confirmation mechanism periodically queries the \`/tx_search\` RPC +- # endpoint to check that previously-submitted transactions +- # (to any chain in this config file) have been successfully delivered. +- # If they have not been, and \`clear_interval = 0\`, then those packets are +- # queued up for re-submission. +- # Experimental feature. Affects telemetry if set to false. +- # [Default: true] + tx_confirmation = true +- # Auto register the counterparty payee on a destination chain to +- # the relayer's address on the source chain. This can be used +- # for simple configuration of the relayer to receive fees for +- # relaying RecvPacket on fee-enabled channels. +- # For more complex configuration, turn this off and use the CLI +- # to manually register the payee addresses. +- # [Default: false] +- auto_register_counterparty_payee = false +- # The REST section defines parameters for Hermes' built-in RESTful API. +- # https://hermes.informal.systems/rest.html ++ + [rest] +- # Whether or not to enable the REST service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful +- # API requests. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the restful API +- # requests. Default: 3000 ++ host = \\"0.0.0.0\\" + port = 3000 +- # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. +- # https://hermes.informal.systems/telemetry.html ++ + [telemetry] +- # Whether or not to enable the telemetry service. Default: false + enabled = true +- # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics +- # gathered by the telemetry service. Default: 127.0.0.1 +- host = '0.0.0.0' +- # Specify the port over which the built-in HTTP server will serve the metrics gathered +- # by the telemetry service. Default: 3001 ++ host = \\"0.0.0.0\\" + port = 3001 +- + + + [[chains]] + id = \\"osmosis-1\\" + type = \\"CosmosSdk\\" + key_name = \\"osmosis-1\\" +- rpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://osmosis-1-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"osmo\\" + default_gas = 500000000 +@@ -233,17 +137,15 @@ + trust_threshold = { numerator = \\"2\\", denominator = \\"3\\" } + address_type = { derivation = 'cosmos' } + gas_price = { price = 1.25, denom = \\"uosmo\\" } +- +- + + [[chains]] + id = \\"cosmoshub-4\\" + type = \\"CosmosSdk\\" + key_name = \\"cosmoshub-4\\" +- rpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:26657\\" +- grpc_addr = \\"http://cosmoshub-4-genesis.default.svc.cluster.local:9090\\" +- event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.default.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } +- # Experimental: Whether or not the full node is trusted. ++ ++ rpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657\\" ++ grpc_addr = \\"http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090\\" ++ event_source = { mode = 'push', url = \\"ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket\\", batch_delay = '500ms' } + trusted_node = false + account_prefix = \\"cosmos\\" + default_gas = 500000000 +@@ -262,6 +164,15 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmos-cosmos", + }, + } + +--- StatefulSet/hermes-osmos-cosmos --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,15 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "relayer", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "hermes-osmos-cosmos", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/role": "hermes", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "starship-e2e-tests", ++ }, + "name": "hermes-osmos-cosmos", + }, + "spec": Object { +@@ -29,16 +38,18 @@ + "app.kubernetes.io/name": "hermes-osmos-cosmos", + "app.kubernetes.io/rawname": "osmos-cosmos", + "app.kubernetes.io/type": "hermes", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { + "containers": Array [ + Object { ++ "args": Array [ ++ "/exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "/exposer/exposer", + ], + "env": Array [ + Object { +@@ -55,11 +66,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -83,14 +94,24 @@ + ], + }, + Object { ++ "args": Array [ ++ "RLY_INDEX=\${HOSTNAME##*-} ++ echo \\"Relayer Index: $RLY_INDEX\\" ++ hermes start", ++ ], + "command": Array [ + "bash", + "-c", +- "RLY_INDEX=\${HOSTNAME##*-} +- echo \\"Relayer Index: $RLY_INDEX\\" +- hermes start", + ], + "env": Array [ ++ Object { ++ "name": "NAMESPACE", ++ "valueFrom": Object { ++ "fieldRef": Object { ++ "fieldPath": "metadata.namespace", ++ }, ++ }, ++ }, + Object { + "name": "RELAYER_DIR", + "value": "/root/.hermes", +@@ -101,12 +122,12 @@ + "name": "relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "securityContext": Object { +@@ -127,24 +148,26 @@ + ], + "initContainers": Array [ + Object { ++ "args": Array [ ++ "# Install exposer binary from the image ++ cp /bin/exposer /exposer/exposer ++ chmod +x /exposer/exposer", ++ ], + "command": Array [ + "bash", + "-c", +- "# Install exposer binary from the image +- cp /bin/exposer /exposer/exposer +- chmod +x /exposer/exposer", + ], + "image": "ghcr.io/hyperweb-io/starship/exposer:20250205-544757d", + "imagePullPolicy": "IfNotPresent", + "name": "init-exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.1", ++ "memory": "100M", + }, + }, + "volumeMounts": Array [ +@@ -155,9 +178,7 @@ + ], + }, + Object { +- "command": Array [ +- "bash", +- "-c", ++ "args": Array [ + "set -ux + + RLY_INDEX=\${HOSTNAME##*-} +@@ -166,18 +187,16 @@ + mkdir -p $RELAYER_DIR + cp /configs/config.toml $RELAYER_DIR/config.toml + cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +- cat $RELAYER_DIR/config.toml ++ ++ # Replace namespace placeholder with actual namespace environment variable ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config.toml ++ sed -i \\"s|\\\\$NAMESPACE|$NAMESPACE|g\\" $RELAYER_DIR/config-cli.toml + +- MNEMONIC=$(jq -r \\".relayers[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC=$(jq -r \\".relayers[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt +- MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RELAYER_INDEX].mnemonic\\" $KEYS_CONFIG) ++ MNEMONIC_CLI=$(jq -r \\".relayers_cli[$RLY_INDEX].mnemonic\\" $KEYS_CONFIG) + echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt + +- echo \\"Debug output for osmos-cosmos...\\" +- cat << EOF +- map[string]interface {} +- {\\"chains\\":[\\"osmosis-1\\",\\"cosmoshub-4\\"],\\"channels\\":[{\\"a-chain\\":\\"osmosis-1\\",\\"a-port\\":\\"transfer\\",\\"b-chain\\":\\"cosmoshub-4\\",\\"b-port\\":\\"transfer\\",\\"new-connection\\":true}],\\"config\\":{\\"event_source\\":{\\"mode\\":\\"push\\"},\\"global\\":{\\"log_level\\":\\"info\\"},\\"mode\\":{\\"channels\\":{\\"enabled\\":true},\\"clients\\":{\\"enabled\\":true,\\"misbehaviour\\":true,\\"refresh\\":true},\\"connections\\":{\\"enabled\\":true},\\"packets\\":{\\"clear_interval\\":100,\\"clear_on_start\\":true,\\"enabled\\":true,\\"tx_confirmation\\":true}},\\"rest\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3000},\\"telemetry\\":{\\"enabled\\":true,\\"host\\":\\"0.0.0.0\\",\\"port\\":3001}},\\"fullname\\":\\"hermes-osmos-cosmos\\",\\"ics\\":{\\"enabled\\":false},\\"image\\":\\"ghcr.io/cosmology-tech/starship/hermes:1.10.0\\",\\"name\\":\\"osmos-cosmos\\",\\"replicas\\":1,\\"type\\":\\"hermes\\"} +- EOF + + echo \\"Creating key for osmosis-1...\\" + hermes keys add \\\\ +@@ -240,12 +259,17 @@ + $DENOM \\\\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\\\ + \\"false\\" || true ++ + hermes create channel \\\\ + --new-client-connection --yes \\\\ + --b-chain cosmoshub-4 \\\\ + --a-chain osmosis-1 \\\\ + --a-port transfer \\\\ + --b-port transfer", ++ ], ++ "command": Array [ ++ "bash", ++ "-c", + ], + "env": Array [ + Object { +@@ -266,7 +290,7 @@ + }, + Object { + "name": "RELAYER_INDEX", +- "value": "0", ++ "value": "\${HOSTNAME##*-}", + }, + ], + "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", +@@ -274,12 +298,12 @@ + "name": "init-relayer", + "resources": Object { + "limits": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + "requests": Object { +- "cpu": 0.5, +- "memory": "500M", ++ "cpu": "0.2", ++ "memory": "200M", + }, + }, + "volumeMounts": Array [ +@@ -310,6 +334,7 @@ + echo \\"Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" + sleep 10; + done ++ + while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo \\"Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start...\\" + echo \\"Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id\\" +@@ -332,16 +357,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }," +`; + +exports[`Manifest Comparison Tests Individual Config Comparisons should generate manifests for xpla that match the snapshot 1`] = ` +"🔄 MODIFIED_RESOURCES: + +--- ConfigMap/keys --- +- Expected (reference) ++ Generated (actual) + +@@ -98,6 +98,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "keys", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "xpla", ++ }, + "name": "keys", + }, + } + +--- ConfigMap/setup-scripts --- +- Expected (reference) ++ Generated (actual) + +@@ -208,6 +208,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "configmap", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts", ++ "app.kubernetes.io/part-of": "global", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "xpla", ++ }, + "name": "setup-scripts", + }, + } + +--- Deployment/registry --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,14 @@ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "xpla", ++ }, + "name": "registry", + }, + "spec": Object { +@@ -9,7 +17,6 @@ + "revisionHistoryLimit": 3, + "selector": Object { + "matchLabels": Object { +- "app.kubernetes.io/instance": "registry", + "app.kubernetes.io/name": "registry", + }, + }, +@@ -22,19 +29,17 @@ + "tier": "gateway", + }, + "labels": Object { +- "app.kubernetes.io/instance": "registry", ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", + "app.kubernetes.io/name": "registry", +- "app.kubernetes.io/rawname": "registry", +- "app.kubernetes.io/type": "registry", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "xpla", + }, + }, + "spec": Object { + "containers": Array [ + Object { +- "command": Array [ +- "registry", +- ], + "env": Array [ + Object { + "name": "NAMESPACE", +@@ -74,21 +79,20 @@ + }, + Object { + "name": "REGISTRY_CHAIN_REGISTRY", +- "value": "/configs", ++ "value": "/chains", + }, + ], + "image": "ghcr.io/hyperweb-io/starship/registry:20250205-544757d", +- "imagePullPolicy": "IfNotPresent", + "livenessProbe": Object { +- "initialDelaySeconds": 20, +- "periodSeconds": 10, ++ "initialDelaySeconds": 15, ++ "periodSeconds": 20, + "tcpSocket": Object { + "port": 8080, + }, + }, + "name": "registry", + "readinessProbe": Object { +- "initialDelaySeconds": 20, ++ "initialDelaySeconds": 5, + "periodSeconds": 10, + "tcpSocket": Object { + "port": 8080, +@@ -96,18 +100,18 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, + "volumeMounts": Array [ + Object { +- "mountPath": "/configs/xpla_1-1", +- "name": "registry-configs-xpla-1-1", ++ "mountPath": "/chains/xpla_1-1", ++ "name": "registry-xpla-1-1", + }, + ], + }, +@@ -139,16 +143,16 @@ + }, + }, + ], +- "image": "curlimages/curl", ++ "image": "curlimages/curl:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait-for-chains", + "resources": Object { + "limits": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + "requests": Object { +- "cpu": 0.1, ++ "cpu": "0.1", + "memory": "100M", + }, + }, +@@ -159,7 +163,7 @@ + "configMap": Object { + "name": "registry-xpla-1-1", + }, +- "name": "registry-configs-xpla-1-1", ++ "name": "registry-xpla-1-1", + }, + ], + }, + +--- ConfigMap/registry-xpla-1-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -7,21 +7,21 @@ + \\"assets\\": [ + { + \\"base\\": \\"axpla\\", +- \\"coingecko_id\\": \\"xpla\\", ++ \\"description\\": \\"The XPLA token is the native governance token for the XPLA chain.\\", + \\"denom_units\\": [ + { + \\"denom\\": \\"axpla\\", + \\"exponent\\": 0 + } + ], +- \\"description\\": \\"The XPLA token is the native governance token for the XPLA chain.\\", ++ \\"name\\": \\"XPLA\\", + \\"display\\": \\"XPLA\\", ++ \\"symbol\\": \\"XPLA\\", + \\"logo_URIs\\": { + \\"png\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.png\\", + \\"svg\\": \\"https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.svg\\" + }, +- \\"name\\": \\"XPLA\\", +- \\"symbol\\": \\"XPLA\\" ++ \\"coingecko_id\\": \\"xpla\\" + } + ] + }", +@@ -78,6 +78,14 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "registry", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "registry-xpla-1-1", ++ "app.kubernetes.io/part-of": "starship", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/name": "xpla", ++ }, + "name": "registry-xpla-1-1", + }, + } + +--- ConfigMap/patch-xpla-1-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -13,6 +13,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "xpla", ++ "app.kubernetes.io/part-of": "xpla_1-1", ++ "app.kubernetes.io/role": "genesis-patch", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "xpla_1-1", ++ "starship.io/chain-name": "xpla", ++ "starship.io/name": "xpla", ++ }, + "name": "patch-xpla-1-1", + }, + } + +--- StatefulSet/xpla-1-1-genesis --- +- Expected (reference) ++ Generated (actual) + +@@ -2,6 +2,18 @@ + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/id": "xpla_1-1", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "xpla_1-1-genesis", ++ "app.kubernetes.io/part-of": "xpla_1-1", ++ "app.kubernetes.io/role": "genesis", ++ "app.kubernetes.io/type": "xpla_1-1-statefulset", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-name": "xpla", ++ "starship.io/name": "xpla", ++ }, + "name": "xpla-1-1-genesis", + }, + "spec": Object { +@@ -26,8 +38,9 @@ + "app.kubernetes.io/instance": "xpla", + "app.kubernetes.io/name": "xpla_1-1-genesis", + "app.kubernetes.io/rawname": "xpla_1-1", ++ "app.kubernetes.io/role": "genesis", + "app.kubernetes.io/type": "xpla_1-1", +- "app.kubernetes.io/version": "0.1.1", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", + }, + }, + "spec": Object { +@@ -91,11 +104,11 @@ + "name": "exposer", + "resources": Object { + "limits": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + "requests": Object { +- "cpu": 0.2, ++ "cpu": "0.2", + "memory": "200M", + }, + }, +@@ -184,12 +197,12 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + "requests": Object { +- "cpu": 0.2, +- "memory": "200M", ++ "cpu": "0.1", ++ "memory": "128M", + }, + }, + "volumeMounts": Array [ +@@ -211,7 +224,12 @@ + "command": Array [ + "bash", + "-c", +- "START_ARGS=\\"\\" ++ "#!/bin/bash ++ set -euo pipefail ++ ++ START_ARGS=\\"\\" ++ ++ + $CHAIN_BIN start $START_ARGS", + ], + "env": Array [ +@@ -274,11 +292,11 @@ + }, + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -307,7 +325,9 @@ + echo \\"Validator Index: $VAL_INDEX\\" + + echo \\"Running setup config script...\\" ++ + jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json ++ + bash -e /scripts/update-config.sh", + ], + "env": Array [ +@@ -389,11 +409,11 @@ + "name": "init-config", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -420,20 +440,18 @@ + "command": Array [ + "bash", + "-c", +- "# Install faucet binary from the image +- cp /bin/faucet /faucet/faucet +- chmod +x /faucet/faucet", ++ "cp /bin/faucet /faucet/faucet && chmod +x /faucet/faucet", + ], + "image": "ghcr.io/hyperweb-io/starship/faucet:20250325-2207109", + "imagePullPolicy": "IfNotPresent", + "name": "init-faucet", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, +@@ -470,6 +488,7 @@ + + echo \\"Add custom accounts and balances\\" + CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q \\"genesis-related subcommands\\" && echo \\"genesis\\" || echo \\"\\") ++ + echo \\"Adding balance to xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g\\" + $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account xpla1cmywl3ff3vfsdp2s87v25v75qjxs4up35tk45g 100000000000000000000000axpla --keyring-backend=\\"test\\"", + ], +@@ -560,11 +579,11 @@ + "name": "init-genesis", + "resources": Object { + "limits": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + "requests": Object { +- "cpu": 0.5, ++ "cpu": "0.5", + "memory": "500M", + }, + }, + +--- ConfigMap/setup-scripts-xpla-1-1 --- +- Expected (reference) ++ Generated (actual) + +@@ -551,7 +551,7 @@ + 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", +- "update-genesis.sh": "#!/bin/bash ++ "updateGenesis.sh": "#!/bin/bash + + DENOM=\\"\${DENOM:=axpla}\\" + CHAIN_BIN=\\"\${CHAIN_BIN:=xplad}\\" +@@ -587,6 +587,17 @@ + }, + "kind": "ConfigMap", + "metadata": Object { ++ "labels": Object { ++ "app.kubernetes.io/component": "chain", ++ "app.kubernetes.io/managed-by": "starship", ++ "app.kubernetes.io/name": "setup-scripts-xpla-1-1", ++ "app.kubernetes.io/part-of": "xpla_1-1", ++ "app.kubernetes.io/role": "setup-scripts", ++ "app.kubernetes.io/version": "4.0.0-alpha.0", ++ "starship.io/chain-id": "xpla_1-1", ++ "starship.io/chain-name": "xpla", ++ "starship.io/name": "xpla", ++ }, + "name": "setup-scripts-xpla-1-1", + }, + }" +`; diff --git a/packages/packages/generator/__tests__/__snapshots__/relayer.test.ts.snap b/packages/packages/generator/__tests__/__snapshots__/relayer.test.ts.snap index 9560ef7cb..d7d20d526 100644 --- a/packages/packages/generator/__tests__/__snapshots__/relayer.test.ts.snap +++ b/packages/packages/generator/__tests__/__snapshots__/relayer.test.ts.snap @@ -43,9 +43,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "undefined" default_gas = 500000000 @@ -67,9 +67,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "undefined" default_gas = 500000000 @@ -124,9 +124,9 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "undefined" default_gas = 500000000 @@ -148,9 +148,9 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" -event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '500ms' } +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" +event_source = { mode = 'push', url = "ws://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '500ms' } trusted_node = false account_prefix = "undefined" default_gas = 500000000 @@ -278,6 +278,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -325,7 +333,7 @@ hermes start", "value": "9099", }, ], - "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", + "image": undefined, "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { @@ -390,38 +398,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -431,9 +430,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -446,6 +455,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -458,7 +471,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="undefined" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -467,7 +479,22 @@ bash -e /scripts/transfer-tokens.sh \\ $RLY_ADDR \\ $DENOM \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ - "false" || true + "undefined" || true + +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "undefined" || true echo "Creating key for cosmoshub-4..." hermes keys add \\ @@ -475,7 +502,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="undefined" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -485,6 +511,21 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true ", ], "command": [ @@ -716,6 +757,14 @@ rly start", "name": "RELAYER_DIR", "value": "/root/.relayer", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1", "imagePullPolicy": "IfNotPresent", @@ -748,38 +797,29 @@ rly start", ], "initContainers": [ { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -789,9 +829,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -1152,6 +1202,14 @@ ts-relayer start", "name": "RELAYER_DIR", "value": "/root/.ts-relayer", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/ts-relayer:0.9.0", "imagePullPolicy": "IfNotPresent", @@ -1184,38 +1242,29 @@ ts-relayer start", ], "initContainers": [ { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for neutron-1 service..." -wait-for-service neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -1225,9 +1274,19 @@ wait-for-service neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-neutron-1", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -1560,38 +1619,29 @@ neutron-query-relayer start --config /configs/config.json", ], "initContainers": [ { - "args": [ - "echo "Waiting for neutron-1 service..." -wait-for-service neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-neutron-1", - }, - { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -1601,9 +1651,19 @@ wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -1782,8 +1842,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -1806,8 +1866,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -1863,8 +1923,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -1887,8 +1947,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -2017,6 +2077,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -2064,7 +2132,7 @@ hermes start", "value": "9099", }, ], - "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", + "image": undefined, "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { @@ -2129,38 +2197,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -2170,9 +2229,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -2185,6 +2254,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -2197,7 +2270,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="undefined" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -2206,7 +2278,22 @@ bash -e /scripts/transfer-tokens.sh \\ $RLY_ADDR \\ $DENOM \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ - "false" || true + "undefined" || true + +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "undefined" || true echo "Creating key for cosmoshub-4..." hermes keys add \\ @@ -2214,7 +2301,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="undefined" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -2224,6 +2310,21 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true ", ], "command": [ @@ -2455,6 +2556,14 @@ rly start", "name": "RELAYER_DIR", "value": "/root/.relayer", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1", "imagePullPolicy": "IfNotPresent", @@ -2487,38 +2596,29 @@ rly start", ], "initContainers": [ { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -2528,9 +2628,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -2713,8 +2823,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -2737,8 +2847,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -2794,8 +2904,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -2818,8 +2928,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -2948,6 +3058,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "custom/hermes:latest", "imagePullPolicy": "IfNotPresent", @@ -3060,38 +3178,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -3101,9 +3210,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -3116,6 +3235,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -3128,7 +3251,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="undefined" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -3137,7 +3259,22 @@ bash -e /scripts/transfer-tokens.sh \\ $RLY_ADDR \\ $DENOM \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ - "false" || true + "undefined" || true + +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "undefined" || true echo "Creating key for cosmoshub-4..." hermes keys add \\ @@ -3145,7 +3282,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="undefined" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -3155,6 +3291,21 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true ", ], "command": [ @@ -3391,6 +3542,14 @@ rly start", "name": "RELAYER_DIR", "value": "/root/.relayer", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1", "imagePullPolicy": "IfNotPresent", @@ -3423,38 +3582,29 @@ rly start", ], "initContainers": [ { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -3464,9 +3614,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -3649,8 +3809,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1-cli" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -3673,8 +3833,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4-cli" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -3730,8 +3890,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -3754,8 +3914,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -3884,6 +4044,14 @@ hermes start", "name": "RELAYER_DIR", "value": "/root/.hermes", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", "imagePullPolicy": "IfNotPresent", @@ -3931,7 +4099,7 @@ hermes start", "value": "9099", }, ], - "image": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", + "image": undefined, "imagePullPolicy": "IfNotPresent", "name": "exposer", "resources": { @@ -3996,38 +4164,29 @@ chmod +x /exposer/exposer", ], }, { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -4037,9 +4196,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -4052,6 +4221,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -4064,7 +4237,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name osmosis-1 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="undefined" RLY_ADDR=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1".account') @@ -4073,7 +4245,22 @@ bash -e /scripts/transfer-tokens.sh \\ $RLY_ADDR \\ $DENOM \\ http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ - "false" || true + "undefined" || true + +echo "Creating key for osmosis-1-cli..." +hermes keys add \\ + --chain osmosis-1 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name osmosis-1-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain osmosis-1 | tail -1 | jq -r '.result."osmosis-1-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "undefined" || true echo "Creating key for cosmoshub-4..." hermes keys add \\ @@ -4081,7 +4268,6 @@ hermes keys add \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name cosmoshub-4 \\ --hd-path "m/44'/118'/0'/0/0" - DENOM="undefined" RLY_ADDR=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4".account') @@ -4091,6 +4277,21 @@ bash -e /scripts/transfer-tokens.sh \\ $DENOM \\ http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ "false" || true + +echo "Creating key for cosmoshub-4-cli..." +hermes keys add \\ + --chain cosmoshub-4 \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name cosmoshub-4-cli \\ + --hd-path "m/44'/118'/0'/0/0" +RLY_ADDR_CLI=$(hermes --json keys list --chain cosmoshub-4 | tail -1 | jq -r '.result."cosmoshub-4-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "false" || true ", ], "command": [ @@ -4392,38 +4593,29 @@ neutron-query-relayer start --config /configs/config.json", ], "initContainers": [ { - "args": [ - "echo "Waiting for neutron-1 service..." -wait-for-service neutron-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: neutron-1. Waiting for it to start..." + echo "Checking: http://neutron-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-neutron-1", - }, - { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -4433,9 +4625,19 @@ wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -4792,6 +4994,14 @@ ts-relayer start", "name": "RELAYER_DIR", "value": "/root/.ts-relayer", }, + { + "name": "NAMESPACE", + "valueFrom": { + "fieldRef": { + "fieldPath": "metadata.namespace", + }, + }, + }, ], "image": "ghcr.io/cosmology-tech/starship/ts-relayer:0.9.0", "imagePullPolicy": "IfNotPresent", @@ -4824,38 +5034,29 @@ ts-relayer start", ], "initContainers": [ { - "args": [ - "echo "Waiting for osmosis-1 service..." -wait-for-service osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], "command": [ - "bash", + "/bin/sh", "-c", + " +while [ $(curl -sw '%{http_code}' http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: osmosis-1. Waiting for it to start..." + echo "Checking: http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done + +while [ $(curl -sw '%{http_code}' http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: cosmoshub-4. Waiting for it to start..." + echo "Checking: http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done +echo "Ready to start" +exit 0", ], "env": [ { - "name": "NAMESPACE", - "valueFrom": { - "fieldRef": { - "fieldPath": "metadata.namespace", - }, - }, + "name": "GENESIS_PORT", + "value": "8081", }, - ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", - "imagePullPolicy": "IfNotPresent", - "name": "init-osmosis-1", - }, - { - "args": [ - "echo "Waiting for cosmoshub-4 service..." -wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", - ], - "command": [ - "bash", - "-c", - ], - "env": [ { "name": "NAMESPACE", "valueFrom": { @@ -4865,9 +5066,19 @@ wait-for-service cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657", }, }, ], - "image": "ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0", + "image": "curlimages/curl:latest", "imagePullPolicy": "IfNotPresent", - "name": "init-cosmoshub-4", + "name": "wait-for-chains", + "resources": { + "limits": { + "cpu": "0.1", + "memory": "128M", + }, + "requests": { + "cpu": "0.1", + "memory": "128M", + }, + }, }, { "args": [ @@ -5072,8 +5283,8 @@ id = "osmosis-1" type = "CosmosSdk" key_name = "osmosis-1" -rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -5096,8 +5307,8 @@ id = "cosmoshub-4" type = "CosmosSdk" key_name = "cosmoshub-4" -rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:9090" event_source = { mode = 'pull', interval = '500ms' } trusted_node = false account_prefix = "undefined" @@ -5121,7 +5332,7 @@ exports[`RelayerBuilder Resource Validation should generate correct container co { "containerCount": 2, "hasExposerContainer": true, - "initContainerCount": 4, + "initContainerCount": 3, "relayerContainerImage": "ghcr.io/cosmology-tech/starship/hermes:1.10.0", } `; diff --git a/packages/packages/generator/__tests__/config.test.ts b/packages/packages/generator/__tests__/config.test.ts new file mode 100644 index 000000000..b213fbbee --- /dev/null +++ b/packages/packages/generator/__tests__/config.test.ts @@ -0,0 +1,272 @@ +import { StarshipConfig } from '@starship-ci/types'; + +import { applyDefaults, deepMerge } from '../src/defaults'; + +describe('DefaultsManager', () => { + describe('applyDefaults', () => { + it('should apply defaults to a full config', () => { + const config: StarshipConfig = { + name: 'test', + chains: [ + { + name: 'cosmoshub' as const, + id: 'chain1', + numValidators: 1, + image: 'ghcr.io/hyperweb-io/starship/chain:xyz', + faucet: { + enabled: true, + type: 'cosmjs', + image: 'ghcr.io/hyperweb-io/starship/cosmjs-faucet:xyz' + } + } + ], + relayers: [] + }; + + const processedConfig = applyDefaults(config); + + expect(processedConfig.relayers).toHaveLength(0); + expect(processedConfig.chains).toHaveLength(1); + expect(processedConfig.chains![0].faucet?.enabled).toBe(true); + expect(processedConfig.chains![0].faucet?.type).toBe('cosmjs'); + expect(processedConfig.chains![0].faucet?.image).toBe( + 'ghcr.io/hyperweb-io/starship/cosmjs-faucet:xyz' + ); + expect(processedConfig.exposer?.image).toBe( + 'ghcr.io/hyperweb-io/starship/exposer:20250205-544757d' + ); + expect(processedConfig.faucet?.enabled).toBe(true); + expect(processedConfig.faucet?.image).toBe( + 'ghcr.io/hyperweb-io/starship/faucet:20250325-2207109' + ); // default faucet + expect(processedConfig.monitoring?.enabled).toBe(false); + expect(processedConfig.ingress?.enabled).toBe(false); + expect(processedConfig.ingress?.type).toBe('nginx'); + expect(processedConfig.images?.imagePullPolicy).toBe('IfNotPresent'); + }); + + it('should override defaults with config', () => { + const config: StarshipConfig = { + name: 'test', + chains: [], + relayers: [], + exposer: { + image: 'ghcr.io/hyperweb-io/starship/exposer:xyz' + }, + faucet: { + enabled: true, + type: 'starship', + image: 'ghcr.io/hyperweb-io/starship/faucet:xyz' + } + }; + + const processedConfig = applyDefaults(config); + + expect(processedConfig.exposer?.image).toBe( + 'ghcr.io/hyperweb-io/starship/exposer:xyz' + ); + expect(processedConfig.faucet?.enabled).toBe(true); + expect(processedConfig.faucet?.type).toBe('starship'); + expect(processedConfig.faucet?.image).toBe( + 'ghcr.io/hyperweb-io/starship/faucet:xyz' + ); + }); + + it('should process relayers in a full config', () => { + const config: StarshipConfig = { + name: 'test', + chains: [], + relayers: [ + { + type: 'hermes' as const, + name: 'test-hermes', + replicas: 1, + chains: ['chain1'], + config: { + rest: { + port: 3001 + } + } + } + ] + }; + + const processedConfig = applyDefaults(config); + + expect(processedConfig.relayers).toHaveLength(1); + expect(processedConfig.relayers![0].config?.rest?.port).toBe(3001); + expect(processedConfig.relayers![0].config?.rest?.host).toBe('0.0.0.0'); + expect(processedConfig.relayers![0].config?.rest?.enabled).toBe(true); + }); + + it('should handle config with no relayers', () => { + const config: StarshipConfig = { + name: 'test', + chains: [] + }; + + const processedConfig = applyDefaults(config); + + expect(processedConfig.relayers).toHaveLength(0); + }); + }); + + it('should override images in some cases', () => { + const config: StarshipConfig = { + name: 'test', + chains: [ + { + name: 'cosmoshub' as const, + id: 'chain1', + numValidators: 1, + image: 'ghcr.io/hyperweb-io/starship/chain:xyz' + }, + { + name: 'osmosis' as const, + id: 'chain2', + numValidators: 1 + } + ], + relayers: [ + { + type: 'hermes' as const, + name: 'test-hermes', + chains: ['cosmoshub', 'osmosis'], + replicas: 1, + image: 'ghcr.io/hyperweb-io/starship/hermes:xyz' + }, + { + type: 'hermes' as const, + name: 'test-hermes', + chains: ['osmosis', 'cosmoshub'], + replicas: 1 + } + ] + }; + + const processedConfig = applyDefaults(config); + + expect(processedConfig.relayers![0].image).toBe( + 'ghcr.io/hyperweb-io/starship/hermes:xyz' + ); + expect(processedConfig.chains![0].image).toBe( + 'ghcr.io/hyperweb-io/starship/chain:xyz' + ); + expect(processedConfig.relayers![1].image).toBe( + 'ghcr.io/cosmology-tech/starship/hermes:1.10.0' + ); // default hermes image + expect(processedConfig.chains![1].image).toBe( + 'ghcr.io/cosmology-tech/starship/osmosis:v25.0.0' + ); // default osmosis image + }); + + describe('deepMerge utility', () => { + it('should merge nested objects correctly', () => { + const target = { + a: 1, + b: { + c: 2, + d: 3 + }, + e: [1, 2, 3] + }; + + const source = { + b: { + c: 4, + f: 5 + }, + g: 6 + }; + + const result = deepMerge(target, source); + + // Should merge nested objects + expect(result.b.c).toBe(4); // Overridden + expect(result.b.f).toBe(5); // Added + expect(result.b.d).toBe(3); // Preserved + expect(result.g).toBe(6); // Added + expect(result.a).toBe(1); // Preserved + expect(result.e).toEqual([1, 2, 3]); // Preserved (arrays are not merged) + }); + + it('should handle undefined values', () => { + const target: any = { + a: 1, + b: { + c: 2 + } + }; + + const source: any = { + a: undefined, + b: { + c: undefined, + d: 3 + } + }; + + const result = deepMerge(target, source); + + // Undefined values should not override existing values + expect(result.a).toBe(1); + expect(result.b.c).toBe(2); + expect(result.b.d).toBe(3); + }); + + it('should handle null values', () => { + const target: any = { + a: 1, + b: { + c: 2 + } + }; + + const source: any = { + a: null, + b: { + c: null, + d: 3 + } + }; + + const result = deepMerge(target, source); + + // Null values should override existing values + expect(result.a).toBe(null); + expect(result.b.c).toBe(null); + expect(result.b.d).toBe(3); + }); + + it('should handle empty objects', () => { + const target = {}; + const source = {}; + + const result = deepMerge(target, source); + + expect(result).toEqual({}); + }); + + it('should handle primitive values', () => { + const target = { + a: 1, + b: 'hello', + c: true + }; + + const source = { + a: 2, + b: 'world', + c: false, + d: 3 + }; + + const result = deepMerge(target, source); + + expect(result.a).toBe(2); + expect(result.b).toBe('world'); + expect(result.c).toBe(false); + expect(result.d).toBe(3); + }); + }); +}); diff --git a/packages/packages/generator/__tests__/defaults.test.ts b/packages/packages/generator/__tests__/defaults.test.ts deleted file mode 100644 index 7b25c9b67..000000000 --- a/packages/packages/generator/__tests__/defaults.test.ts +++ /dev/null @@ -1,278 +0,0 @@ -import { Relayer, StarshipConfig } from '@starship-ci/types'; - -import { applyDefaults, deepMerge, DefaultsManager } from '../src/defaults'; - -describe('DefaultsManager', () => { - let defaultsManager: DefaultsManager; - - beforeEach(() => { - defaultsManager = new DefaultsManager(); - }); - - describe('processRelayer', () => { - it('should merge partial overrides with defaults correctly', () => { - const relayerConfig: Relayer = { - type: 'hermes', - name: 'test-hermes', - chains: ['chain1', 'chain2'], - replicas: 1, - config: { - rest: { - port: 3001 // Only override port, should keep other defaults - }, - telemetry: { - enabled: false // Only override enabled, should keep other defaults - } - } - }; - - const processedRelayer = defaultsManager.processRelayer(relayerConfig); - - // Should have merged partial overrides with defaults - expect(processedRelayer.config?.rest?.port).toBe(3001); - expect(processedRelayer.config?.rest?.host).toBe('0.0.0.0'); - expect(processedRelayer.config?.rest?.enabled).toBe(true); - expect(processedRelayer.config?.telemetry?.enabled).toBe(false); - expect(processedRelayer.config?.telemetry?.host).toBe('0.0.0.0'); - expect(processedRelayer.config?.telemetry?.port).toBe(3001); - }); - - it('should handle complete overrides', () => { - const relayerConfig: Relayer = { - type: 'hermes', - name: 'test-hermes', - chains: ['chain1'], - replicas: 1, - config: { - rest: { - enabled: false, - host: '127.0.0.1', - port: 8080 - }, - telemetry: { - enabled: true, - host: '127.0.0.1', - port: 9090 - } - } - }; - - const processedRelayer = defaultsManager.processRelayer(relayerConfig); - - // Should use complete overrides - expect(processedRelayer.config?.rest?.enabled).toBe(false); - expect(processedRelayer.config?.rest?.host).toBe('127.0.0.1'); - expect(processedRelayer.config?.rest?.port).toBe(8080); - expect(processedRelayer.config?.telemetry?.enabled).toBe(true); - expect(processedRelayer.config?.telemetry?.host).toBe('127.0.0.1'); - expect(processedRelayer.config?.telemetry?.port).toBe(9090); - }); - - it('should handle relayers with no config', () => { - const relayerConfig: Relayer = { - type: 'hermes', - name: 'test-hermes', - chains: ['chain1'], - replicas: 1 - }; - - const processedRelayer = defaultsManager.processRelayer(relayerConfig); - - // Should use all defaults - expect(processedRelayer.config?.rest?.enabled).toBe(true); - expect(processedRelayer.config?.rest?.host).toBe('0.0.0.0'); - expect(processedRelayer.config?.rest?.port).toBe(3000); - expect(processedRelayer.config?.telemetry?.enabled).toBe(true); - expect(processedRelayer.config?.telemetry?.host).toBe('0.0.0.0'); - expect(processedRelayer.config?.telemetry?.port).toBe(3001); - }); - - it('should handle different relayer types', () => { - const hermesRelayer: Relayer = { - type: 'hermes' as const, - name: 'test-hermes', - chains: ['chain1'], - replicas: 1 - }; - - const goRelayer: Relayer = { - type: 'go-relayer' as const, - name: 'test-go', - chains: ['chain1'], - replicas: 1 - }; - - const tsRelayer: Relayer = { - type: 'ts-relayer' as const, - name: 'test-ts', - chains: ['chain1'], - replicas: 1 - }; - - const neutronRelayer: Relayer = { - type: 'neutron-query-relayer' as const, - name: 'test-neutron', - chains: ['chain1'], - replicas: 1 - }; - - // All should be processed without errors - expect(() => defaultsManager.processRelayer(hermesRelayer)).not.toThrow(); - expect(() => defaultsManager.processRelayer(goRelayer)).not.toThrow(); - expect(() => defaultsManager.processRelayer(tsRelayer)).not.toThrow(); - expect(() => - defaultsManager.processRelayer(neutronRelayer) - ).not.toThrow(); - }); - }); - - describe('applyDefaults', () => { - it('should process relayers in a full config', () => { - const config: StarshipConfig = { - name: 'test', - chains: [], - relayers: [ - { - type: 'hermes' as const, - name: 'test-hermes', - replicas: 1, - chains: ['chain1'], - config: { - rest: { - port: 3001 - } - } - } - ] - }; - - const processedConfig = applyDefaults(config); - - expect(processedConfig.relayers).toHaveLength(1); - expect(processedConfig.relayers![0].config?.rest?.port).toBe(3001); - expect(processedConfig.relayers![0].config?.rest?.host).toBe('0.0.0.0'); - expect(processedConfig.relayers![0].config?.rest?.enabled).toBe(true); - }); - - it('should handle config with no relayers', () => { - const config: StarshipConfig = { - name: 'test', - chains: [] - }; - - const processedConfig = applyDefaults(config); - - expect(processedConfig.relayers).toBeUndefined(); - }); - }); - - describe('deepMerge utility', () => { - it('should merge nested objects correctly', () => { - const target = { - a: 1, - b: { - c: 2, - d: 3 - }, - e: [1, 2, 3] - }; - - const source = { - b: { - c: 4, - f: 5 - }, - g: 6 - }; - - const result = deepMerge(target, source); - - // Should merge nested objects - expect(result.b.c).toBe(4); // Overridden - expect(result.b.f).toBe(5); // Added - expect(result.b.d).toBe(3); // Preserved - expect(result.g).toBe(6); // Added - expect(result.a).toBe(1); // Preserved - expect(result.e).toEqual([1, 2, 3]); // Preserved (arrays are not merged) - }); - - it('should handle undefined values', () => { - const target: any = { - a: 1, - b: { - c: 2 - } - }; - - const source: any = { - a: undefined, - b: { - c: undefined, - d: 3 - } - }; - - const result = deepMerge(target, source); - - // Undefined values should not override existing values - expect(result.a).toBe(1); - expect(result.b.c).toBe(2); - expect(result.b.d).toBe(3); - }); - - it('should handle null values', () => { - const target: any = { - a: 1, - b: { - c: 2 - } - }; - - const source: any = { - a: null, - b: { - c: null, - d: 3 - } - }; - - const result = deepMerge(target, source); - - // Null values should override existing values - expect(result.a).toBe(null); - expect(result.b.c).toBe(null); - expect(result.b.d).toBe(3); - }); - - it('should handle empty objects', () => { - const target = {}; - const source = {}; - - const result = deepMerge(target, source); - - expect(result).toEqual({}); - }); - - it('should handle primitive values', () => { - const target = { - a: 1, - b: 'hello', - c: true - }; - - const source = { - a: 2, - b: 'world', - c: false, - d: 3 - }; - - const result = deepMerge(target, source); - - expect(result.a).toBe(2); - expect(result.b).toBe('world'); - expect(result.c).toBe(false); - expect(result.d).toBe(3); - }); - }); -}); diff --git a/packages/packages/generator/__tests__/manifest.comparison.test.ts b/packages/packages/generator/__tests__/manifest.comparison.test.ts new file mode 100644 index 000000000..c54648e30 --- /dev/null +++ b/packages/packages/generator/__tests__/manifest.comparison.test.ts @@ -0,0 +1,162 @@ +import { existsSync, readdirSync } from 'fs'; +import { join } from 'path'; + +import { BuilderManager } from '../src/builders'; +import { GeneratorConfig } from '../src/types'; +import { loadConfig } from './test-utils/load'; +import { + type ChainTypeConfig, + type ComparisonOptions, + ManifestComparator, + type ManifestComparison +} from './test-utils/manifestComparison'; + +describe('Manifest Comparison Tests', () => { + const configsDir = join(__dirname, '../../../__fixtures__/configs'); + const expectedManifestsDir = join( + __dirname, + '../../../__fixtures__/config-manifests' + ); + const testOutputDir = join(__dirname, '__output__', 'manifest-comparison'); + const comparator = new ManifestComparator(); + + // Helper function to determine chain types from config name + const getChainTypesFromConfig = (configName: string): ChainTypeConfig => { + // Load the actual config to analyze chain types + const configFile = join(configsDir, `${configName}.yaml`); + const config: GeneratorConfig = loadConfig(configFile, configsDir); + + const chainNames = config.chains?.map(chain => chain.name) || []; + const hasEthereumChains = config.chains?.some(chain => chain.name === 'ethereum') || false; + const hasCosmosChains = config.chains?.some(chain => chain.name !== 'ethereum') || false; + + return { + hasCosmosChains, + hasEthereumChains, + chainNames + }; + }; + + // Get comparison options for a config + const getComparisonOptions = (configName: string): ComparisonOptions => { + const chainTypes = getChainTypesFromConfig(configName); + + return { + chainTypes, + allowExtraServices: true, // Allow extra services that weren't in original manifests + }; + }; + + // Generate and format a summary diff for snapshot comparison + const generateSummaryForSnapshot = (comparison: ManifestComparison): string => { + let summary = ''; + + if (!comparison.hasMismatches) { + return '✅ All resources match perfectly!'; + } + + if (comparison.missingResources.length > 0) { + summary += `❌ MISSING_RESOURCES:\n${comparison.missingResources.join('\n')}\n\n`; + } + + if (comparison.extraResources.length > 0) { + summary += `➕ EXTRA_RESOURCES:\n${comparison.extraResources.join('\n')}\n\n`; + } + + if (comparison.modifiedResources.length > 0) { + summary += `🔄 MODIFIED_RESOURCES:\n`; + comparison.modifiedResources.forEach(resource => { + summary += `\n--- ${resource.kind}/${resource.name} ---\n`; + summary += `${resource.differences}\n`; + }); + } + + return summary.trim(); + }; + + // Helper function to validate that a config directory and expected manifest exist + const validateTestFiles = (configName: string) => { + const configFile = join(configsDir, `${configName}.yaml`); + const expectedManifestFile = join( + expectedManifestsDir, + `${configName}.yaml` + ); + + if (!existsSync(configFile)) { + throw new Error(`Config file missing: ${configFile}`); + } + + if (!existsSync(expectedManifestFile)) { + throw new Error( + `Expected manifest file missing: ${expectedManifestFile}` + ); + } + }; + + // Get list of available configs + const getAvailableConfigs = (): string[] => { + if (!existsSync(configsDir)) { + return []; + } + + return readdirSync(configsDir) + .filter((file) => file.endsWith('.yaml')) + .map((file) => file.replace('.yaml', '')) + .filter((configName) => { + // Only include configs that have corresponding expected manifests + const expectedFile = join(expectedManifestsDir, `${configName}.yaml`); + return existsSync(expectedFile); + }); + }; + + describe('Individual Config Comparisons', () => { + const availableConfigs = getAvailableConfigs(); + + if (availableConfigs.length === 0) { + test('should have available configs', () => { + throw new Error( + `No configs found in ${configsDir} with corresponding manifests in ${expectedManifestsDir}` + ); + }); + } + + availableConfigs.forEach((configName) => { + it(`should generate manifests for ${configName} that match the snapshot`, () => { + validateTestFiles(configName); + + // Load and process config + const configFile = join(configsDir, `${configName}.yaml`); + const config: GeneratorConfig = loadConfig(configFile, configsDir); + + // Generate manifests + const builderManager = new BuilderManager(config); + const configOutputDir = join(testOutputDir, configName); + builderManager.build(configOutputDir); + + // Parse manifests + const generatedManifests = + comparator.parseGeneratedManifests(configOutputDir); + const expectedManifestsFile = join( + expectedManifestsDir, + `${configName}.yaml` + ); + const expectedManifests = comparator.parseExpectedManifests( + expectedManifestsFile + ); + + // Perform comparison + const options = getComparisonOptions(configName); + const comparison = comparator.compareManifests( + generatedManifests, + expectedManifests, + options + ); + comparison.configName = configName; + + // Generate a summary and compare with snapshot + const summary = generateSummaryForSnapshot(comparison); + expect(summary).toMatchSnapshot(); + }); + }); + }); +}); diff --git a/packages/packages/generator/__tests__/relayer.test.ts b/packages/packages/generator/__tests__/relayer.test.ts index bebd5c407..1e59ad3d9 100644 --- a/packages/packages/generator/__tests__/relayer.test.ts +++ b/packages/packages/generator/__tests__/relayer.test.ts @@ -486,10 +486,10 @@ describe('RelayerBuilder', () => { // Verify RPC endpoints expect(configToml).toContain( - 'rpc_addr = "http://osmosis-1-genesis.$(NAMESPACE).svc.cluster.local:26657"' + 'rpc_addr = "http://osmosis-1-genesis.$NAMESPACE.svc.cluster.local:26657"' ); expect(configToml).toContain( - 'rpc_addr = "http://cosmoshub-4-genesis.$(NAMESPACE).svc.cluster.local:26657"' + 'rpc_addr = "http://cosmoshub-4-genesis.$NAMESPACE.svc.cluster.local:26657"' ); // Snapshot test for configuration content diff --git a/packages/packages/generator/__tests__/test-utils/manifestComparison.ts b/packages/packages/generator/__tests__/test-utils/manifestComparison.ts new file mode 100644 index 000000000..2587fde3b --- /dev/null +++ b/packages/packages/generator/__tests__/test-utils/manifestComparison.ts @@ -0,0 +1,539 @@ +import { existsSync, readdirSync, readFileSync } from 'fs'; +import { diff } from 'jest-diff'; +import * as yaml from 'js-yaml'; +import { join } from 'path'; + +interface ManifestComparison { + configName: string; + hasMismatches: boolean; + missingResources: string[]; + extraResources: string[]; + modifiedResources: Array<{ + kind: string; + name: string; + namespace?: string; + differences: string; + }>; +} + +interface NormalizedResource { + apiVersion: string; + kind: string; + metadata: { + name: string; + namespace?: string; + labels?: Record; + annotations?: Record; + }; + spec?: any; + data?: any; +} + +export interface ChainTypeConfig { + hasCosmosChains: boolean; + hasEthereumChains: boolean; + chainNames: string[]; +} + +export interface ComparisonOptions { + chainTypes?: ChainTypeConfig; + allowExtraServices?: boolean; // Allow extra services for chains +} + +export class ManifestComparator { + + /** + * Parse a YAML file containing multiple documents separated by --- + */ + private parseManifestFile(content: string): NormalizedResource[] { + const documents = content + .split(/^---$/m) + .map((doc) => doc.trim()) + .filter((doc) => doc.length > 0); + + return documents + .map((doc) => { + try { + // Remove leading comments to find the actual YAML content + const yamlContent = doc.replace(/^#.*$/gm, '').trim(); + if (yamlContent.length === 0) { + return null; + } + + const parsed = yaml.load(yamlContent) as any; + return this.normalizeResource(parsed); + } catch (error) { + throw new Error(`Failed to parse YAML document: ${error}`); + } + }) + .filter((resource): resource is NormalizedResource => resource !== null); + } + + /** + * Normalize a resource for comparison by removing/standardizing certain fields + */ + private normalizeResource(resource: any): NormalizedResource | null { + if (!resource || !resource.kind || !resource.metadata?.name) { + return null; + } + + // Create a normalized copy + const normalized: NormalizedResource = { + apiVersion: resource.apiVersion, + kind: resource.kind, + metadata: { + name: resource.metadata.name, + ...(resource.metadata.namespace && { + namespace: resource.metadata.namespace + }), + ...(resource.metadata.labels && { + labels: { ...resource.metadata.labels } + }), + ...(resource.metadata.annotations && { + annotations: { ...resource.metadata.annotations } + }) + } + }; + + // Include spec and data if present + if (resource.spec) { + normalized.spec = this.deepNormalize({ ...resource.spec }); + } + if (resource.data) { + normalized.data = this.normalizeDataFields({ ...resource.data }); + } + + // Remove fields that are expected to vary or are not semantically important + this.removeVolatileFields(normalized); + + return normalized; + } + + /** + * Deep normalize an object, handling arrays, strings, and nested objects + */ + private deepNormalize(obj: any): any { + if (obj === null || obj === undefined) { + return obj; + } + + if (Array.isArray(obj)) { + return this.normalizeArray(obj); + } + + if (typeof obj === 'string') { + return this.normalizeString(obj); + } + + if (typeof obj === 'object') { + const normalized: any = {}; + for (const [key, value] of Object.entries(obj)) { + normalized[key] = this.deepNormalize(value); + } + return normalized; + } + + return obj; + } + + /** + * Normalize arrays by sorting them when possible + */ + private normalizeArray(arr: any[]): any[] { + const normalized = arr.map((item) => this.deepNormalize(item)); + + // Try to sort arrays that contain objects with name or key fields + try { + if ( + normalized.length > 0 && + typeof normalized[0] === 'object' && + normalized[0] !== null + ) { + const firstItem = normalized[0]; + + // Sort by name field if it exists + if ('name' in firstItem) { + return normalized.sort((a, b) => + String(a.name).localeCompare(String(b.name)) + ); + } + + // Sort by key field if it exists + if ('key' in firstItem) { + return normalized.sort((a, b) => + String(a.key).localeCompare(String(b.key)) + ); + } + + // For ports, sort by port number or name + if ('port' in firstItem) { + return normalized.sort((a, b) => { + const aPort = typeof a.port === 'number' ? a.port : a.name || ''; + const bPort = typeof b.port === 'number' ? b.port : b.name || ''; + return String(aPort).localeCompare(String(bPort)); + }); + } + } + } catch (error) { + // If sorting fails, return the normalized array as-is + } + + return normalized; + } + + /** + * Normalize string content to ignore formatting differences + */ + private normalizeString(str: string): string { + // Handle JSON strings specially + try { + const parsed = JSON.parse(str); + // Re-stringify with consistent formatting + return JSON.stringify(parsed, null, 2); + } catch { + // Not JSON, apply other normalizations + return str + .replace(/,\s*\n/g, '\n') // Remove trailing commas before newlines + .replace(/,\s*$/gm, '') // Remove trailing commas at end of lines + .trim(); + } + } + + /** + * Normalize data fields (like ConfigMap data) that often contain scripts or JSON + */ + private normalizeDataFields(data: Record): Record { + const normalized: Record = {}; + + for (const [key, value] of Object.entries(data)) { + if (typeof value === 'string') { + normalized[key] = this.normalizeString(value); + } else { + normalized[key] = this.deepNormalize(value); + } + } + + return normalized; + } + + /** + * Remove fields that are expected to change or are not semantically important + */ + private removeVolatileFields(resource: NormalizedResource): void { + // Remove metadata fields that may vary + if (resource.metadata.annotations) { + // Remove Helm-specific annotations that won't be in generated manifests + delete resource.metadata.annotations['meta.helm.sh/release-name']; + delete resource.metadata.annotations['meta.helm.sh/release-namespace']; + + // Remove empty annotations object + if (Object.keys(resource.metadata.annotations).length === 0) { + delete resource.metadata.annotations; + } + } + + // Remove or normalize fields in spec that are expected to vary + if (resource.spec) { + // For StatefulSets, normalize certain fields + if (resource.kind === 'StatefulSet') { + // Remove updateStrategy if it's default + if (resource.spec.updateStrategy?.type === 'RollingUpdate') { + delete resource.spec.updateStrategy; + } + } + + // For Services, normalize ports if needed + if (resource.kind === 'Service' && resource.spec.ports) { + resource.spec.ports = resource.spec.ports.map((port: any) => ({ + ...port + // Ensure consistent ordering of port fields + })); + } + } + } + + /** + * Create a unique key for a resource for comparison + */ + private getResourceKey(resource: NormalizedResource): string { + const namespace = resource.metadata.namespace || 'default'; + return `${resource.kind}/${namespace}/${resource.metadata.name}`; + } + + /** + * Determine if a resource is cosmos-specific based on its characteristics + */ + private isCosmosSpecificResource(resource: NormalizedResource): boolean { + const key = this.getResourceKey(resource); + const labels = resource.metadata.labels || {}; + + // Global cosmos resources + if ( + key === 'ConfigMap/default/keys' || + key === 'ConfigMap/default/setup-scripts' || + key.includes('/setup-scripts-') + ) { + return true; + } + + // Resources with cosmos chain markers + if ( + labels['starship.io/chain-name'] && + labels['starship.io/chain-name'] !== 'ethereum' + ) { + return true; + } + + // Resources for cosmos chains (osmosis, cosmoshub, etc.) + const cosmosChainNames = [ + 'osmosis', + 'cosmoshub', + 'gaia', + 'juno', + 'stargaze' + ]; + const chainName = labels['starship.io/chain-name']; + if ( + chainName && + cosmosChainNames.some((name) => chainName.includes(name)) + ) { + return true; + } + + return false; + } + + /** + * Determine if a resource is an extra service that's expected for chains + */ + private isExpectedExtraService( + resource: NormalizedResource, + options?: ComparisonOptions + ): boolean { + if (resource.kind !== 'Service') return false; + if (!options?.allowExtraServices) return false; + + const labels = resource.metadata.labels || {}; + const component = labels['app.kubernetes.io/component']; + + // Allow extra services for chain components + return component === 'chain'; + } + + /** + * Compare two sets of resources and return detailed differences + */ + public compareManifests( + generated: NormalizedResource[], + expected: NormalizedResource[], + options?: ComparisonOptions + ): ManifestComparison { + // Filter resources based on chain types + const filteredGenerated = this.filterResourcesByChainType( + generated, + options?.chainTypes + ); + const filteredExpected = this.filterResourcesByChainType( + expected, + options?.chainTypes + ); + + const generatedMap = new Map(); + const expectedMap = new Map(); + + // Index resources by their keys + filteredGenerated.forEach((resource) => { + generatedMap.set(this.getResourceKey(resource), resource); + }); + + filteredExpected.forEach((resource) => { + expectedMap.set(this.getResourceKey(resource), resource); + }); + + const missingResources: string[] = []; + const extraResources: string[] = []; + const modifiedResources: Array<{ + kind: string; + name: string; + namespace?: string; + differences: string; + }> = []; + + // Find missing resources (in expected but not in generated) + for (const [key] of expectedMap) { + if (!generatedMap.has(key)) { + missingResources.push(key); + } + } + + // Find extra resources (in generated but not in expected) + for (const [key, resource] of generatedMap) { + if (!expectedMap.has(key)) { + // Check if this is an expected extra resource + if (!this.isExpectedExtraService(resource, options)) { + extraResources.push(key); + } + } + } + + // Compare matching resources + for (const [key, generatedResource] of generatedMap) { + const expectedResource = expectedMap.get(key); + if (expectedResource) { + const differences = this.compareResources( + generatedResource, + expectedResource + ); + if (differences) { + modifiedResources.push({ + kind: generatedResource.kind, + name: generatedResource.metadata.name, + namespace: generatedResource.metadata.namespace, + differences + }); + } + } + } + + return { + configName: '', // Will be set by caller + hasMismatches: + missingResources.length > 0 || + extraResources.length > 0 || + modifiedResources.length > 0, + missingResources, + extraResources, + modifiedResources + }; + } + + /** + * Filter resources based on chain type expectations + */ + private filterResourcesByChainType( + resources: NormalizedResource[], + chainTypes?: ChainTypeConfig + ): NormalizedResource[] { + if (!chainTypes) { + return resources; + } + + return resources.filter((resource) => { + // If config has no cosmos chains, exclude cosmos-specific resources + if ( + !chainTypes.hasCosmosChains && + this.isCosmosSpecificResource(resource) + ) { + return false; + } + + return true; + }); + } + + /** + * Compare two individual resources and return diff string if different + */ + private compareResources( + generated: NormalizedResource, + expected: NormalizedResource + ): string | null { + // Special handling for labels - allow extra labels in generated + const generatedForComparison = { ...generated }; + const expectedForComparison = { ...expected }; + + if (expected.metadata.labels && generated.metadata.labels) { + // Check if all expected labels are present in generated + const missingLabels: string[] = []; + for (const [key, value] of Object.entries(expected.metadata.labels)) { + if (generated.metadata.labels[key] !== value) { + missingLabels.push(`${key}: ${value}`); + } + } + + if (missingLabels.length > 0) { + return `Missing expected labels: ${missingLabels.join(', ')}`; + } + + // For comparison, only include the expected labels in generated + generatedForComparison.metadata = { + ...generatedForComparison.metadata, + labels: Object.fromEntries( + Object.entries(expected.metadata.labels).map(([key]) => [ + key, + generated.metadata.labels![key] + ]) + ) + }; + } + + // Deep comparison using Jest's diff utility + const differences = diff(expectedForComparison, generatedForComparison, { + expand: false, + contextLines: 3, + aAnnotation: 'Expected (reference)', + bAnnotation: 'Generated (actual)' + }); + + // If Jest's diff indicates no difference, return null + if ( + differences && + differences.includes('Compared values have no visual difference') + ) { + return null; + } + + return differences || null; + } + + /** + * Parse generated manifests from the test output directory + */ + public parseGeneratedManifests(outputDir: string): NormalizedResource[] { + const manifests: NormalizedResource[] = []; + + if (!existsSync(outputDir)) { + throw new Error(`Output directory does not exist: ${outputDir}`); + } + + // Recursively find all YAML files + const findYamlFiles = (dir: string): string[] => { + const files: string[] = []; + + const items = readdirSync(dir, { withFileTypes: true }); + for (const item of items) { + const fullPath = join(dir, item.name); + if (item.isDirectory()) { + files.push(...findYamlFiles(fullPath)); + } else if (item.name.endsWith('.yaml') || item.name.endsWith('.yml')) { + files.push(fullPath); + } + } + return files; + }; + + const yamlFiles = findYamlFiles(outputDir); + + for (const file of yamlFiles) { + const content = readFileSync(file, 'utf-8'); + const resources = this.parseManifestFile(content); + manifests.push(...resources); + } + + return manifests; + } + + /** + * Parse expected manifests from a single reference file + */ + public parseExpectedManifests(manifestFile: string): NormalizedResource[] { + if (!existsSync(manifestFile)) { + throw new Error(`Expected manifest file does not exist: ${manifestFile}`); + } + + const content = readFileSync(manifestFile, 'utf-8'); + return this.parseManifestFile(content); + } +} + +export type { ManifestComparison, NormalizedResource }; diff --git a/packages/packages/generator/src/builders/chains/cosmos/cometmock.ts b/packages/packages/generator/src/builders/chains/cosmos/cometmock.ts new file mode 100644 index 000000000..2f0cbbb0b --- /dev/null +++ b/packages/packages/generator/src/builders/chains/cosmos/cometmock.ts @@ -0,0 +1,457 @@ +import { Chain, StarshipConfig } from '@starship-ci/types'; +import { Container, Service, StatefulSet } from 'kubernetesjs'; + +import { DefaultsManager } from '../../../defaults'; +import * as helpers from '../../../helpers'; +import { IGenerator, Manifest } from '../../../types'; +import { getGeneratorVersion } from '../../../version'; + +/** + * CometMock Service generator + */ +export class CometMockServiceGenerator implements IGenerator { + private config: StarshipConfig; + private chain: Chain; + + constructor(chain: Chain, config: StarshipConfig) { + this.config = config; + this.chain = chain; + } + + labels(): Record { + return { + ...helpers.getCommonLabels(this.config), + 'app.kubernetes.io/component': 'chain', + 'app.kubernetes.io/name': `${helpers.getChainId(this.chain)}-cometmock`, + 'app.kubernetes.io/type': `${helpers.getChainId(this.chain)}-service`, + 'app.kubernetes.io/role': 'cometmock', + 'starship.io/chain-name': this.chain.name, + 'starship.io/chain-id': helpers.getChainId(this.chain) + }; + } + + generate(): Array { + if (!this.chain.cometmock?.enabled) { + return []; + } + + return [ + { + apiVersion: 'v1', + kind: 'Service', + metadata: { + name: `${helpers.getHostname(this.chain)}-cometmock`, + labels: this.labels() + }, + spec: { + clusterIP: 'None', + ports: [ + { + name: 'rpc', + port: 22331, + protocol: 'TCP', + targetPort: '22331' + } + ], + selector: { + 'app.kubernetes.io/name': `${helpers.getChainId(this.chain)}-cometmock` + } + } + } + ]; + } +} + +/** + * CometMock StatefulSet generator + */ +export class CometMockStatefulSetGenerator implements IGenerator { + private config: StarshipConfig; + private chain: Chain; + private defaultsManager: DefaultsManager; + + constructor(chain: Chain, config: StarshipConfig) { + this.config = config; + this.chain = chain; + this.defaultsManager = new DefaultsManager(); + } + + labels(): Record { + const processedChain = this.defaultsManager.processChain(this.chain); + return { + ...helpers.getCommonLabels(this.config), + 'app.kubernetes.io/component': 'chain', + 'app.kubernetes.io/part-of': helpers.getChainId(processedChain), + 'app.kubernetes.io/id': helpers.getChainId(processedChain), + 'app.kubernetes.io/name': `${helpers.getChainId(processedChain)}-cometmock`, + 'app.kubernetes.io/type': `${helpers.getChainId(processedChain)}-statefulset`, + 'app.kubernetes.io/role': 'cometmock', + 'starship.io/chain-name': processedChain.name + }; + } + + generate(): Array { + if (!this.chain.cometmock?.enabled) { + return []; + } + + const processedChain = this.defaultsManager.processChain(this.chain); + + return [ + { + apiVersion: 'apps/v1', + kind: 'StatefulSet', + metadata: { + name: `${helpers.getHostname(processedChain)}-cometmock`, + labels: this.labels() + }, + spec: { + serviceName: `${helpers.getHostname(processedChain)}-cometmock`, + replicas: 1, + revisionHistoryLimit: 3, + selector: { + matchLabels: { + 'app.kubernetes.io/instance': processedChain.name, + 'app.kubernetes.io/name': `${helpers.getChainId(processedChain)}-cometmock` + } + }, + template: { + metadata: { + annotations: { + quality: 'release', + role: 'api-gateway', + sla: 'high', + tier: 'gateway' + }, + labels: { + 'app.kubernetes.io/instance': processedChain.name, + 'app.kubernetes.io/type': 'cometmock', + 'app.kubernetes.io/name': `${helpers.getChainId(processedChain)}-cometmock`, + 'app.kubernetes.io/rawname': `${helpers.getChainId(processedChain)}-cometmock`, + 'app.kubernetes.io/version': getGeneratorVersion() + } + }, + spec: { + ...((processedChain as any).imagePullSecrets + ? helpers.generateImagePullSecrets( + (processedChain as any).imagePullSecrets + ) + : {}), + initContainers: this.createInitContainers(processedChain), + containers: this.createMainContainers(processedChain), + volumes: helpers.generateChainVolumes(processedChain) + } + } + } + } + ]; + } + + private createInitContainers(chain: Chain): Container[] { + const initContainers: Container[] = []; + const exposerPort = this.config.exposer?.ports?.rest || 8081; + + // Add validator init container if numValidators > 1 + if (chain.numValidators && chain.numValidators > 1) { + initContainers.push(this.createValidatorInitContainer(chain)); + } + + // Add wait init container + initContainers.push(this.createWaitInitContainer(chain, exposerPort)); + + // Add comet init container + initContainers.push(this.createCometInitContainer(chain, exposerPort)); + + return initContainers; + } + + private createMainContainers(chain: Chain): Container[] { + return [this.createCometContainer(chain)]; + } + + private createValidatorInitContainer(chain: Chain): Container { + return { + name: 'init-validator', + image: chain.image, + imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', + env: [ + ...helpers.getDefaultEnvVars(chain), + ...helpers.getChainEnvVars(chain), + ...helpers.getGenesisEnvVars( + chain, + this.config.exposer?.ports?.rest || 8081 + ), + { name: 'KEYS_CONFIG', value: '/configs/keys.json' } + ], + command: ['bash', '-c', this.getValidatorInitScript(chain)], + resources: helpers.getNodeResources(chain, this.config), + volumeMounts: [ + { mountPath: '/chain', name: 'node' }, + { mountPath: '/scripts', name: 'scripts' }, + { mountPath: '/configs', name: 'addresses' } + ] + }; + } + + private createWaitInitContainer( + chain: Chain, + exposerPort: number + ): Container { + return { + name: 'init-wait', + image: 'curlimages/curl', + imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', + env: [ + { name: 'GENESIS_PORT', value: String(exposerPort) }, + { + name: 'NAMESPACE', + valueFrom: { + fieldRef: { + fieldPath: 'metadata.namespace' + } + } + } + ], + command: ['/bin/sh', '-c', this.getWaitInitScript(chain)], + resources: helpers.getResourceObject( + this.config.resources?.wait || { cpu: '0.1', memory: '100M' } + ) + }; + } + + private createCometInitContainer( + chain: Chain, + exposerPort: number + ): Container { + return { + name: 'init-comet', + image: + chain.cometmock?.image || 'ghcr.io/informalsystems/cometmock:v0.37.x', + imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', + env: [ + ...helpers.getDefaultEnvVars(chain), + ...helpers.getChainEnvVars(chain), + ...helpers.getGenesisEnvVars(chain, exposerPort), + ...helpers.getTimeoutEnvVars(this.config.timeouts || {}) + ], + command: ['bash', '-c', this.getCometInitScript(chain)], + resources: helpers.getNodeResources(chain, this.config), + volumeMounts: [ + { mountPath: '/chain', name: 'node' }, + { mountPath: '/scripts', name: 'scripts' }, + { mountPath: '/configs', name: 'addresses' } + ] + }; + } + + private createCometContainer(chain: Chain): Container { + const hasLifecycle = chain.numValidators && chain.numValidators > 1; + + return { + name: 'comet', + image: chain.image, + imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', + env: [ + ...helpers.getDefaultEnvVars(chain), + ...helpers.getChainEnvVars(chain), + ...helpers.getGenesisEnvVars( + chain, + this.config.exposer?.ports?.rest || 8081 + ), + { name: 'KEYS_CONFIG', value: '/configs/keys.json' } + ], + command: ['bash', '-c', this.getCometContainerScript(chain)], + ...(hasLifecycle + ? { + lifecycle: { + postStart: { + exec: { + command: [ + 'bash', + '-c', + '-e', + this.getCometPostStartScript(chain) + ] + } + } + } + } + : {}), + resources: helpers.getNodeResources(chain, this.config), + volumeMounts: [ + { mountPath: '/chain', name: 'node' }, + { mountPath: '/scripts', name: 'scripts' }, + { mountPath: '/configs', name: 'addresses' } + ], + readinessProbe: { + httpGet: { + path: '/status', + port: '22331' + }, + initialDelaySeconds: 10, + periodSeconds: 10 + } + }; + } + + private getValidatorInitScript(chain: Chain): string { + if (!chain.numValidators || chain.numValidators <= 1) { + return 'echo "No additional validators needed"'; + } + + const numValidators = chain.numValidators - 1; // Subtract 1 for genesis + return ` +for i in $(seq 0 ${numValidators - 1}); do + mkdir -p /chain/validator-$i/config /chain/validator-$i/data + 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" --home /chain/validator-$i +done + `.trim(); + } + + private getWaitInitScript(chain: Chain): string { + const chainHostname = helpers.getHostname(chain); + let script = ` +while [ $(curl -sw '%{http_code}' http://${chainHostname}-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: ${helpers.getChainId(chain)}. Waiting for it to start..." + echo "Checking: http://${chainHostname}-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; +done + `; + + if (chain.numValidators && chain.numValidators > 1) { + const numValidators = chain.numValidators - 1; + script += ` +for i in $(seq 0 ${numValidators - 1}); do + while [ $(curl -sw '%{http_code}' http://${chainHostname}-validator-$i.${chainHostname}-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /dev/null) -ne 200 ]; do + echo "Validator does not seem to be ready for: ${helpers.getChainId(chain)} validator-$i. Waiting for it to start..." + echo "Checking: http://${chainHostname}-validator-$i.${chainHostname}-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys" + sleep 10; + done +done + `; + } + + script += ` +echo "Ready to start" +exit 0 + `; + + return script.trim(); + } + + private getCometInitScript(chain: Chain): string { + const chainHostname = helpers.getHostname(chain); + let script = ` +mkdir -p /chain/genesis/config +mkdir -p /chain/genesis/data +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/genesis -o /chain/genesis/config/genesis.json +echo "Genesis file that we got....." +cat /chain/genesis/config/genesis.json + +## fetch priv_validator and priv_validator_state of all validators +curl http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/genesis/config/priv_validator_key.json +echo '{"height":"0","round":0,"step":0}' > /chain/genesis/data/priv_validator_state.json + `; + + if (chain.numValidators && chain.numValidators > 1) { + const numValidators = chain.numValidators - 1; + script += ` +for i in $(seq 0 ${numValidators - 1}); do + mkdir -p /chain/validator-$i/config + mkdir -p /chain/validator-$i/data + curl http://${chainHostname}-validator-$i.${chainHostname}-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_key -o /chain/validator-$i/config/node_key.json + curl http://${chainHostname}-validator-$i.${chainHostname}-validator.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/priv_keys -o /chain/validator-$i/config/priv_validator_key.json + echo '{"height":"0","round":0,"step":0}' > /chain/validator-$i/data/priv_validator_state.json +done + `; + } + + script += ` +echo "copy cometmock binary to shared dir" +cp /usr/local/bin/cometmock /chain/cometmock + `; + + return script.trim(); + } + + private getCometContainerScript(chain: Chain): string { + const chainHostname = helpers.getHostname(chain); + const blockTime = + this.config.timeouts?.timeout_commit?.replace('ms', '') || '800'; + + let script = ` +NODE_LISTEN_ADDR_STR="tcp://${chainHostname}-genesis.$NAMESPACE.svc.cluster.local:26658" +NODE_HOME_STR="/chain/genesis" + `; + + if (chain.numValidators && chain.numValidators > 1) { + const numValidators = chain.numValidators - 1; + script += ` +for i in $(seq 0 ${numValidators - 1}); do + NODE_LISTEN_ADDR_STR="tcp://${chainHostname}-validator-$i.${chainHostname}-validator.$NAMESPACE.svc.cluster.local:26658,$NODE_LISTEN_ADDR_STR" + NODE_HOME_STR="/chain/validator-$i,$NODE_HOME_STR" +done + `; + } + + script += ` +/chain/cometmock --block-time=${blockTime} $NODE_LISTEN_ADDR_STR /chain/genesis/config/genesis.json tcp://0.0.0.0:22331 $NODE_HOME_STR grpc + `; + + return script.trim(); + } + + private getCometPostStartScript(chain: Chain): string { + if (!chain.numValidators || chain.numValidators <= 1) { + return 'echo "No additional validators to create"'; + } + + const numValidators = chain.numValidators - 1; + return ` +set -eux + +sleep 10 + +for i in $(seq 0 ${numValidators - 1}); do + $CHAIN_BIN keys list --keyring-backend test --home /chain/validator-$i --output json | jq + VAL_KEY_NAME="$(jq -r '.validators[0].name' $KEYS_CONFIG)-$i" + echo "Create validator.... $VAL_KEY_NAME" + VAL_NAME=$VAL_KEY_NAME \\ + NODE_URL="http://0.0.0.0:22331" \\ + NODE_ARGS="--home /chain/validator-$i" \\ + GAS="1000000" \\ + bash -e /scripts/create-validator.sh +done + `.trim(); + } +} + +/** + * Main CometMock generator + * Orchestrates Service and StatefulSet generation for CometMock + */ +export class CometMockGenerator implements IGenerator { + private config: StarshipConfig; + private chain: Chain; + private generators: Array; + + constructor(chain: Chain, config: StarshipConfig) { + this.config = config; + this.chain = chain; + this.generators = []; + + // Only create CometMock resources if enabled + if (this.chain.cometmock?.enabled) { + this.generators = [ + new CometMockServiceGenerator(this.chain, this.config), + new CometMockStatefulSetGenerator(this.chain, this.config) + ]; + } + } + + generate(): Array { + return this.generators.flatMap((generator) => generator.generate()); + } +} diff --git a/packages/packages/generator/src/builders/chains/cosmos/configmap.ts b/packages/packages/generator/src/builders/chains/cosmos/configmap.ts index a7bdf27fd..793cbe03d 100644 --- a/packages/packages/generator/src/builders/chains/cosmos/configmap.ts +++ b/packages/packages/generator/src/builders/chains/cosmos/configmap.ts @@ -78,20 +78,29 @@ export class GlobalScriptsConfigMapGenerator implements IGenerator { return []; } + // Only include specific scripts that should be in setup-scripts configmap + const requiredScripts = [ + 'transfer-tokens.sh', + 'ibc-connection.sh', + 'create-ics.sh' + ]; + const data: { [key: string]: string } = {}; try { - const scriptFiles = fs - .readdirSync(scriptsDir) - .filter((file) => file.endsWith('.sh')); + requiredScripts.forEach((fileName) => { + const filePath = path.join(scriptsDir, fileName); + if (fs.existsSync(filePath)) { + data[fileName] = fs.readFileSync(filePath, 'utf-8'); + } else { + console.warn( + `Warning: Required script ${fileName} not found in ${scriptsDir}. Skipping.` + ); + } + }); - if (scriptFiles.length === 0) { + if (Object.keys(data).length === 0) { return []; } - - scriptFiles.forEach((fileName) => { - const filePath = path.join(scriptsDir, fileName); - data[fileName] = fs.readFileSync(filePath, 'utf-8'); - }); } catch (error) { console.warn( `Warning: Could not read global scripts directory. Error: ${(error as Error).message}. Skipping.` diff --git a/packages/packages/generator/src/builders/chains/cosmos/genesis.ts b/packages/packages/generator/src/builders/chains/cosmos/genesis.ts index 17e0627c2..69906c850 100644 --- a/packages/packages/generator/src/builders/chains/cosmos/genesis.ts +++ b/packages/packages/generator/src/builders/chains/cosmos/genesis.ts @@ -31,7 +31,7 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator { 'app.kubernetes.io/component': 'chain', 'app.kubernetes.io/part-of': helpers.getChainId(processedChain), 'app.kubernetes.io/id': helpers.getChainId(processedChain), - 'app.kubernetes.io/name': `${helpers.getHostname(processedChain)}-genesis`, + 'app.kubernetes.io/name': `${helpers.getChainId(processedChain)}-genesis`, 'app.kubernetes.io/type': `${helpers.getChainId(processedChain)}-statefulset`, 'app.kubernetes.io/role': 'genesis', 'starship.io/chain-name': processedChain.name @@ -225,7 +225,7 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator { ...helpers.getChainEnvVars(chain), ...helpers.getTimeoutEnvVars(this.config.timeouts || {}), { name: 'KEYS_CONFIG', value: '/configs/keys.json' }, - { name: 'METRICS', value: String(chain.metrics || false) } + { name: 'METRICS', value: String(chain.metrics) } ], command: ['bash', '-c', this.getConfigInitScript(chain)], resources: helpers.getNodeResources(chain, this.config), diff --git a/packages/packages/generator/src/builders/chains/cosmos/index.ts b/packages/packages/generator/src/builders/chains/cosmos/index.ts index d0b4bcf70..b4a72037f 100644 --- a/packages/packages/generator/src/builders/chains/cosmos/index.ts +++ b/packages/packages/generator/src/builders/chains/cosmos/index.ts @@ -1,5 +1,6 @@ import { ScriptManager } from '../../../scripts'; import { GeneratorConfig, IGenerator, Manifest } from '../../../types'; +import { CometMockGenerator } from './cometmock'; import { CosmosConfigMapGenerator, GlobalConfigMapGenerator @@ -48,6 +49,9 @@ export class CosmosBuilder implements IGenerator { this.generators.push( new CosmosConfigMapGenerator(chain, this.config, this.scriptManager) ); + + // CometMock (if enabled) + this.generators.push(new CometMockGenerator(chain, this.config)); }); } diff --git a/packages/packages/generator/src/builders/chains/cosmos/service.ts b/packages/packages/generator/src/builders/chains/cosmos/service.ts index cc4c563ee..c7f3ca209 100644 --- a/packages/packages/generator/src/builders/chains/cosmos/service.ts +++ b/packages/packages/generator/src/builders/chains/cosmos/service.ts @@ -7,17 +7,29 @@ import { IGenerator, Manifest } from '../../../types'; class CosmosGenesisServiceGenerator implements IGenerator { private config: StarshipConfig; private chain: Chain; + private ports: string[]; constructor(chain: Chain, config: StarshipConfig) { this.config = config; this.chain = chain; + this.ports = [ + 'p2p', + 'address', + 'grpc', + 'grpc-web', + 'rest', + 'rpc', + 'metrics', + 'exposer', + 'faucet' + ]; } labels(): Record { return { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'chain', - 'app.kubernetes.io/name': `${helpers.getHostname(this.chain)}-genesis`, + 'app.kubernetes.io/name': `${helpers.getChainId(this.chain)}-genesis`, 'app.kubernetes.io/type': `${helpers.getChainId(this.chain)}-service`, 'app.kubernetes.io/role': 'genesis', 'starship.io/chain-name': this.chain.name, @@ -56,7 +68,7 @@ class CosmosGenesisServiceGenerator implements IGenerator { clusterIP: 'None', ports, selector: { - 'app.kubernetes.io/name': `${helpers.getHostname(this.chain)}-genesis` + 'app.kubernetes.io/name': `${helpers.getChainId(this.chain)}-genesis` } } } @@ -77,7 +89,7 @@ class CosmosValidatorServiceGenerator implements IGenerator { return { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'chain', - 'app.kubernetes.io/name': `${helpers.getHostname(this.chain)}-validator`, + 'app.kubernetes.io/name': `${helpers.getChainId(this.chain)}-validator`, 'app.kubernetes.io/role': 'validator', 'app.kubernetes.io/type': `${helpers.getChainId(this.chain)}-service`, 'starship.io/chain-name': this.chain.name, @@ -115,7 +127,7 @@ class CosmosValidatorServiceGenerator implements IGenerator { clusterIP: 'None', ports, selector: { - 'app.kubernetes.io/name': `${helpers.getHostname(this.chain)}-validator` + 'app.kubernetes.io/name': `${helpers.getChainId(this.chain)}-validator` } } } diff --git a/packages/packages/generator/src/builders/chains/cosmos/validator.ts b/packages/packages/generator/src/builders/chains/cosmos/validator.ts index d915ceb30..77a813de9 100644 --- a/packages/packages/generator/src/builders/chains/cosmos/validator.ts +++ b/packages/packages/generator/src/builders/chains/cosmos/validator.ts @@ -31,7 +31,7 @@ export class CosmosValidatorStatefulSetGenerator implements IGenerator { 'app.kubernetes.io/component': 'chain', 'app.kubernetes.io/part-of': helpers.getChainId(processedChain), 'app.kubernetes.io/id': helpers.getChainId(processedChain), - 'app.kubernetes.io/name': `${helpers.getHostname(processedChain)}-validator`, + 'app.kubernetes.io/name': `${helpers.getChainId(processedChain)}-validator`, 'app.kubernetes.io/type': `${helpers.getChainId(processedChain)}-statefulset`, 'app.kubernetes.io/role': 'validator', 'starship.io/chain-name': processedChain.name diff --git a/packages/packages/generator/src/builders/index.ts b/packages/packages/generator/src/builders/index.ts index 4732f0bd6..11e7dd1a8 100644 --- a/packages/packages/generator/src/builders/index.ts +++ b/packages/packages/generator/src/builders/index.ts @@ -19,6 +19,268 @@ export class BuilderManager { this.config = applyDefaults(config); } + getConfig(): GeneratorConfig { + return this.config; + } + + /** + * IntOrString field definitions with explicit paths + * '*' represents array indices (e.g., containers[0], ports[1]) + */ + private readonly INT_OR_STRING_FIELDS = [ + // Service ports + { + path: ['spec', 'ports', '*', 'targetPort'], + description: 'Service targetPort' + }, + + // Container probes - direct containers + { + path: ['spec', 'containers', '*', 'livenessProbe', 'httpGet', 'port'], + description: 'Container liveness HTTP probe port' + }, + { + path: ['spec', 'containers', '*', 'readinessProbe', 'httpGet', 'port'], + description: 'Container readiness HTTP probe port' + }, + { + path: ['spec', 'containers', '*', 'startupProbe', 'httpGet', 'port'], + description: 'Container startup HTTP probe port' + }, + { + path: ['spec', 'containers', '*', 'livenessProbe', 'tcpSocket', 'port'], + description: 'Container liveness TCP probe port' + }, + { + path: ['spec', 'containers', '*', 'readinessProbe', 'tcpSocket', 'port'], + description: 'Container readiness TCP probe port' + }, + { + path: ['spec', 'containers', '*', 'startupProbe', 'tcpSocket', 'port'], + description: 'Container startup TCP probe port' + }, + + // Pod template containers (Deployment/StatefulSet/etc) + { + path: [ + 'spec', + 'template', + 'spec', + 'containers', + '*', + 'livenessProbe', + 'httpGet', + 'port' + ], + description: 'Pod template liveness HTTP probe port' + }, + { + path: [ + 'spec', + 'template', + 'spec', + 'containers', + '*', + 'readinessProbe', + 'httpGet', + 'port' + ], + description: 'Pod template readiness HTTP probe port' + }, + { + path: [ + 'spec', + 'template', + 'spec', + 'containers', + '*', + 'startupProbe', + 'httpGet', + 'port' + ], + description: 'Pod template startup HTTP probe port' + }, + { + path: [ + 'spec', + 'template', + 'spec', + 'containers', + '*', + 'livenessProbe', + 'tcpSocket', + 'port' + ], + description: 'Pod template liveness TCP probe port' + }, + { + path: [ + 'spec', + 'template', + 'spec', + 'containers', + '*', + 'readinessProbe', + 'tcpSocket', + 'port' + ], + description: 'Pod template readiness TCP probe port' + }, + { + path: [ + 'spec', + 'template', + 'spec', + 'containers', + '*', + 'startupProbe', + 'tcpSocket', + 'port' + ], + description: 'Pod template startup TCP probe port' + }, + + // Container ports + { + path: ['spec', 'containers', '*', 'ports', '*', 'containerPort'], + description: 'Container port' + }, + { + path: [ + 'spec', + 'template', + 'spec', + 'containers', + '*', + 'ports', + '*', + 'containerPort' + ], + description: 'Pod template container port' + }, + + // Rolling update strategies + { + path: ['spec', 'strategy', 'rollingUpdate', 'maxSurge'], + description: 'Deployment rolling update maxSurge' + }, + { + path: ['spec', 'strategy', 'rollingUpdate', 'maxUnavailable'], + description: 'Deployment rolling update maxUnavailable' + }, + { + path: ['spec', 'updateStrategy', 'rollingUpdate', 'maxSurge'], + description: 'StatefulSet rolling update maxSurge' + }, + { + path: ['spec', 'updateStrategy', 'rollingUpdate', 'maxUnavailable'], + description: 'StatefulSet rolling update maxUnavailable' + }, + + // Pod disruption budgets + { + path: ['spec', 'maxUnavailable'], + description: 'PodDisruptionBudget maxUnavailable' + }, + { + path: ['spec', 'minAvailable'], + description: 'PodDisruptionBudget minAvailable' + } + ]; + + /** + * Check if a string value represents a numeric value + */ + private isNumericString(value: string): boolean { + const numericValue = Number(value); + return ( + !isNaN(numericValue) && + isFinite(numericValue) && + value.trim() === String(numericValue) + ); + } + + /** + * Check if a field path matches any of the known IntOrString patterns + */ + private isIntOrStringField(currentPath: string[]): boolean { + return this.INT_OR_STRING_FIELDS.some((pattern) => + this.pathMatches(currentPath, pattern.path) + ); + } + + /** + * Check if a path matches a pattern (with '*' as wildcard for array indices) + */ + private pathMatches(actualPath: string[], patternPath: string[]): boolean { + if (actualPath.length !== patternPath.length) { + return false; + } + + for (let i = 0; i < patternPath.length; i++) { + const pattern = patternPath[i]; + const actual = actualPath[i]; + + // '*' matches any array index (numeric string) + if (pattern === '*') { + if (isNaN(Number(actual))) { + return false; // Expected array index, got non-numeric + } + continue; + } + + // Exact match required for non-wildcard segments + if (pattern !== actual) { + return false; + } + } + + return true; + } + + /** + * Recursively normalize IntOrString fields throughout a manifest + * Convert numeric strings to numbers, keep named references as strings + */ + private normalizeIntOrStringFields(obj: any, path: string[] = []): any { + if (obj === null || obj === undefined) { + return obj; + } + + // Handle arrays + if (Array.isArray(obj)) { + return obj.map((item, index) => + this.normalizeIntOrStringFields(item, [...path, String(index)]) + ); + } + + // Handle primitive types + if (typeof obj !== 'object') { + return obj; + } + + // Handle objects + const result: any = {}; + for (const [key, value] of Object.entries(obj)) { + const currentPath = [...path, key]; + + if (typeof value === 'string' && this.isIntOrStringField(currentPath)) { + // This is a known IntOrString field with a string value + if (this.isNumericString(value)) { + // Convert numeric strings to numbers + result[key] = Number(value); + } else { + // Keep named references as strings (e.g., "http", "https") + result[key] = value; + } + } else { + // Recursively process nested objects/arrays + result[key] = this.normalizeIntOrStringFields(value, currentPath); + } + } + return result; + } + private getManifestOutputPath(manifest: Manifest, baseDir: string): string { const labels = manifest.metadata?.labels || {}; const component = labels['app.kubernetes.io/component']; @@ -48,7 +310,7 @@ export class BuilderManager { const fileName = cleanName ? `${cleanName}-${kind}.yaml` : `${kind}.yaml`; return path.join(baseDir, component as string, fileName); } else { - // Fallback: outputs/-.yaml + // Fallback: outputs/-.yaml return path.join(baseDir, `${name}-${kind}.yaml`); } } @@ -60,8 +322,92 @@ export class BuilderManager { fs.mkdirSync(dir, { recursive: true }); } + // Normalize IntOrString fields before YAML serialization + const normalizedManifest = this.normalizeIntOrStringFields(manifest); + + // Configure YAML dump options for proper script formatting + const yamlOptions: yaml.DumpOptions = { + lineWidth: -1, // Disable line wrapping + noRefs: true, // Avoid references + styles: { + '!!str': this.getStringStyle.bind(this) + } + }; + // Write YAML file - fs.writeFileSync(filePath, yaml.dump(manifest)); + fs.writeFileSync(filePath, yaml.dump(normalizedManifest, yamlOptions)); + } + + /** + * Determine the appropriate YAML string style based on content + */ + private getStringStyle( + str: string + ): 'literal' | 'folded' | 'plain' | 'quoted' { + // Use literal style for shell scripts and multiline content that needs to preserve newlines + if (this.isShellScript(str) || this.isMultilineWithSpecialFormatting(str)) { + return 'literal'; + } + + // Use plain style for simple strings + return 'plain'; + } + + /** + * Check if string content appears to be a shell script + */ + private isShellScript(str: string): boolean { + const lines = str.split('\n'); + + // Check for shell script indicators + const shellIndicators = [ + /^#!/, // Shebang + /^set\s+/, // Shell options (set -e, set -x, etc.) + /^\s*echo\s+/, // Echo commands + /^\s*if\s*\[/, // Conditional statements + /^\s*for\s+\w+\s+in/, // For loops + /^\s*while\s+/, // While loops + /^\s*function\s+/, // Function definitions + /\$\{?\w+\}?/, // Variable references + /\|\s*\w+/, // Pipes + /&&|\|\|/ // Logical operators + ]; + + // Check if multiple lines contain shell patterns + let shellPatternCount = 0; + for (const line of lines.slice(0, 10)) { + // Check first 10 lines + if (shellIndicators.some((pattern) => pattern.test(line))) { + shellPatternCount++; + } + } + + return shellPatternCount >= 2; // Require at least 2 shell patterns + } + + /** + * Check if string has multiline content that needs special formatting + */ + private isMultilineWithSpecialFormatting(str: string): boolean { + const lines = str.split('\n'); + + // More than 3 lines with meaningful content + if (lines.filter((line) => line.trim().length > 0).length <= 3) { + return false; + } + + // Check for configuration files, scripts, or structured content + const needsFormatting = [ + /^\s*[A-Z_]+\s*=\s*/, // Environment variables + /^\s*\[[^\]]+\]/, // Config sections + /^\s*#\s*/, // Comments + /^\s*\w+:\s*/, // Key-value pairs + /^\s*-\s+/ // List items + ]; + + return lines.some((line) => + needsFormatting.some((pattern) => pattern.test(line)) + ); } private writeManifests(manifests: Manifest[], outputDir: string): void { diff --git a/packages/packages/generator/src/builders/registry.ts b/packages/packages/generator/src/builders/registry.ts index 87c372e3f..d22029a7f 100644 --- a/packages/packages/generator/src/builders/registry.ts +++ b/packages/packages/generator/src/builders/registry.ts @@ -1,4 +1,4 @@ -import { StarshipConfig } from '@starship-ci/types'; +import { Chain, StarshipConfig } from '@starship-ci/types'; import { ConfigMap, Deployment, Service } from 'kubernetesjs'; import * as helpers from '../helpers'; @@ -15,47 +15,134 @@ export class RegistryConfigMapGenerator implements IGenerator { this.config = config; } + getChainAssetList(chain: Chain): Record { + const chainName = chain.name === 'custom' ? chain.id : chain.name; + + let assets; + if (chain.assets && chain.assets.length > 0) { + assets = chain.assets; + } else { + assets = [ + { + description: `The denom for token ${chain.denom}`, + base: chain.denom, + name: chain.denom, + display: chain.denom, + symbol: chain.denom.toUpperCase(), + denom_units: [ + { + denom: chain.denom, + exponent: 0 + }, + { + denom: chain.denom, + exponent: 6 + } + ], + coingecko_id: chain.name + } + ]; + } + + return { + $schema: '../assetlist.schema.json', + chain_name: chainName, + assets: assets + }; + } + + getChainConfig(chain: Chain): Record { + const chainName = chain.name === 'custom' ? chain.id : chain.name; + + const config: Record = { + $schema: '../chain.schema.json', + chain_name: chainName, + status: 'live', + network_type: 'devnet', + chain_id: chain.id, + pretty_name: `${chain.prettyName} Devnet`, + bech32_prefix: chain.prefix, + daemon_name: chain.binary, + node_home: chain.home, + key_algos: ['secp256k1'], + slip44: String(chain.coinType), + fees: { + fee_tokens: [ + { + denom: chain.denom, + fixed_min_gas_price: 0, + low_gas_price: 0, + average_gas_price: 0.025, + high_gas_price: 0.04 + } + ] + }, + staking: { + staking_tokens: [ + { + denom: chain.denom + } + ], + lock_duration: { + time: '1209600s' + } + }, + codebase: { + git_repo: chain.repo, + compatible_versions: [], + binaries: {}, + ics_enabled: [], + versions: [], + consensus: { + type: 'tendermint' + } + }, + peers: { + seeds: [], + persistent_peers: [] + } + }; + + // Add explorers section if explorer is enabled (equivalent to Helm's if condition) + if (this.config.explorer?.enabled) { + config.explorers = [ + { + kind: this.config.explorer.type, + url: `http://localhost:${this.config.explorer.ports?.rest}` + } + ]; + } + + return config; + } + generate(): Array { - const chainConfigs: Record = {}; - const assetLists: Record = {}; + const configMaps: Array = []; this.config.chains.forEach((chain) => { - const hostname = helpers.getChainName(String(chain.id)); - chainConfigs[`${hostname}.json`] = JSON.stringify({ - chain_name: chain.name, - api: { - rpc: `http://${hostname}-genesis.$(NAMESPACE).svc.cluster.local:26657`, - grpc: `http://${hostname}-genesis.$(NAMESPACE).svc.cluster.local:9090`, - rest: `http://${hostname}-genesis.$(NAMESPACE).svc.cluster.local:1317` - }, - assets: chain.assets || [] - }); - - assetLists[`${hostname}.json`] = JSON.stringify({ - chain_name: chain.name, - assets: chain.assets || [] - }); - }); + const chainConfig = this.getChainConfig(chain); + const assetList = this.getChainAssetList(chain); - return [ - { + configMaps.push({ apiVersion: 'v1', kind: 'ConfigMap', metadata: { - name: 'registry-config', + name: `registry-${helpers.getChainName(String(chain.id))}`, labels: { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'registry', 'app.kubernetes.io/part-of': 'starship', - 'app.kubernetes.io/name': 'registry-config' + 'app.kubernetes.io/name': `registry-${helpers.getChainName(String(chain.id))}` } }, data: { - ...chainConfigs, - ...assetLists + 'chain.json': JSON.stringify(chainConfig, null, 2), + 'assetlist.json': JSON.stringify(assetList, null, 2) } - } - ]; + }); + }); + + return configMaps; } } @@ -84,18 +171,21 @@ export class RegistryServiceGenerator implements IGenerator { } }, spec: { + clusterIP: 'None', selector: { - app: 'registry' + 'app.kubernetes.io/name': 'registry' }, ports: [ { name: 'http', port: 8080, + protocol: 'TCP', targetPort: '8080' }, { name: 'grpc', port: 9090, + protocol: 'TCP', targetPort: '9090' } ] @@ -117,14 +207,14 @@ export class RegistryDeploymentGenerator implements IGenerator { generate(): Array { const volumeMounts = this.config.chains.map((chain) => ({ - name: `chain-${helpers.getChainName(String(chain.id))}`, + name: `registry-${helpers.getChainName(String(chain.id))}`, mountPath: `/chains/${chain.id}` })); const volumes = this.config.chains.map((chain) => ({ - name: `chain-${helpers.getChainName(String(chain.id))}`, + name: `registry-${helpers.getChainName(String(chain.id))}`, configMap: { - name: `chain-${helpers.getChainName(String(chain.id))}` + name: `registry-${helpers.getChainName(String(chain.id))}` } })); @@ -143,39 +233,64 @@ export class RegistryDeploymentGenerator implements IGenerator { }, spec: { replicas: 1, + revisionHistoryLimit: 3, selector: { matchLabels: { - app: 'registry' + 'app.kubernetes.io/name': 'registry' } }, template: { metadata: { + annotations: { + quality: 'release', + role: 'api-gateway', + sla: 'high', + tier: 'gateway' + }, labels: { - app: 'registry', - ...helpers.getCommonLabels(this.config) + ...helpers.getCommonLabels(this.config), + 'app.kubernetes.io/component': 'registry', + 'app.kubernetes.io/part-of': 'starship', + 'app.kubernetes.io/name': 'registry' } }, spec: { + initContainers: [ + helpers.generateWaitInitContainer( + this.config.chains.map((chain) => String(chain.id)), + this.config.exposer.ports.rest, + this.config + ) + ], containers: [ { name: 'registry', image: this.config.registry?.image, - ports: [ + env: [ { - name: 'http', - containerPort: 8080 + name: 'NAMESPACE', + valueFrom: { + fieldRef: { + fieldPath: 'metadata.namespace' + } + } }, { - name: 'grpc', - containerPort: 9090 - } - ], - env: [ + name: 'REGISTRY_CHAIN_CLIENT_IDS', + value: this.config.chains + .map((chain) => String(chain.id)) + .join(',') + }, + { + name: 'REGISTRY_CHAIN_CLIENT_NAMES', + value: this.config.chains + .map((chain) => chain.name) + .join(',') + }, { name: 'REGISTRY_CHAIN_CLIENT_RPCS', - value: helpers.getChainRpcAddrs( - this.config.chains, - this.config + value: helpers.getChainInternalRpcAddrs( + this.config.chains ) }, { @@ -202,6 +317,10 @@ export class RegistryDeploymentGenerator implements IGenerator { { name: 'REGISTRY_CHAIN_CLIENT_EXPOSERS', value: helpers.getChainExposerAddrs(this.config.chains) + }, + { + name: 'REGISTRY_CHAIN_REGISTRY', + value: '/chains' } ], volumeMounts, @@ -209,16 +328,14 @@ export class RegistryDeploymentGenerator implements IGenerator { this.config.registry?.resources ), readinessProbe: { - httpGet: { - path: '/health', + tcpSocket: { port: '8080' }, initialDelaySeconds: 5, periodSeconds: 10 }, livenessProbe: { - httpGet: { - path: '/health', + tcpSocket: { port: '8080' }, initialDelaySeconds: 15, diff --git a/packages/packages/generator/src/builders/relayers/base.ts b/packages/packages/generator/src/builders/relayers/base.ts index 965271808..72eae6cae 100644 --- a/packages/packages/generator/src/builders/relayers/base.ts +++ b/packages/packages/generator/src/builders/relayers/base.ts @@ -103,26 +103,14 @@ export class BaseRelayerBuilder implements IGenerator { * Generate wait init containers for all chains */ protected generateWaitInitContainers(): Container[] { - return this.relayer.chains.map((chainId) => { - const chain = this.getChainConfig(chainId); - const chainName = helpers.getChainName(String(chain.id)); - - return { - name: `init-${chainName}`, - image: 'ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0', - imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', - command: ['bash', '-c'], - args: [ - `echo "Waiting for ${chainName} service..."\nwait-for-service ${chainName}-genesis.$(NAMESPACE).svc.cluster.local:26657` - ], - env: [ - { - name: 'NAMESPACE', - valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } - } - ] - }; - }); + const exposerPort = this.config.exposer?.ports?.rest || 8081; + return [ + helpers.generateWaitInitContainer( + this.relayer.chains, + exposerPort, + this.config + ) + ]; } /** diff --git a/packages/packages/generator/src/builders/relayers/go-relayer.ts b/packages/packages/generator/src/builders/relayers/go-relayer.ts index ca1612bbb..67f549904 100644 --- a/packages/packages/generator/src/builders/relayers/go-relayer.ts +++ b/packages/packages/generator/src/builders/relayers/go-relayer.ts @@ -211,28 +211,15 @@ export class GoRelayerStatefulSetGenerator implements IGenerator { private generateInitContainers(): Container[] { const initContainers: Container[] = []; - // Add wait init containers for all chains - this.relayer.chains.forEach((chainId) => { - const chain = this.config.chains.find((c) => String(c.id) === chainId); - if (!chain) return; - - const chainName = helpers.getChainName(String(chain.id)); - initContainers.push({ - name: `init-${chainName}`, - image: 'ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0', - imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', - command: ['bash', '-c'], - args: [ - `echo "Waiting for ${chainName} service..."\nwait-for-service ${chainName}-genesis.$(NAMESPACE).svc.cluster.local:26657` - ], - env: [ - { - name: 'NAMESPACE', - valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } - } - ] - }); - }); + // Add single wait init container for all chains + const exposerPort = this.config.exposer?.ports?.rest || 8081; + initContainers.push( + helpers.generateWaitInitContainer( + this.relayer.chains, + exposerPort, + this.config + ) + ); // Add go-relayer init container initContainers.push(this.generateGoRelayerInitContainer()); @@ -284,7 +271,13 @@ export class GoRelayerStatefulSetGenerator implements IGenerator { this.relayer.image || 'ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1', imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', - env: [{ name: 'RELAYER_DIR', value: '/root/.relayer' }], + env: [ + { name: 'RELAYER_DIR', value: '/root/.relayer' }, + { + name: 'NAMESPACE', + valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } + } + ], command: ['bash', '-c'], args: [ 'RLY_INDEX=${HOSTNAME##*-}\necho "Relayer Index: $RLY_INDEX"\nrly start' diff --git a/packages/packages/generator/src/builders/relayers/hermes.ts b/packages/packages/generator/src/builders/relayers/hermes.ts index 72c1fbe35..98d15ca11 100644 --- a/packages/packages/generator/src/builders/relayers/hermes.ts +++ b/packages/packages/generator/src/builders/relayers/hermes.ts @@ -116,14 +116,14 @@ id = "${chainId}" type = "CosmosSdk" key_name = "${chainId}" ${chain.ics?.enabled ? 'ccv_consumer_chain = true' : ''} -rpc_addr = "http://${chainName}-genesis.$(NAMESPACE).svc.cluster.local:26657" -grpc_addr = "http://${chainName}-genesis.$(NAMESPACE).svc.cluster.local:9090" +rpc_addr = "http://${chainName}-genesis.$NAMESPACE.svc.cluster.local:26657" +grpc_addr = "http://${chainName}-genesis.$NAMESPACE.svc.cluster.local:9090" ${ eventSourceConfig.mode === 'pull' ? `event_source = { mode = 'pull', interval = '${ eventSourceConfig.interval || '500ms' }' }` - : `event_source = { mode = 'push', url = "ws://${chainName}-genesis.$(NAMESPACE).svc.cluster.local:26657/websocket", batch_delay = '${ + : `event_source = { mode = 'push', url = "ws://${chainName}-genesis.$NAMESPACE.svc.cluster.local:26657/websocket", batch_delay = '${ eventSourceConfig.batch_delay || '500ms' }' }` } @@ -295,28 +295,15 @@ export class HermesStatefulSetGenerator implements IGenerator { volumeMounts: [{ mountPath: '/exposer', name: 'exposer' }] }); - // Add wait init containers for all chains - this.relayer.chains.forEach((chainId) => { - const chain = this.config.chains.find((c) => String(c.id) === chainId); - if (!chain) return; - - const chainName = helpers.getChainName(String(chain.id)); - initContainers.push({ - name: `init-${chainName}`, - image: 'ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0', - imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', - command: ['bash', '-c'], - args: [ - `echo "Waiting for ${chainName} service..."\nwait-for-service ${chainName}-genesis.$(NAMESPACE).svc.cluster.local:26657` - ], - env: [ - { - name: 'NAMESPACE', - valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } - } - ] - }); - }); + // Add single wait init container for all chains + const exposerPort = this.config.exposer?.ports?.rest || 8081; + initContainers.push( + helpers.generateWaitInitContainer( + this.relayer.chains, + exposerPort, + this.config + ) + ); // Add hermes init container initContainers.push(this.generateHermesInitContainer()); @@ -367,7 +354,13 @@ export class HermesStatefulSetGenerator implements IGenerator { image: this.relayer.image || 'ghcr.io/cosmology-tech/starship/hermes:1.10.0', imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', - env: [{ name: 'RELAYER_DIR', value: '/root/.hermes' }], + env: [ + { name: 'RELAYER_DIR', value: '/root/.hermes' }, + { + name: 'NAMESPACE', + valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } + } + ], command: ['bash', '-c'], args: [ 'RLY_INDEX=${HOSTNAME##*-}\necho "Relayer Index: $RLY_INDEX"\nhermes start' @@ -388,8 +381,7 @@ export class HermesStatefulSetGenerator implements IGenerator { // Exposer container containers.push({ name: 'exposer', - image: - this.relayer.image || 'ghcr.io/cosmology-tech/starship/hermes:1.10.0', + image: this.relayer.image, imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', env: [ { name: 'EXPOSER_HTTP_PORT', value: '8081' }, @@ -437,6 +429,10 @@ mkdir -p $RELAYER_DIR cp /configs/config.toml $RELAYER_DIR/config.toml cp /configs/config-cli.toml $RELAYER_DIR/config-cli.toml +# Replace namespace placeholder with actual namespace environment variable +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config.toml +sed -i "s|\\$NAMESPACE|$NAMESPACE|g" $RELAYER_DIR/config-cli.toml + MNEMONIC=$(jq -r ".relayers[$RLY_INDEX].mnemonic" $KEYS_CONFIG) echo $MNEMONIC > $RELAYER_DIR/mnemonic.txt MNEMONIC_CLI=$(jq -r ".relayers_cli[$RLY_INDEX].mnemonic" $KEYS_CONFIG) @@ -444,20 +440,22 @@ echo $MNEMONIC_CLI > $RELAYER_DIR/mnemonic-cli.txt `; - // Add key creation and funding for each chain + // Add key creation and funding for each chain (both regular and CLI keys) this.relayer.chains.forEach((chainId) => { const chain = this.config.chains.find((c) => String(c.id) === chainId); if (!chain) return; const chainName = helpers.getChainName(String(chain.id)); + const hdPath = chain.hdPath || "m/44'/118'/0'/0/0"; + + // Create regular key command += ` echo "Creating key for ${chainId}..." hermes keys add \\ --chain ${chainId} \\ --mnemonic-file $RELAYER_DIR/mnemonic.txt \\ --key-name ${chainId} \\ - --hd-path "${chain.hdPath || "m/44'/118'/0'/0/0"}" - + --hd-path "${hdPath}" DENOM="${chain.denom}" RLY_ADDR=$(hermes --json keys list --chain ${chainId} | tail -1 | jq -r '.result."${chainId}".account') @@ -466,31 +464,47 @@ bash -e /scripts/transfer-tokens.sh \\ $RLY_ADDR \\ $DENOM \\ http://${chainName}-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ - "${chain.faucet?.enabled || false}" || true + "${chain.faucet?.enabled}" || true + +echo "Creating key for ${chainId}-cli..." +hermes keys add \\ + --chain ${chainId} \\ + --mnemonic-file $RELAYER_DIR/mnemonic-cli.txt \\ + --key-name ${chainId}-cli \\ + --hd-path "${hdPath}" +RLY_ADDR_CLI=$(hermes --json keys list --chain ${chainId} | tail -1 | jq -r '.result."${chainId}-cli".account') + +echo "Transfer tokens to address $RLY_ADDR_CLI" +bash -e /scripts/transfer-tokens.sh \\ + $RLY_ADDR_CLI \\ + $DENOM \\ + http://${chainName}-genesis.$NAMESPACE.svc.cluster.local:8000/credit \\ + "${chain.faucet?.enabled}" || true `; }); // Add channel creation if specified if (this.relayer.channels && this.relayer.channels.length > 0) { this.relayer.channels.forEach((channel) => { + // Build command arguments array and filter out empty values + const args = [ + 'hermes create channel', + channel['new-connection'] ? '--new-client-connection --yes' : '', + channel['b-chain'] ? `--b-chain ${channel['b-chain']}` : '', + channel['a-connection'] + ? `--a-connection ${channel['a-connection']}` + : '', + channel['channel-version'] + ? `--channel-version ${channel['channel-version']}` + : '', + channel.order ? `--order ${channel.order}` : '', + `--a-chain ${channel['a-chain']}`, + `--a-port ${channel['a-port']}`, + `--b-port ${channel['b-port']}` + ].filter((arg) => arg.trim() !== ''); // Remove empty arguments + command += ` -hermes create channel \\ - ${channel['new-connection'] ? '--new-client-connection --yes \\' : ''} - ${channel['b-chain'] ? `--b-chain ${channel['b-chain']} \\` : ''} - ${ - channel['a-connection'] - ? `--a-connection ${channel['a-connection']} \\` - : '' - } - ${ - channel['channel-version'] - ? `--channel-version ${channel['channel-version']} \\` - : '' - } - ${channel.order ? `--order ${channel.order} \\` : ''} - --a-chain ${channel['a-chain']} \\ - --a-port ${channel['a-port']} \\ - --b-port ${channel['b-port']} +${args.join(' \\\n ')} `; }); } diff --git a/packages/packages/generator/src/builders/relayers/neutron-query.ts b/packages/packages/generator/src/builders/relayers/neutron-query.ts index c961cff63..8a3363cb3 100644 --- a/packages/packages/generator/src/builders/relayers/neutron-query.ts +++ b/packages/packages/generator/src/builders/relayers/neutron-query.ts @@ -247,28 +247,15 @@ export class NeutronQueryStatefulSetGenerator implements IGenerator { private generateInitContainers(): Container[] { const initContainers: Container[] = []; - // Add wait init containers for all chains - this.relayer.chains.forEach((chainId) => { - const chain = this.config.chains.find((c) => String(c.id) === chainId); - if (!chain) return; - - const chainName = helpers.getChainName(String(chain.id)); - initContainers.push({ - name: `init-${chainName}`, - image: 'ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0', - imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', - command: ['bash', '-c'], - args: [ - `echo "Waiting for ${chainName} service..."\nwait-for-service ${chainName}-genesis.$(NAMESPACE).svc.cluster.local:26657` - ], - env: [ - { - name: 'NAMESPACE', - valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } - } - ] - }); - }); + // Add single wait init container for all chains + const exposerPort = this.config.exposer?.ports?.rest || 8081; + initContainers.push( + helpers.generateWaitInitContainer( + this.relayer.chains, + exposerPort, + this.config + ) + ); // Add neutron-query-relayer init container initContainers.push(this.generateNeutronQueryInitContainer()); diff --git a/packages/packages/generator/src/builders/relayers/ts-relayer.ts b/packages/packages/generator/src/builders/relayers/ts-relayer.ts index ddbabae25..5fac22440 100644 --- a/packages/packages/generator/src/builders/relayers/ts-relayer.ts +++ b/packages/packages/generator/src/builders/relayers/ts-relayer.ts @@ -285,28 +285,15 @@ export class TsRelayerStatefulSetGenerator implements IGenerator { private generateInitContainers(): Container[] { const initContainers: Container[] = []; - // Add wait init containers for all chains - this.relayer.chains.forEach((chainId) => { - const chain = this.config.chains.find((c) => String(c.id) === chainId); - if (!chain) return; - - const chainName = helpers.getChainName(String(chain.id)); - initContainers.push({ - name: `init-${chainName}`, - image: 'ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0', - imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', - command: ['bash', '-c'], - args: [ - `echo "Waiting for ${chainName} service..."\nwait-for-service ${chainName}-genesis.$(NAMESPACE).svc.cluster.local:26657` - ], - env: [ - { - name: 'NAMESPACE', - valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } - } - ] - }); - }); + // Add single wait init container for all chains + const exposerPort = this.config.exposer?.ports?.rest || 8081; + initContainers.push( + helpers.generateWaitInitContainer( + this.relayer.chains, + exposerPort, + this.config + ) + ); // Add ts-relayer init container initContainers.push(this.generateTsRelayerInitContainer()); @@ -358,7 +345,13 @@ export class TsRelayerStatefulSetGenerator implements IGenerator { this.relayer.image || 'ghcr.io/cosmology-tech/starship/ts-relayer:0.9.0', imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', - env: [{ name: 'RELAYER_DIR', value: '/root/.ts-relayer' }], + env: [ + { name: 'RELAYER_DIR', value: '/root/.ts-relayer' }, + { + name: 'NAMESPACE', + valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } + } + ], command: ['bash', '-c'], args: [ 'RLY_INDEX=${HOSTNAME##*-}\necho "Relayer Index: $RLY_INDEX"\nts-relayer start' diff --git a/packages/packages/generator/src/defaults.ts b/packages/packages/generator/src/defaults.ts index 967824f71..04e9a7d27 100644 --- a/packages/packages/generator/src/defaults.ts +++ b/packages/packages/generator/src/defaults.ts @@ -129,90 +129,89 @@ export class DefaultsManager { * Process explorer configuration by merging with defaults */ processExplorer(explorerConfig?: any): any { - if (!explorerConfig) return undefined; - const defaultExplorer = this.defaultsData.explorer || {}; - return deepMerge(defaultExplorer, explorerConfig); + return deepMerge(defaultExplorer, explorerConfig || {}); } /** * Process registry configuration by merging with defaults */ processRegistry(registryConfig?: any): any { - if (!registryConfig) return undefined; - const defaultRegistry = this.defaultsData.registry || {}; - return deepMerge(defaultRegistry, registryConfig); + return deepMerge(defaultRegistry, registryConfig || {}); } /** * Process faucet configuration by merging with defaults */ processFaucet(faucetConfig?: any): any { - if (!faucetConfig) return undefined; - - const defaultFaucet = this.defaultsData.faucet || {}; - return deepMerge(defaultFaucet, faucetConfig); + const defaultGlobalFaucet = this.defaultsData.faucet || {}; + + // Determine faucet type (default to 'starship') + const inputType = + faucetConfig && typeof faucetConfig === 'object' + ? faucetConfig.type + : undefined; + const defaultType = + defaultGlobalFaucet && typeof defaultGlobalFaucet === 'object' + ? (defaultGlobalFaucet as any).type + : undefined; + const faucetType = inputType || defaultType || 'starship'; + + // Get type-specific defaults (includes image) + const defaultTypeFaucet = this.getFaucetDefaults(faucetType) || {}; + + // Merge: global defaults + type-specific defaults + input config + const mergedDefaults = deepMerge(defaultGlobalFaucet, defaultTypeFaucet); + return deepMerge(mergedDefaults, faucetConfig || {}); } /** * Process monitoring configuration by merging with defaults */ processMonitoring(monitoringConfig?: any): any { - if (!monitoringConfig) return undefined; - const defaultMonitoring = this.defaultsData.monitoring || {}; - return deepMerge(defaultMonitoring, monitoringConfig); + return deepMerge(defaultMonitoring, monitoringConfig || {}); } /** * Process ingress configuration by merging with defaults */ processIngress(ingressConfig?: any): any { - if (!ingressConfig) return undefined; - const defaultIngress = this.defaultsData.ingress || {}; - return deepMerge(defaultIngress, ingressConfig); + return deepMerge(defaultIngress, ingressConfig || {}); } /** * Process exposer configuration by merging with defaults */ processExposer(exposerConfig?: Exposer): Exposer { - if (!exposerConfig) return undefined; - const defaultExposer = this.defaultsData.exposer || {}; - return deepMerge(defaultExposer, exposerConfig); + return deepMerge(defaultExposer, exposerConfig || {}); } /** * Process images configuration by merging with defaults */ processImages(imagesConfig?: any): any { - if (!imagesConfig) return undefined; - const defaultImages = this.defaultsData.images || {}; - return deepMerge(defaultImages, imagesConfig); + return deepMerge(defaultImages, imagesConfig || {}); } /** * Process resources configuration by merging with defaults */ processResources(resourcesConfig?: any): any { - if (!resourcesConfig) return undefined; - const defaultResources = this.defaultsData.resources || {}; - return deepMerge(defaultResources, resourcesConfig); + return deepMerge(defaultResources, resourcesConfig || {}); } /** * Process timeouts configuration by merging with defaults */ processTimeouts(timeoutsConfig?: any): any { - if (!timeoutsConfig) return undefined; - const defaultTimeouts = this.defaultsData.timeouts || {}; - return deepMerge(defaultTimeouts, timeoutsConfig); + return deepMerge(defaultTimeouts, timeoutsConfig || {}); } /** @@ -226,6 +225,43 @@ export class DefaultsManager { // Deep merge the configurations (relayer config takes precedence) const mergedRelayer = deepMerge(defaultRelayer, relayerConfig); + // Auto-generate channels if not provided (equivalent to Helm template logic) + if (!mergedRelayer.channels || mergedRelayer.channels.length === 0) { + // Check if ICS is enabled + if (mergedRelayer.ics?.enabled) { + // ICS case: create consumer/provider channel + transfer channel + mergedRelayer.channels = [ + { + 'a-chain': mergedRelayer.ics.consumer, + 'a-connection': 'connection-0', + 'a-port': 'consumer', + 'b-port': 'provider', + order: 'ordered', + 'channel-version': '1' + }, + { + 'a-chain': mergedRelayer.ics.consumer, + 'a-port': 'transfer', + 'b-port': 'transfer', + 'a-connection': 'connection-0' + } + ]; + } else { + // Regular case: create transfer channel between first two chains + if (mergedRelayer.chains && mergedRelayer.chains.length >= 2) { + mergedRelayer.channels = [ + { + 'a-chain': mergedRelayer.chains[0], + 'b-chain': mergedRelayer.chains[1], + 'a-port': 'transfer', + 'b-port': 'transfer', + 'new-connection': true + } + ]; + } + } + } + return mergedRelayer; } @@ -243,6 +279,11 @@ export class DefaultsManager { ...chainConfig }; + // set default metrics to false + if (mergedChain.metrics === undefined) { + mergedChain.metrics = false; + } + // Process faucet configuration const defaultFaucet = this.getFaucetDefaults('starship'); const faucetConfig = { @@ -324,44 +365,34 @@ export function applyDefaults(config: StarshipConfig): StarshipConfig { ); // Process relayers with defaults - let processedRelayers: Relayer[] | undefined; + let processedRelayers: Relayer[] = []; if (config.relayers && config.relayers?.length > 0) { processedRelayers = config.relayers.map((relayer: Relayer) => defaultsManager.processRelayer(relayer) ); } - // Process global configurations individually to maintain type safety + // Always apply global defaults, merge with existing config if present const processedConfig = { ...config, chains: processedChains, relayers: processedRelayers, + + // Always process global configurations with defaults + exposer: defaultsManager.processExposer(config.exposer || {}), + faucet: defaultsManager.processFaucet(config.faucet || {}), + monitoring: defaultsManager.processMonitoring(config.monitoring || {}), + ingress: defaultsManager.processIngress(config.ingress || {}), + images: defaultsManager.processImages(config.images || {}), + resources: defaultsManager.processResources(config.resources || {}), + timeouts: defaultsManager.processTimeouts(config.timeouts || {}), + + // Optional configurations that only apply if defined ...(config.explorer && { explorer: defaultsManager.processExplorer(config.explorer) }), ...(config.registry && { registry: defaultsManager.processRegistry(config.registry) - }), - ...(config.faucet && { - faucet: defaultsManager.processFaucet(config.faucet) - }), - ...(config.monitoring && { - monitoring: defaultsManager.processMonitoring(config.monitoring) - }), - ...(config.ingress && { - ingress: defaultsManager.processIngress(config.ingress) - }), - ...(config.exposer && { - exposer: defaultsManager.processExposer(config.exposer) - }), - ...(config.images && { - images: defaultsManager.processImages(config.images) - }), - ...(config.resources && { - resources: defaultsManager.processResources(config.resources) - }), - ...(config.timeouts && { - timeouts: defaultsManager.processTimeouts(config.timeouts) }) }; diff --git a/packages/packages/generator/src/helpers.ts b/packages/packages/generator/src/helpers.ts index 6adf26767..e358cf91a 100644 --- a/packages/packages/generator/src/helpers.ts +++ b/packages/packages/generator/src/helpers.ts @@ -141,12 +141,7 @@ export function getNodeResources( return getResourceObject(chain.resources); } - return getResourceObject( - context.resources?.node || { - cpu: '0.5', - memory: '500M' - } - ); + return getResourceObject(context.resources?.node); } /** @@ -154,13 +149,12 @@ export function getNodeResources( */ export function getPortMap(): Record { return { - p2p: 26656, address: 26658, grpc: 9090, 'grpc-web': 9091, + p2p: 26656, rest: 1317, rpc: 26657, - metrics: 26660, exposer: 8081, faucet: 8000 }; @@ -293,11 +287,11 @@ export function generateWaitInitContainer( const waitScript = chainIDs .map( (chainID) => ` - while [ $(curl -sw '%{http_code}' http://${getChainName(String(chainID))}-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do - echo "Genesis validator does not seem to be ready for: ${chainID}. Waiting for it to start..." - echo "Checking: http://${getChainName(String(chainID))}-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" - sleep 10; - done` +while [ $(curl -sw '%{http_code}' http://${getChainName(String(chainID))}-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id -o /dev/null) -ne 200 ]; do + echo "Genesis validator does not seem to be ready for: ${chainID}. Waiting for it to start..." + echo "Checking: http://${getChainName(String(chainID))}-genesis.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id" + sleep 10; +done` ) .join('\n');