From f086b771cd7e65ba8579c2d0ab090d6500237c63 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Tue, 10 Oct 2023 12:25:54 -0500 Subject: [PATCH] rm old debugging files --- .../e2e/packet_forward_test.go | 236 +++++++++--------- .../packet-forward-middleware/test_node.sh | 119 --------- .../testing/new_simapp.zip | Bin 21034 -> 0 bytes .../testing/old_simapp.zip | Bin 16636 -> 0 bytes 4 files changed, 117 insertions(+), 238 deletions(-) delete mode 100644 middleware/packet-forward-middleware/test_node.sh delete mode 100644 middleware/packet-forward-middleware/testing/new_simapp.zip delete mode 100644 middleware/packet-forward-middleware/testing/old_simapp.zip diff --git a/middleware/packet-forward-middleware/e2e/packet_forward_test.go b/middleware/packet-forward-middleware/e2e/packet_forward_test.go index 7f47d003..5522a708 100644 --- a/middleware/packet-forward-middleware/e2e/packet_forward_test.go +++ b/middleware/packet-forward-middleware/e2e/packet_forward_test.go @@ -178,155 +178,153 @@ func TestPacketForwardMiddleware(t *testing.T) { zeroBal := math.ZeroInt() transferAmount := math.NewInt(100_000) - /* - t.Run("multi-hop a->b->c->d", func(t *testing.T) { - // Send packet from Chain A->Chain B->Chain C->Chain D - transfer := ibc.WalletAmount{ - Address: userB.FormattedAddress(), - Denom: chainA.Config().Denom, - Amount: transferAmount, - } + t.Run("multi-hop a->b->c->d", func(t *testing.T) { + // Send packet from Chain A->Chain B->Chain C->Chain D + transfer := ibc.WalletAmount{ + Address: userB.FormattedAddress(), + Denom: chainA.Config().Denom, + Amount: transferAmount, + } - secondHopMetadata := &PacketMetadata{ - Forward: &ForwardMetadata{ - Receiver: userD.FormattedAddress(), - Channel: cdChan.ChannelID, - Port: cdChan.PortID, - }, - } - nextBz, err := json.Marshal(secondHopMetadata) - require.NoError(t, err) - next := string(nextBz) - - firstHopMetadata := &PacketMetadata{ - Forward: &ForwardMetadata{ - Receiver: userC.FormattedAddress(), - Channel: bcChan.ChannelID, - Port: bcChan.PortID, - Next: &next, - }, - } + secondHopMetadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userD.FormattedAddress(), + Channel: cdChan.ChannelID, + Port: cdChan.PortID, + }, + } + nextBz, err := json.Marshal(secondHopMetadata) + require.NoError(t, err) + next := string(nextBz) - memo, err := json.Marshal(firstHopMetadata) - require.NoError(t, err) + firstHopMetadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userC.FormattedAddress(), + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + Next: &next, + }, + } - chainAHeight, err := chainA.Height(ctx) - require.NoError(t, err) + memo, err := json.Marshal(firstHopMetadata) + require.NoError(t, err) - transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) - require.NoError(t, err) - _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+30, transferTx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) - require.NoError(t, err) + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) - chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) - require.NoError(t, err) + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+30, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) - chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) - require.NoError(t, err) + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) + require.NoError(t, err) - chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) - require.NoError(t, err) + chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) + require.NoError(t, err) - chainDBalance, err := chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom) - require.NoError(t, err) + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) + require.NoError(t, err) - require.True(t, chainABalance.Equal(initBal.Sub(transferAmount))) - require.True(t, chainBBalance.Equal(zeroBal)) - require.True(t, chainCBalance.Equal(zeroBal)) - require.True(t, chainDBalance.Equal(transferAmount)) + chainDBalance, err := chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom) + require.NoError(t, err) - firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) - require.NoError(t, err) + require.True(t, chainABalance.Equal(initBal.Sub(transferAmount))) + require.True(t, chainBBalance.Equal(zeroBal)) + require.True(t, chainCBalance.Equal(zeroBal)) + require.True(t, chainDBalance.Equal(transferAmount)) - secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) - require.NoError(t, err) + firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) + require.NoError(t, err) - thirdHopEscrowBalance, err := chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom) - require.NoError(t, err) + secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) + require.NoError(t, err) - require.Equal(t, transferAmount, firstHopEscrowBalance) - require.Equal(t, transferAmount, secondHopEscrowBalance) - require.Equal(t, transferAmount, thirdHopEscrowBalance) - }) + thirdHopEscrowBalance, err := chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom) + require.NoError(t, err) - t.Run("multi-hop denom unwind d->c->b->a", func(t *testing.T) { - // Send packet back from Chain D->Chain C->Chain B->Chain A - transfer := ibc.WalletAmount{ - Address: userC.FormattedAddress(), - Denom: thirdHopIBCDenom, - Amount: transferAmount, - } + require.Equal(t, transferAmount, firstHopEscrowBalance) + require.Equal(t, transferAmount, secondHopEscrowBalance) + require.Equal(t, transferAmount, thirdHopEscrowBalance) + }) - secondHopMetadata := &PacketMetadata{ - Forward: &ForwardMetadata{ - Receiver: userA.FormattedAddress(), - Channel: baChan.ChannelID, - Port: baChan.PortID, - }, - } + t.Run("multi-hop denom unwind d->c->b->a", func(t *testing.T) { + // Send packet back from Chain D->Chain C->Chain B->Chain A + transfer := ibc.WalletAmount{ + Address: userC.FormattedAddress(), + Denom: thirdHopIBCDenom, + Amount: transferAmount, + } - nextBz, err := json.Marshal(secondHopMetadata) - require.NoError(t, err) + secondHopMetadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userA.FormattedAddress(), + Channel: baChan.ChannelID, + Port: baChan.PortID, + }, + } - next := string(nextBz) + nextBz, err := json.Marshal(secondHopMetadata) + require.NoError(t, err) - firstHopMetadata := &PacketMetadata{ - Forward: &ForwardMetadata{ - Receiver: userB.FormattedAddress(), - Channel: cbChan.ChannelID, - Port: cbChan.PortID, - Next: &next, - }, - } + next := string(nextBz) - memo, err := json.Marshal(firstHopMetadata) - require.NoError(t, err) + firstHopMetadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userB.FormattedAddress(), + Channel: cbChan.ChannelID, + Port: cbChan.PortID, + Next: &next, + }, + } - chainDHeight, err := chainD.Height(ctx) - require.NoError(t, err) + memo, err := json.Marshal(firstHopMetadata) + require.NoError(t, err) - transferTx, err := chainD.SendIBCTransfer(ctx, dcChan.ChannelID, userD.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) - require.NoError(t, err) - _, err = testutil.PollForAck(ctx, chainD, chainDHeight, chainDHeight+30, transferTx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) - require.NoError(t, err) + chainDHeight, err := chainD.Height(ctx) + require.NoError(t, err) - // assert balances for user controlled wallets - chainDBalance, err := chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom) - require.NoError(t, err) + transferTx, err := chainD.SendIBCTransfer(ctx, dcChan.ChannelID, userD.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + _, err = testutil.PollForAck(ctx, chainD, chainDHeight, chainDHeight+30, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) - chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) - require.NoError(t, err) + // assert balances for user controlled wallets + chainDBalance, err := chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom) + require.NoError(t, err) - chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) - require.NoError(t, err) + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) + require.NoError(t, err) - chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) - require.NoError(t, err) + chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) + require.NoError(t, err) - require.True(t, chainDBalance.Equal(zeroBal)) - require.True(t, chainCBalance.Equal(zeroBal)) - require.True(t, chainBBalance.Equal(zeroBal)) - require.True(t, chainABalance.Equal(initBal)) + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) + require.NoError(t, err) + + require.True(t, chainDBalance.Equal(zeroBal)) + require.True(t, chainCBalance.Equal(zeroBal)) + require.True(t, chainBBalance.Equal(zeroBal)) + require.True(t, chainABalance.Equal(initBal)) - // assert balances for IBC escrow accounts - firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) - require.NoError(t, err) + // assert balances for IBC escrow accounts + firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) + require.NoError(t, err) - secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) - require.NoError(t, err) + secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) + require.NoError(t, err) - thirdHopEscrowBalance, err := chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom) - require.NoError(t, err) + thirdHopEscrowBalance, err := chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom) + require.NoError(t, err) - require.True(t, firstHopEscrowBalance.Equal(zeroBal)) - require.True(t, secondHopEscrowBalance.Equal(zeroBal)) - require.True(t, thirdHopEscrowBalance.Equal(zeroBal)) - }) - */ + require.True(t, firstHopEscrowBalance.Equal(zeroBal)) + require.True(t, secondHopEscrowBalance.Equal(zeroBal)) + require.True(t, thirdHopEscrowBalance.Equal(zeroBal)) + }) t.Run("forward ack error refund", func(t *testing.T) { // Send a malformed packet with invalid receiver address from Chain A->Chain B->Chain C diff --git a/middleware/packet-forward-middleware/test_node.sh b/middleware/packet-forward-middleware/test_node.sh deleted file mode 100644 index 0939b823..00000000 --- a/middleware/packet-forward-middleware/test_node.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/bash -# Run this script to quickly install, setup, and run the current version of simd without docker. -# -# Example: -# CHAIN_ID="local-1" HOME_DIR="$HOME/.simapp" TIMEOUT_COMMIT="500ms" CLEAN=true sh test_node.sh -# CHAIN_ID="local-2" HOME_DIR="~/.sim2" CLEAN=true RPC=36657 REST=2317 PROFF=6061 P2P=36656 GRPC=8090 GRPC_WEB=8091 ROSETTA=8081 TIMEOUT_COMMIT="500ms" sh scripts/test_node.sh -# -# To use unoptomized wasm files up to ~5mb, add: MAX_WASM_SIZE=5000000 - -export KEY="cosmos1" -export KEY2="cosmos2" - -export CHAIN_ID=${CHAIN_ID:-"local-1"} -export MONIKER="local" -export KEYALGO="secp256k1" -export KEYRING=${KEYRING:-"os"} -export HOME_DIR=$(eval echo "${HOME_DIR:-"$HOME/.simapp"}") -export BINARY=${BINARY:-simd} - -export CLEAN=${CLEAN:-"false"} -export RPC=${RPC:-"26657"} -export REST=${REST:-"1317"} -export PROFF=${PROFF:-"6060"} -export P2P=${P2P:-"26656"} -export GRPC=${GRPC:-"9090"} -export GRPC_WEB=${GRPC_WEB:-"9091"} -export ROSETTA=${ROSETTA:-"8080"} -export TIMEOUT_COMMIT=${TIMEOUT_COMMIT:-"5s"} - -alias BINARY="$BINARY --home=$HOME_DIR" - -command -v $BINARY > /dev/null 2>&1 || { echo >&2 "$BINARY command not found. Ensure this is setup / properly installed in your GOPATH (make install)."; exit 1; } -command -v jq > /dev/null 2>&1 || { echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/"; exit 1; } - -$BINARY config keyring-backend $KEYRING -$BINARY config chain-id $CHAIN_ID - -from_scratch () { - # Fresh install on current branch - make install - - # remove existing daemon. - rm -rf $HOME_DIR && echo "Removed $HOME_DIR" - - # sim1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk - echo "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" | BINARY keys add $KEY --keyring-backend $KEYRING --algo $KEYALGO --recover - # sim1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl - echo "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" | BINARY keys add $KEY2 --keyring-backend $KEYRING --algo $KEYALGO --recover - - BINARY init $MONIKER --chain-id $CHAIN_ID --default-denom token --home=$HOME_DIR - - # Function updates the config based on a jq argument as a string - update_test_genesis () { - cat $HOME_DIR/config/genesis.json | jq "$1" > $HOME_DIR/config/tmp_genesis.json && mv $HOME_DIR/config/tmp_genesis.json $HOME_DIR/config/genesis.json - } - - # Block - update_test_genesis '.consensus_params["block"]["max_gas"]="100000000"' - # Gov - update_test_genesis '.app_state["gov"]["params"]["min_deposit"]=[{"denom": "token","amount": "1000000"}]' - update_test_genesis '.app_state["gov"]["voting_params"]["voting_period"]="15s"' - # staking - update_test_genesis '.app_state["staking"]["params"]["bond_denom"]="token"' - update_test_genesis '.app_state["staking"]["params"]["min_commission_rate"]="0.050000000000000000"' - # mint - update_test_genesis '.app_state["mint"]["params"]["mint_denom"]="token"' - # crisis - update_test_genesis '.app_state["crisis"]["constant_fee"]={"denom": "token","amount": "1000"}' - - # PFM - update_test_genesis '.app_state["packetfowardmiddleware"]["params"]["fee_percentage"]="0.000000000000000000"' - - # Allocate genesis accounts - BINARY genesis add-genesis-account $KEY 10000000token,1000utest --keyring-backend $KEYRING --home=$HOME_DIR - BINARY genesis add-genesis-account $KEY2 1000000token,1000utest --keyring-backend $KEYRING - - BINARY genesis gentx $KEY 1000000token --keyring-backend $KEYRING --chain-id $CHAIN_ID - - # Collect genesis tx - BINARY genesis collect-gentxs - - # Run this to ensure everything worked and that the genesis file is setup correctly - BINARY genesis validate-genesis -} - -# check if CLEAN is not set to false -if [ "$CLEAN" != "false" ]; then - echo "Starting from a clean state" - from_scratch -fi - -echo "Starting node..." - -# Opens the RPC endpoint to outside connections -sed -i 's/laddr = "tcp:\/\/127.0.0.1:26657"/c\laddr = "tcp:\/\/0.0.0.0:'$RPC'"/g' $HOME_DIR/config/config.toml -sed -i 's/cors_allowed_origins = \[\]/cors_allowed_origins = \["\*"\]/g' $HOME_DIR/config/config.toml - -# REST endpoint -sed -i 's/address = "tcp:\/\/localhost:1317"/address = "tcp:\/\/0.0.0.0:'$REST'"/g' $HOME_DIR/config/app.toml -sed -i 's/enable = false/enable = true/g' $HOME_DIR/config/app.toml - -# replace pprof_laddr = "localhost:6060" binding -sed -i 's/pprof_laddr = "localhost:6060"/pprof_laddr = "localhost:'$PROFF_LADDER'"/g' $HOME_DIR/config/config.toml - -# change p2p addr laddr = "tcp://0.0.0.0:26656" -sed -i 's/laddr = "tcp:\/\/0.0.0.0:26656"/laddr = "tcp:\/\/0.0.0.0:'$P2P'"/g' $HOME_DIR/config/config.toml - -# GRPC -sed -i 's/address = "localhost:9090"/address = "0.0.0.0:'$GRPC'"/g' $HOME_DIR/config/app.toml -sed -i 's/address = "localhost:9091"/address = "0.0.0.0:'$GRPC_WEB'"/g' $HOME_DIR/config/app.toml - -# Rosetta Api -sed -i 's/address = ":8080"/address = "0.0.0.0:'$ROSETTA'"/g' $HOME_DIR/config/app.toml - -# faster blocks -sed -i 's/timeout_commit = "5s"/timeout_commit = "'$TIMEOUT_COMMIT'"/g' $HOME_DIR/config/config.toml - -# Start the node with 0 gas fees -BINARY start --pruning=nothing --minimum-gas-prices=0token --rpc.laddr="tcp://0.0.0.0:$RPC" \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/new_simapp.zip b/middleware/packet-forward-middleware/testing/new_simapp.zip deleted file mode 100644 index 48d954f7a84f233ef1614c3e80c16e8730be3950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21034 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