Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 4 additions & 49 deletions multichain-testing/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -105,57 +105,12 @@ tail-slog:
wait-for-pods:
scripts/pod-readiness.ts

# stride host zone setup
stride-host-zone:
./scripts/transfer_fetch_denom.sh
./scripts/update_hostzone_proposal.sh
# Clean up old proposal file if present
-kubectl exec -i stridelocal-genesis-0 -- rm /tmp/add_hostzones_proposal.json

# Copy proposal JSON into container
kubectl cp ./scripts/add_hostzones_proposal.json stridelocal-genesis-0:/tmp/add_hostzones_proposal.json

# Submit the proposal
kubectl exec -i stridelocal-genesis-0 -- \
strided tx gov submit-proposal /tmp/add_hostzones_proposal.json \
--from genesis --chain-id stridelocal --keyring-backend test --gas auto -y

# Extract latest proposal ID (raw, no quotes)
echo "🔍 Waiting for proposal to be created..."
kubectl exec -i stridelocal-genesis-0 -- \
strided q gov proposals --output json | jq -r '.proposals | map(.id | tonumber) | max' > /tmp/last_proposal_id.txt
echo "📌 Proposal ID: $$(cat /tmp/last_proposal_id.txt)"

# Wait until voting period has started, and print status on each check
export PROPOSAL_ID=$$(cat /tmp/last_proposal_id.txt) && \
echo "⏳ Waiting for proposal $$PROPOSAL_ID to enter voting period..." && \
while true; do \
STATUS=$$(kubectl exec -i stridelocal-genesis-0 -- \
strided q gov proposal $$PROPOSAL_ID --output json 2>/dev/null | jq -r '.status'); \
echo " ⏱️ Current status: $$STATUS"; \
if [ "$$STATUS" = "PROPOSAL_STATUS_VOTING_PERIOD" ]; then \
echo "✅ Voting period started (status: $$STATUS)"; \
break; \
elif [ "$$STATUS" = "PROPOSAL_STATUS_REJECTED" ]; then \
echo "❌ Proposal $$PROPOSAL_ID was rejected before voting started."; \
exit 1; \
fi; \
sleep 1; \
done

# Auto-vote YES from all local accounts
export PROPOSAL_ID=$$(cat /tmp/last_proposal_id.txt) && \
echo "🗳️ Voting YES on proposal $$PROPOSAL_ID..." && \
for key in $$(kubectl exec -i stridelocal-genesis-0 -- strided keys list --keyring-backend test --output json | jq -r '.[].name'); do \
echo " ✔️ Voting with $$key..."; \
kubectl exec -i stridelocal-genesis-0 -- \
strided tx gov vote $$PROPOSAL_ID yes \
--from $$key --chain-id stridelocal --keyring-backend test --yes > /dev/null; \
done

# Show final proposal info
echo "\n📜 Final Proposal Info:"
export PROPOSAL_ID=$$(cat /tmp/last_proposal_id.txt) && \
kubectl exec -i stridelocal-genesis-0 -- \
strided q gov proposal $$PROPOSAL_ID --output json | jq '.'
./scripts/submit_proposals.sh


.PHONY: start
start: install wait-for-pods port-forward fund-provision-pool override-chain-registry register-bank-assets stride-host-zone
1 change: 1 addition & 0 deletions multichain-testing/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ chains:
memory: 3Gi
- id: stridelocal
name: stride
image: ghcr.io/cosmology-tech/starship/stride:v9.2.1
numValidators: 1
genesis:
app_state:
Expand Down
8 changes: 4 additions & 4 deletions multichain-testing/scripts/add_hostzones_proposal.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
"messages": [
{
"@type": "/stride.stakeibc.MsgRegisterHostZone",
"connection_id": "connection-0",
"connection_id": "connection-1",
"bech32prefix": "cosmos",
"host_denom": "uatom",
"ibc_denom": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2",
"ibc_denom": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9",
"creator": "stride10d07y265gmmuvt4z0w9aw880jnsr700jefnezl",
"transfer_channel_id": "channel-0",
"transfer_channel_id": "channel-1",
"unbonding_frequency": "1000",
"min_redemption_rate": "0",
"max_redemption_rate": "50"
Expand All @@ -17,4 +17,4 @@
"deposit": "100000000ustrd",
"title": "MsgUpdateParams",
"summary": "asdasd"
}
}
30 changes: 30 additions & 0 deletions multichain-testing/scripts/clean_logs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/bash

# Optional: stream logs from a live process or a log file
# Example: yarn logs | ./clean_cosmos_logs.sh

