diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index a99c41cfde55..2acce0132743 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -24,12 +24,11 @@ jobs: go-version: '1.20' - name: Display go version run: go version - - name: Install relayer and simapp + - name: Test finschia to finschia run: | cd e2e - sudo make install-relayer - make install-simapp - - name: Test e2e + make test-fnsa-fnsa + - name: Test finschia to cosmos run: | - cd e2e - make test-e2e + cd e2e + make test-fnsa-csms diff --git a/e2e/.gitignore b/e2e/.gitignore new file mode 100644 index 000000000000..726c17aea066 --- /dev/null +++ b/e2e/.gitignore @@ -0,0 +1,2 @@ +bin +data \ No newline at end of file diff --git a/e2e/Makefile b/e2e/Makefile index e9b46be75e60..48a9d7f44f70 100644 --- a/e2e/Makefile +++ b/e2e/Makefile @@ -1,19 +1,41 @@ RLY_VERSION := 2.3.1 +CSMS_VERSION := 4.3.1 ARCH := $(shell dpkg --print-architecture) +PATH := $(shell pwd)/bin:$(PATH) -install-relayer: - @curl -L https://github.com/cosmos/relayer/releases/download/v$(RLY_VERSION)/Cosmos.Relayer_$(RLY_VERSION)_linux_$(ARCH).tar.gz --output relayer.tar.gz - @tar -xf relayer.tar.gz --transform 's!^[^/]*!relayer_archive!' - @mv relayer_archive/rly /usr/bin +bin/simd: + @mkdir -p bin && \ + cd ../ && \ + make build && \ + mv build/simd e2e/bin + @fnsasimd version --long + +bin/csmssimd: + @mkdir -p bin/cosmos && \ + cd bin/cosmos && \ + curl -L https://github.com/cosmos/ibc-go/releases/download/v$(CSMS_VERSION)/ibc-go_simd_v$(CSMS_VERSION)_linux_$(ARCH).tar.gz --output cosmos_simd.tar.gz && \ + tar -xf cosmos_simd.tar.gz && \ + mv simd ../csmssimd + @csmssimd version --long --log_level=info + +bin/rly: + @mkdir -p bin/relayer && \ + cd bin/relayer && \ + curl -L https://github.com/cosmos/relayer/releases/download/v$(RLY_VERSION)/Cosmos.Relayer_$(RLY_VERSION)_linux_$(ARCH).tar.gz --output relayer.tar.gz && \ + tar -xf relayer.tar.gz --transform 's!^[^/]*!relayer_archive!' && \ + mv relayer_archive/rly ../ @rly version - @rm -rf relayer.tar.gz relayer_archive -install-simapp: - @cd ../ && \ - make install - @simd version --long +test-fnsa-fnsa: bin/rly bin/simd + @./e2e fnsa-fnsa fnsa-0 simd 438 fnsa-1 simd 438 "skip" + +test-fnsa-csms: bin/rly bin/simd bin/csmssimd + @./e2e fnsa-csms fnsa-0 simd 438 csms-1 csmssimd 118 "skip" + +clean-all: + @rm -rf bin data -test-e2e: - @./e2e +clean-data: + @rm -rf data -.PHONY: install-relayer install-simapp test-e2e +.PHONY: test-fnsa-fnsa test-fnsa-csms clean-all clean-data diff --git a/e2e/configs/chains/csms-1.json b/e2e/configs/chains/csms-1.json new file mode 100644 index 000000000000..9f60774765ab --- /dev/null +++ b/e2e/configs/chains/csms-1.json @@ -0,0 +1,18 @@ +{ + "type": "cosmos", + "value": { + "key": "testkey", + "chain-id": "csms-1", + "rpc-addr": "http://localhost:26557", + "grpc-addr": "", + "account-prefix": "cosmos", + "keyring-backend": "test", + "gas-adjustment": 1.5, + "gas-prices": "0.025rice", + "debug": true, + "timeout": "10s", + "output-format": "json", + "sign-mode": "direct" + } +} + diff --git a/e2e/configs/paths/fnsa-csms.json b/e2e/configs/paths/fnsa-csms.json new file mode 100644 index 000000000000..657613907b32 --- /dev/null +++ b/e2e/configs/paths/fnsa-csms.json @@ -0,0 +1,12 @@ +{ + "src": { + "chain-id": "fnsa-0" + }, + "dst": { + "chain-id": "csms-1" + }, + "src-channel-filter": { + "rule": null, + "channel-list": [] + } +} diff --git a/e2e/e2e b/e2e/e2e index 325cbb415346..7a0d30414014 100755 --- a/e2e/e2e +++ b/e2e/e2e @@ -1,10 +1,18 @@ #!/bin/bash -e RELAYER_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -RELAYER_CONF="$HOME/.relayer" -FNSA_CONF="$(pwd)/data" +HOME_DIR="$(pwd)/data" +RLY_HOME="$HOME_DIR/relayer" + +CHAIN_PATH=$1 +CHAIN0_ID=$2 +CHAIN0_BIN=$3 +CHAIN0_COINID=$4 +CHAIN1_ID=$5 +CHAIN1_BIN=$6 +CHAIN1_COINID=$7 # Ensure user understands what will be deleted -if ([[ -d $RELAYER_CONF ]] || [[ -d $FNSA_CONF ]]) && [[ ! "$1" == "skip" ]]; then +if ([[ -d $HOME_DIR ]]) && [[ ! "$8" == "skip" ]]; then read -p "$0 will delete \$HOME/.relayer and \$(pwd)/data folder. Do you wish to continue? (y/n): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then @@ -12,21 +20,18 @@ if ([[ -d $RELAYER_CONF ]] || [[ -d $FNSA_CONF ]]) && [[ ! "$1" == "skip" ]]; th fi fi -cd $RELAYER_DIR -rm -rf $RELAYER_CONF &> /dev/null -pwd # spin up two ibc enabled chains and add relevant config info for relaying -bash scripts/fnsa-chainz "skip" +bash scripts/chainz $CHAIN0_ID $CHAIN0_BIN $CHAIN0_COINID $CHAIN1_ID $CHAIN1_BIN $CHAIN1_COINID "$8" echo "waiting for blocks..." sleep 3 # creates clients, connections and channels (all this happens in rly tx command) -rly tx link fnsa-fnsa -d -t 3s +rly --home $RLY_HOME tx link $CHAIN_PATH -d -t 3s sleep 2 -BAL0=$(rly q bal fnsa-0) -BAL1=$(rly q bal fnsa-1) +BAL0=$(rly --home $RLY_HOME q bal $CHAIN0_ID) +BAL1=$(rly --home $RLY_HOME q bal $CHAIN1_ID) echo "-- Initial balances --" echo "balance 0 $BAL0" @@ -42,19 +47,19 @@ if [[ "$BAL1" != *"100000000000beans"* ]]; then fi echo "-- Sending IBC transaction... --" -rly tx transfer fnsa-0 fnsa-1 100000samoleans "$(rly keys show fnsa-1)" channel-0 -d +rly --home $RLY_HOME tx transfer $CHAIN0_ID $CHAIN1_ID 100000samoleans "$(rly --home $RLY_HOME keys show $CHAIN1_ID)" channel-0 -d sleep 5 # relay remaining packets -- (could also be accomplished by running: `rly start`) -rly tx relay-packets fnsa-fnsa channel-0 -d +rly --home $RLY_HOME tx relay-packets $CHAIN_PATH channel-0 -d sleep 5 # relay remaining acknowledgments -- (could also be accomplished by running: `rly start`) -rly tx relay-acknowledgements fnsa-fnsa channel-0 -d +rly --home $RLY_HOME tx relay-acknowledgements $CHAIN_PATH channel-0 -d sleep 5 -BAL0=$(rly q bal fnsa-0) -BAL1=$(rly q bal fnsa-1) +BAL0=$(rly --home $RLY_HOME q bal $CHAIN0_ID) +BAL1=$(rly --home $RLY_HOME q bal $CHAIN1_ID) echo "-- Balances after packets are sent --" echo "balance 0 $BAL0" @@ -70,23 +75,23 @@ if [[ "$BAL1" != *"100000000000beans,100000transfer/channel-0/samoleans"* ]]; th fi echo "-- Sending tokens back to original wallet... --" -rly tx transfer fnsa-1 fnsa-0 100000transfer/channel-0/samoleans "$(rly keys show fnsa-0)" channel-0 -d +rly --home $RLY_HOME tx transfer $CHAIN1_ID $CHAIN0_ID 100000transfer/channel-0/samoleans "$(rly --home $RLY_HOME keys show $CHAIN0_ID)" channel-0 -d sleep 5 -rly tx relay-packets fnsa-fnsa channel-0 -d +rly --home $RLY_HOME tx relay-packets $CHAIN_PATH channel-0 -d sleep 5 -rly tx relay-acknowledgements fnsa-fnsa channel-0 -d +rly --home $RLY_HOME tx relay-acknowledgements $CHAIN_PATH channel-0 -d sleep 5 -BAL0=$(rly q bal fnsa-0) -BAL1=$(rly q bal fnsa-1) +BAL0=$(rly --home $RLY_HOME q bal $CHAIN0_ID) +BAL1=$(rly --home $RLY_HOME q bal $CHAIN1_ID) echo "-- Balances after sending packets back --" echo "balance 0 $BAL0" echo "balance 1 $BAL1" -if [[ "$BAL0" != *"{100000000000samoleans"* ]]; then +if [[ "$BAL0" != *"100000000000samoleans"* ]]; then echo "balance 0 is wrong" exit 1 fi @@ -95,4 +100,5 @@ if [[ "$BAL1" != *"100000000000beans"* ]]; then exit 1 fi -killall simd &> /dev/null +killall simd &> /dev/null || true +killall csmssimd &> /dev/null || true diff --git a/e2e/scripts/chainz b/e2e/scripts/chainz new file mode 100755 index 000000000000..e1c3355d5cb2 --- /dev/null +++ b/e2e/scripts/chainz @@ -0,0 +1,73 @@ +#!/bin/bash +# two-chainz creates two chains and configures the relayer to + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +HOME_DIR="$(pwd)/data" +RLY_HOME="$HOME_DIR/relayer" + +CHAIN0_ID=$1 +CHAIN0_BIN=$2 +CHAIN0_COINID=$3 +CHAIN1_ID=$4 +CHAIN1_BIN=$5 +CHAIN1_COINID=$6 + +# Ensure binary is installed +if ! [ -x "$(which $CHAIN0_BIN)" ]; then + echo "Error: $CHAIN0_BIN is not installed. Try running 'make bin/$CHAIN0_BIN'" >&2 + exit 1 +fi +if ! [ -x "$(which $CHAIN1_BIN)" ]; then + echo "Error: $CHAIN1_BIN is not installed. Try running 'make bin/$CHAIN1_BIN'" >&2 + exit 1 +fi + +# Display software version for testers +echo "BINARY VERSION INFO:" +$CHAIN0_BIN version --long --log_level=info +$CHAIN1_BIN version --long --log_level=info + +# Ensure jq is installed +if [[ ! -x "$(which jq)" ]]; then + echo "jq (a tool for parsing json in the command line) is required..." + echo "https://stedolan.github.io/jq/download/" + exit 1 +fi + +# Ensure user understands what will be deleted +if [[ -d $HOME_DIR ]] && [[ ! "$7" == "skip" ]]; then + read -p "$(basename $0) will delete \$(pwd)/data and \$HOME/.relayer folders. Do you wish to continue? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +fi + +# Delete data from old runs +rm -rf $HOME_DIR &> /dev/null + +# Stop existing binary processes +killall simd &> /dev/null +killall csmssimd &> /dev/null + +set -e + +echo "Generating fnsa configurations..." +mkdir -p $HOME_DIR && cd $HOME_DIR && cd ../ +./scripts/one-chain $CHAIN0_BIN $CHAIN0_ID $HOME_DIR 26657 26656 6060 9090 stake samoleans +./scripts/one-chain $CHAIN1_BIN $CHAIN1_ID $HOME_DIR 26557 26556 6061 9091 rice beans + +[ -f $HOME_DIR/$CHAIN0_ID.log ] && echo "$CHAIN0_ID initialized. Watch file $HOME_DIR/$CHAIN0_ID.log to see its execution." +[ -f $HOME_DIR/$CHAIN1_ID.log ] && echo "$CHAIN1_ID initialized. Watch file $HOME_DIR/$CHAIN1_ID.log to see its execution." + +echo "Generating rly configurations..." +rly --home $RLY_HOME config init +rly --home $RLY_HOME chains add-dir configs/chains + +SEED0=$(jq -r '.mnemonic' $HOME_DIR/$CHAIN0_ID/key_seed.json) +SEED1=$(jq -r '.mnemonic' $HOME_DIR/$CHAIN1_ID/key_seed.json) + +echo "Key $(rly --home $RLY_HOME keys restore $CHAIN0_ID testkey "$SEED0" --coin-type $CHAIN0_COINID) imported from CHAIN0_ID to relayer..." +echo "Key $(rly --home $RLY_HOME keys restore $CHAIN1_ID testkey "$SEED1" --coin-type $CHAIN1_COINID) imported from CHAIN1_ID to relayer..." + +rly --home $RLY_HOME paths add-dir configs/paths diff --git a/e2e/scripts/fnsa-chainz b/e2e/scripts/fnsa-chainz deleted file mode 100755 index e9346a4a8e54..000000000000 --- a/e2e/scripts/fnsa-chainz +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash -# two-chainz creates two simd chains and configures the relayer to - -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -FNSA_DATA="$(pwd)/data" -RELAYER_CONF="$HOME/.relayer" - -# Ensure simd is installed -if ! [ -x "$(which simd)" ]; then - echo "Error: simd is not installed. Try running 'make install-simapp'" >&2 - exit 1 -fi - -# Display software version for testers -echo "SIMD VERSION INFO:" -simd version --long - -# Ensure jq is installed -if [[ ! -x "$(which jq)" ]]; then - echo "jq (a tool for parsing json in the command line) is required..." - echo "https://stedolan.github.io/jq/download/" - exit 1 -fi - -# Ensure user understands what will be deleted -if [[ -d $FNSA_DATA ]] && [[ ! "$1" == "skip" ]]; then - read -p "$(basename $0) will delete \$(pwd)/data and \$HOME/.relayer folders. Do you wish to continue? (y/n): " -n 1 -r - echo - if [[ ! $REPLY =~ ^[Yy]$ ]]; then - exit 1 - fi -fi - -# Delete data from old runs -rm -rf $FNSA_DATA &> /dev/null -rm -rf $RELAYER_CONF &> /dev/null - -# Stop existing simd processes -killall gaiad &> /dev/null -killall akash &> /dev/null -killall simd &> /dev/null - -set -e - -chainid0=fnsa-0 -chainid1=fnsa-1 - -echo "Generating fnsa configurations..." -mkdir -p $FNSA_DATA && cd $FNSA_DATA && cd ../ -./scripts/one-chain simd $chainid0 ./data 26657 26656 6060 9090 stake samoleans -./scripts/one-chain simd $chainid1 ./data 26557 26556 6061 9091 rice beans - -[ -f $FNSA_DATA/$chainid0.log ] && echo "$chainid0 initialized. Watch file $FNSA_DATA/$chainid0.log to see its execution." -[ -f $FNSA_DATA/$chainid1.log ] && echo "$chainid1 initialized. Watch file $FNSA_DATA/$chainid1.log to see its execution." - -echo "Generating rly configurations..." -rly config init -rly chains add-dir configs/chains - -SEED0=$(jq -r '.mnemonic' $FNSA_DATA/fnsa-0/key_seed.json) -SEED1=$(jq -r '.mnemonic' $FNSA_DATA/fnsa-1/key_seed.json) -COINID=438 -echo "Key $(rly keys restore fnsa-0 testkey "$SEED0" --coin-type $COINID) imported from fnsa-0 to relayer..." -echo "Key $(rly keys restore fnsa-1 testkey "$SEED1" --coin-type $COINID) imported from fnsa-1 to relayer..." - -rly paths add-dir configs/paths