# Define patterns that are routine and should be filtered out
ROUTINE_PATTERNS=(
"state updated"
"commit synced"
"committed state"
"indexed block events"
"executed block"
"Timed out"
"received proposal"
"received complete proposal block"
"finalizing commit"
"minted coins from module account"
"block-manager: block .* (begin|commit)"
"Ensure peers"
"No addresses to dial"
)

# Convert patterns into a single grep -v expression
FILTER_CMD="cat"
for pattern in "${ROUTINE_PATTERNS[@]}"; do
FILTER_CMD="$FILTER_CMD | grep -v -E '$pattern'"
done

# Run the filter on stdin
eval "$FILTER_CMD"
2 changes: 1 addition & 1 deletion multichain-testing/scripts/find_ibc_denom.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
BASE_DENOM="uatom"
CHANNEL_ID=$(
./find_ibc_channel.sh 2>/dev/null | grep -oE 'channel-[0-9]+$'
./scripts/find_ibc_channel.sh 2>/dev/null | grep -oE 'channel-[0-9]+$'
)
echo -n "transfer/${CHANNEL_ID}/${BASE_DENOM}" | shasum -a 256 | cut -d ' ' -f1 | tr a-z A-Z | awk '{print "ibc/" $1}'
96 changes: 96 additions & 0 deletions multichain-testing/scripts/submit_proposals.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#!/bin/bash

set -e

# --- Configuration ---
CONTAINER="stridelocal-genesis-0"
CHAIN_BINARY="strided"
GAS_SUBMIT="9000000"
GAS_VOTE="90000"
SLEEP_INTERVAL=2
VERBOSE=false

# Proposals and voting metadata
declare -a FILES=("add_ica_allowed_msgs_proposal.json" "add_hostzones_proposal.json")
declare -a LOCAL_PATHS=(
"./scripts/add_ica_allowed_msgs_proposal.json"
"./scripts/add_hostzones_proposal.json"
)
declare -a REMOTE_PATHS=(
"/tmp/add_ica_allowed_msgs_proposal.json"
"/tmp/add_hostzones_proposal.json"
)
declare -a SUBMIT_CMDS=(
"tx gov submit-legacy-proposal param-change"
"tx gov submit-proposal"
)
declare -a VOTERS=(
"genesis"
"genesis"
)

# --- Handle CLI flags ---
for arg in "$@"; do
if [[ "$arg" == "--verbose" ]]; then
VERBOSE=true
fi
done

log() {
if $VERBOSE; then
echo "$@"
fi
}

submit_and_vote() {
local local_path="$1"
local remote_path="$2"
local submit_cmd="$3"
local voter="$4"

echo "📄 Copying $local_path to container..."
kubectl cp "$local_path" "$CONTAINER:$remote_path"

echo "📤 Submitting proposal: $remote_path"
kubectl exec -i $CONTAINER -- $CHAIN_BINARY $submit_cmd "$remote_path" \
--from genesis --gas "$GAS_SUBMIT" -y > /dev/null

sleep 1 # give time for proposal to be indexed

log "🔍 Fetching latest proposal ID..."
PROPOSAL_ID=$(kubectl exec -i $CONTAINER -- $CHAIN_BINARY q gov proposals --output json \
| jq -r '.proposals | sort_by(.id) | last | .id')

echo "✅ Submitted proposal ID: $PROPOSAL_ID"

echo "🗳️ Voting 'yes' with $voter..."
kubectl exec -i $CONTAINER -- $CHAIN_BINARY tx gov vote "$PROPOSAL_ID" yes \
--from "$voter" --gas "$GAS_VOTE" -y > /dev/null

echo "⏳ Waiting for proposal $PROPOSAL_ID to exit voting period..."
while true; do
STATUS=$(kubectl exec -i $CONTAINER -- $CHAIN_BINARY q gov proposal "$PROPOSAL_ID" --output json \
| jq -r '.status')

if [[ "$STATUS" == "PROPOSAL_STATUS_VOTING_PERIOD" ]]; then
log " ⏱️ Still voting... (status: $STATUS)"
sleep "$SLEEP_INTERVAL"
else
echo "✅ Proposal $PROPOSAL_ID finalized with status: $STATUS"
break
fi
done

echo "📊 Final tally for proposal $PROPOSAL_ID:"
kubectl exec -i $CONTAINER -- $CHAIN_BINARY q gov proposal "$PROPOSAL_ID" --output json \
| jq '.final_tally_result'

echo "------------------------------------------------"
}

# --- Main ---
for i in "${!FILES[@]}"; do
submit_and_vote "${LOCAL_PATHS[$i]}" "${REMOTE_PATHS[$i]}" "${SUBMIT_CMDS[$i]}" "${VOTERS[$i]}"
done
echo "✅ All proposals submitted and voted successfully!"
echo "------------------------------------------------"
Loading
Loading