From de0a11ed02549e7d958847f495634b4b5d5873e7 Mon Sep 17 00:00:00 2001 From: Nikolas De Giorgis Date: Fri, 19 Jul 2024 09:39:49 +0100 Subject: [PATCH 01/78] (tests): e2e test for failed forwarding (#6876) * Create e2e test for failed forwarding. * Added comment. * Fixed string * Appeasing the linter * Missed renaming * Fix * Change denom. --- e2e/tests/transfer/forwarding_test.go | 71 +++++++++++++++++++++++++++ e2e/testsuite/testsuite.go | 19 +++---- 2 files changed, 78 insertions(+), 12 deletions(-) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index f7a2c33c15f..6bb21f49042 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -289,3 +289,74 @@ func (s *TransferForwardingTestSuite) TestChannelUpgradeForwarding_Succeeds() { s.Require().Equal(expected, actualBalance.Int64()) }) } + +// TestFailedForwarding tests the scenario in which the packet is sent from +// A to C (through B) but it can't reach C (we use an invalid address). +func (s *TransferForwardingTestSuite) TestFailedForwarding() { + t := s.T() + ctx := context.TODO() + + testName := t.Name() + t.Parallel() + relayer := s.CreateDefaultPaths(testName) + chains := s.GetAllChains() + + chainA, chainB, chainC := chains[0], chains[1], chains[2] + + chainADenom := chainA.Config().Denom + + chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) + chainAAddress := chainAWallet.FormattedAddress() + + chainBWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + + chainCWallet := s.CreateUserOnChainC(ctx, testvalues.StartingTokenAmount) + + channelAtoB := s.GetChainAChannelForTest(testName) + channelBtoC := s.GetChannelsForTest(chainB, testName)[1] + + s.Require().NoError(test.WaitForBlocks(ctx, 1, chainA, chainB), "failed to wait for blocks") + + t.Run("native IBC token transfer from chainA to invalid address through B", func(t *testing.T) { + inFiveMinutes := time.Now().Add(5 * time.Minute).UnixNano() + forwarding := transfertypes.NewForwarding(false, transfertypes.NewHop(channelBtoC.PortID, channelBtoC.ChannelID)) + resp := s.Transfer(ctx, chainA, chainAWallet, channelAtoB.PortID, channelAtoB.ChannelID, testvalues.DefaultTransferCoins(chainADenom), chainAAddress, testvalues.InvalidAddress, clienttypes.ZeroHeight(), uint64(inFiveMinutes), "", forwarding) + s.AssertTxSuccess(resp) + }) + + t.Run("tokens are escrowed", func(t *testing.T) { + actualBalance, err := s.GetChainANativeBalance(ctx, chainAWallet) + s.Require().NoError(err) + + expected := testvalues.StartingTokenAmount - testvalues.IBCTransferAmount + s.Require().Equal(expected, actualBalance) + }) + + t.Run("start relayer", func(t *testing.T) { + s.StartRelayer(relayer, testName) + }) + + t.Run("packets are relayed", func(t *testing.T) { + s.AssertPacketRelayed(ctx, chainA, channelAtoB.PortID, channelAtoB.ChannelID, 1) + }) + + t.Run("token transfer amount unescrowed", func(t *testing.T) { + actualBalance, err := s.GetChainANativeBalance(ctx, chainAWallet) + s.Require().NoError(err) + + expected := testvalues.StartingTokenAmount + s.Require().Equal(expected, actualBalance) + }) + + t.Run("balances for B and C have not changed", func(t *testing.T) { + chainBIBCToken := testsuite.GetIBCToken(chainADenom, channelAtoB.Counterparty.PortID, channelAtoB.Counterparty.ChannelID) // IBC token sent to chainB + chainBBalance, err := testsuite.GetChainBalanceForDenom(ctx, chainB, chainBIBCToken.IBCDenom(), chainBWallet) + s.Require().NoError(err) + s.Require().Zero(chainBBalance) + + chainCIBCToken := testsuite.GetIBCToken(chainBIBCToken.IBCDenom(), channelBtoC.Counterparty.PortID, channelBtoC.Counterparty.ChannelID) // IBC token sent to chainC + chainCBalance, err := testsuite.GetChainBalanceForDenom(ctx, chainC, chainCIBCToken.IBCDenom(), chainCWallet) + s.Require().NoError(err) + s.Require().Zero(chainCBalance) + }) +} diff --git a/e2e/testsuite/testsuite.go b/e2e/testsuite/testsuite.go index 6ea1d22a8bd..4237afacbec 100644 --- a/e2e/testsuite/testsuite.go +++ b/e2e/testsuite/testsuite.go @@ -564,25 +564,20 @@ func (s *E2ETestSuite) createWalletOnChainIndex(ctx context.Context, amount, cha // GetChainANativeBalance gets the balance of a given user on chain A. func (s *E2ETestSuite) GetChainANativeBalance(ctx context.Context, user ibc.Wallet) (int64, error) { chainA := s.GetAllChains()[0] - - balanceResp, err := query.GRPCQuery[banktypes.QueryBalanceResponse](ctx, chainA, &banktypes.QueryBalanceRequest{ - Address: user.FormattedAddress(), - Denom: chainA.Config().Denom, - }) - if err != nil { - return 0, err - } - - return balanceResp.Balance.Amount.Int64(), nil + return GetChainBalanceForDenom(ctx, chainA, chainA.Config().Denom, user) } // GetChainBNativeBalance gets the balance of a given user on chain B. func (s *E2ETestSuite) GetChainBNativeBalance(ctx context.Context, user ibc.Wallet) (int64, error) { chainB := s.GetAllChains()[1] + return GetChainBalanceForDenom(ctx, chainB, chainB.Config().Denom, user) +} - balanceResp, err := query.GRPCQuery[banktypes.QueryBalanceResponse](ctx, chainB, &banktypes.QueryBalanceRequest{ +// GetChainBalanceForDenom returns the balance for a given denom given a chain. +func GetChainBalanceForDenom(ctx context.Context, chain ibc.Chain, denom string, user ibc.Wallet) (int64, error) { + balanceResp, err := query.GRPCQuery[banktypes.QueryBalanceResponse](ctx, chain, &banktypes.QueryBalanceRequest{ Address: user.FormattedAddress(), - Denom: chainB.Config().Denom, + Denom: denom, }) if err != nil { return 0, err From cf8f4d8fc033c98f42cb833d0c2eeff39cf7336a Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Fri, 19 Jul 2024 12:37:16 +0300 Subject: [PATCH 02/78] chore(core, solomachine)!: remove TypeClientMisbehaviour and Type method on Misbehaviour (#6888) * chore(core, solomachine)remove TypeClientMisbehaviour and the Type method on Misbehaviour * Update CHANGELOG.md * docs: add to migration docs. --- CHANGELOG.md | 1 + docs/docs/05-migrations/13-v8-to-v9.md | 4 +++- modules/core/exported/client.go | 3 --- modules/light-clients/06-solomachine/misbehaviour.go | 5 ----- 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12891f92bbf..3c9a8d3aec0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (core, core/02-client) [\#6763](https://github.com/cosmos/ibc-go/pull/6763) Move prometheus metric labels for 02-client and core into a separate `metrics` package on core. * (core/02-client) [\#6777](https://github.com/cosmos/ibc-go/pull/6777) The `NewClientProposalHandler` of `02-client` has been removed. * (core/types) [\#6794](https://github.com/cosmos/ibc-go/pull/6794) The composite interface `QueryServer` has been removed from package `core/types`. Please use the granular `QueryServer` interfaces provided by each core submodule. +* (light-clients/06-solomachine) [\#6888](https://github.com/cosmos/ibc-go/pull/6888) Remove `TypeClientMisbehaviour` constant and the `Type` method on `Misbehaviour`. ### State Machine Breaking diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 0927ce01015..25af6e27cfa 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -124,6 +124,7 @@ The base application is then set by default to nil and thus authentication is as - The function `CreateLocalhostClient` has been removed. The localhost client is now stateless. - The function `NewClientProposalHandler` has been removed. [#6777](https://github.com/cosmos/ibc-go/pull/6777). - The composite interface `QueryServer` has been removed from package `core/types`. Please use the granular `QueryServer` interfaces for ibc submodules directly. +- The `TypeClientMisbehaviour` constant has been removed. ### 02-client @@ -202,7 +203,8 @@ Please check also the [Light client developer guide](../03-light-clients/01-deve ### 06-solomachine -The `Initialize`, `Status`, `GetTimestampAtHeight` and `UpdateStateOnMisbehaviour` functions in `ClientState` have been removed and all their logic has been moved to functions of the `LightClientModule`. +- The `Initialize`, `Status`, `GetTimestampAtHeight` and `UpdateStateOnMisbehaviour` functions in `ClientState` have been removed and all their logic has been moved to functions of the `LightClientModule`. +- The `Type` method on `Misbehaviour` has been removed. ### 07-tendermint diff --git a/modules/core/exported/client.go b/modules/core/exported/client.go index fd6968c072b..98f18b83a04 100644 --- a/modules/core/exported/client.go +++ b/modules/core/exported/client.go @@ -10,9 +10,6 @@ import ( type Status string const ( - // TypeClientMisbehaviour is the shared evidence misbehaviour type - TypeClientMisbehaviour string = "client_misbehaviour" - // Solomachine is used to indicate that the light client is a solo machine. Solomachine string = "06-solomachine" diff --git a/modules/light-clients/06-solomachine/misbehaviour.go b/modules/light-clients/06-solomachine/misbehaviour.go index e086ff27e4e..d74b2461bf8 100644 --- a/modules/light-clients/06-solomachine/misbehaviour.go +++ b/modules/light-clients/06-solomachine/misbehaviour.go @@ -16,11 +16,6 @@ func (Misbehaviour) ClientType() string { return exported.Solomachine } -// Type implements Misbehaviour interface. -func (Misbehaviour) Type() string { - return exported.TypeClientMisbehaviour -} - // ValidateBasic implements Misbehaviour interface. func (misbehaviour Misbehaviour) ValidateBasic() error { if misbehaviour.Sequence == 0 { From f41d80a1b3afdbb78058dbef4db44b3641a9ac3b Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Fri, 19 Jul 2024 12:43:27 +0300 Subject: [PATCH 03/78] chore(core): rename back to VerifyMembership. (#6887) --- modules/core/02-client/keeper/keeper.go | 4 ++-- modules/core/03-connection/keeper/verify.go | 18 +++++++++--------- .../03-connection/types/expected_keepers.go | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/core/02-client/keeper/keeper.go b/modules/core/02-client/keeper/keeper.go index 65c54f2f298..d3ee8ca4864 100644 --- a/modules/core/02-client/keeper/keeper.go +++ b/modules/core/02-client/keeper/keeper.go @@ -330,8 +330,8 @@ func (k *Keeper) ValidateSelfClient(ctx sdk.Context, clientState exported.Client return k.consensusHost.ValidateSelfClient(ctx, clientState) } -// VerifyMembershipProof retrieves the light client module for the clientID and verifies the proof of the existence of a key-value pair at a specified height. -func (k *Keeper) VerifyMembershipProof(ctx sdk.Context, clientID string, height exported.Height, delayTimePeriod uint64, delayBlockPeriod uint64, proof []byte, path exported.Path, value []byte) error { +// VerifyMembership retrieves the light client module for the clientID and verifies the proof of the existence of a key-value pair at a specified height. +func (k *Keeper) VerifyMembership(ctx sdk.Context, clientID string, height exported.Height, delayTimePeriod uint64, delayBlockPeriod uint64, proof []byte, path exported.Path, value []byte) error { clientModule, err := k.Route(ctx, clientID) if err != nil { return err diff --git a/modules/core/03-connection/keeper/verify.go b/modules/core/03-connection/keeper/verify.go index fe2894dd7bb..34db455dc10 100644 --- a/modules/core/03-connection/keeper/verify.go +++ b/modules/core/03-connection/keeper/verify.go @@ -40,7 +40,7 @@ func (k *Keeper) VerifyClientState( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, height, 0, 0, // skip delay period checks for non-packet processing verification proof, merklePath, bz, @@ -77,7 +77,7 @@ func (k *Keeper) VerifyClientConsensusState( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, height, 0, 0, // skip delay period checks for non-packet processing verification proof, merklePath, bz, @@ -114,7 +114,7 @@ func (k *Keeper) VerifyConnectionState( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, height, 0, 0, // skip delay period checks for non-packet processing verification proof, merklePath, bz, @@ -152,7 +152,7 @@ func (k *Keeper) VerifyChannelState( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, height, 0, 0, // skip delay period checks for non-packet processing verification proof, merklePath, bz, @@ -190,7 +190,7 @@ func (k *Keeper) VerifyPacketCommitment( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, height, timeDelay, blockDelay, proof, merklePath, commitmentBytes, ); err != nil { return errorsmod.Wrapf(err, "failed packet commitment verification for client (%s)", clientID) @@ -226,7 +226,7 @@ func (k *Keeper) VerifyPacketAcknowledgement( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, height, timeDelay, blockDelay, proof, merklePath, channeltypes.CommitAcknowledgement(acknowledgement), ); err != nil { @@ -298,7 +298,7 @@ func (k *Keeper) VerifyNextSequenceRecv( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, height, timeDelay, blockDelay, proof, merklePath, sdk.Uint64ToBigEndian(nextSequenceRecv), @@ -335,7 +335,7 @@ func (k *Keeper) VerifyChannelUpgradeError( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, height, 0, 0, // skip delay period checks for non-packet processing verification proof, merklePath, bz, @@ -372,7 +372,7 @@ func (k *Keeper) VerifyChannelUpgrade( return err } - if err := k.clientKeeper.VerifyMembershipProof( + if err := k.clientKeeper.VerifyMembership( ctx, clientID, proofHeight, 0, 0, // skip delay period checks for non-packet processing verification upgradeProof, merklePath, bz, diff --git a/modules/core/03-connection/types/expected_keepers.go b/modules/core/03-connection/types/expected_keepers.go index 90a7d85f237..a0eb8ccb71f 100644 --- a/modules/core/03-connection/types/expected_keepers.go +++ b/modules/core/03-connection/types/expected_keepers.go @@ -14,7 +14,7 @@ type ClientKeeper interface { GetClientConsensusState(ctx sdk.Context, clientID string, height exported.Height) (exported.ConsensusState, bool) GetSelfConsensusState(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) ValidateSelfClient(ctx sdk.Context, clientState exported.ClientState) error - VerifyMembershipProof(ctx sdk.Context, clientID string, height exported.Height, delayTimePeriod uint64, delayBlockPeriod uint64, proof []byte, path exported.Path, value []byte) error + VerifyMembership(ctx sdk.Context, clientID string, height exported.Height, delayTimePeriod uint64, delayBlockPeriod uint64, proof []byte, path exported.Path, value []byte) error VerifyNonMembership(ctx sdk.Context, clientID string, height exported.Height, delayTimePeriod uint64, delayBlockPeriod uint64, proof []byte, path exported.Path) error IterateClientStates(ctx sdk.Context, prefix []byte, cb func(string, exported.ClientState) bool) } From a3082d055f00ef41d651beaa408a6ba03ffb2df3 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Fri, 19 Jul 2024 11:53:16 +0200 Subject: [PATCH 04/78] docs: add `forwarding` argument to `NewMsgTransfer` (#6895) * docs: add forwarding argument to NewMsgTransfer * alignment --- docs/docs/05-migrations/13-v8-to-v9.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 25af6e27cfa..9375bbef74b 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -34,7 +34,7 @@ govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). ### ICS20 - Transfer -- With support for multidenom transfer packets, the `NewMsgTransfer` constructor function to create a new `MsgTransfer` instance now accepts multiple coins instead of just one: +- With support for multidenom transfer packets and path forwarding, the `NewMsgTransfer` constructor function to create a new `MsgTransfer` instance now accepts multiple coins instead of just one, and an argument with forwarding information: ```diff func NewMsgTransfer( @@ -44,6 +44,7 @@ func NewMsgTransfer( sender, receiver string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, memo string, ++ forwarding *Forwarding, ) ``` From b9681afefb1b0891c25524d3c2bbafd29ac81adc Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Fri, 19 Jul 2024 13:04:02 +0300 Subject: [PATCH 05/78] nit(08-wasm): export expected interfaces used as args in functions. (#6889) --- modules/light-clients/08-wasm/keeper/keeper.go | 5 ++--- modules/light-clients/08-wasm/keeper/keeper_no_vm.go | 7 +++---- modules/light-clients/08-wasm/keeper/keeper_vm.go | 7 +++---- modules/light-clients/08-wasm/keeper/querier.go | 8 ++++---- modules/light-clients/08-wasm/testing/mock_engine.go | 3 +-- modules/light-clients/08-wasm/testing/simapp/app.go | 3 +-- .../08-wasm/testing/simapp/test_helpers.go | 10 +++++----- .../{internal/ibcwasm => types}/expected_interfaces.go | 2 +- .../08-wasm/{internal/ibcwasm => types}/wasm_vm.go | 2 +- 9 files changed, 21 insertions(+), 26 deletions(-) rename modules/light-clients/08-wasm/{internal/ibcwasm => types}/expected_interfaces.go (99%) rename modules/light-clients/08-wasm/{internal/ibcwasm => types}/wasm_vm.go (88%) diff --git a/modules/light-clients/08-wasm/keeper/keeper.go b/modules/light-clients/08-wasm/keeper/keeper.go index fbccfe40055..0e2d8f1b8bd 100644 --- a/modules/light-clients/08-wasm/keeper/keeper.go +++ b/modules/light-clients/08-wasm/keeper/keeper.go @@ -15,7 +15,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" "github.com/cosmos/ibc-go/v9/modules/core/exported" @@ -29,7 +28,7 @@ type Keeper struct { cdc codec.BinaryCodec clientKeeper types.ClientKeeper - vm ibcwasm.WasmEngine + vm types.WasmEngine checksums collections.KeySet[[]byte] storeService store.KVStoreService @@ -59,7 +58,7 @@ func moduleLogger(ctx sdk.Context) log.Logger { } // GetVM returns the keeper's vm engine. -func (k Keeper) GetVM() ibcwasm.WasmEngine { +func (k Keeper) GetVM() types.WasmEngine { return k.vm } diff --git a/modules/light-clients/08-wasm/keeper/keeper_no_vm.go b/modules/light-clients/08-wasm/keeper/keeper_no_vm.go index 9f50a598dda..5dcacf5a176 100644 --- a/modules/light-clients/08-wasm/keeper/keeper_no_vm.go +++ b/modules/light-clients/08-wasm/keeper/keeper_no_vm.go @@ -7,7 +7,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) @@ -20,8 +19,8 @@ func NewKeeperWithVM( _ storetypes.KVStoreService, _ types.ClientKeeper, _ string, - _ ibcwasm.WasmEngine, - _ ibcwasm.QueryRouter, + _ types.WasmEngine, + _ types.QueryRouter, _ ...Option, ) Keeper { panic("not implemented, please build with cgo enabled or nolink_libwasmvm disabled") @@ -37,7 +36,7 @@ func NewKeeperWithConfig( _ types.ClientKeeper, _ string, _ types.WasmConfig, - _ ibcwasm.QueryRouter, + _ types.QueryRouter, _ ...Option, ) Keeper { panic("not implemented, please build with cgo enabled or nolink_libwasmvm disabled") diff --git a/modules/light-clients/08-wasm/keeper/keeper_vm.go b/modules/light-clients/08-wasm/keeper/keeper_vm.go index 69991d65eaa..bcaf2fafa72 100644 --- a/modules/light-clients/08-wasm/keeper/keeper_vm.go +++ b/modules/light-clients/08-wasm/keeper/keeper_vm.go @@ -14,7 +14,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) @@ -26,8 +25,8 @@ func NewKeeperWithVM( storeService store.KVStoreService, clientKeeper types.ClientKeeper, authority string, - vm ibcwasm.WasmEngine, - queryRouter ibcwasm.QueryRouter, + vm types.WasmEngine, + queryRouter types.QueryRouter, opts ...Option, ) Keeper { if clientKeeper == nil { @@ -86,7 +85,7 @@ func NewKeeperWithConfig( clientKeeper types.ClientKeeper, authority string, wasmConfig types.WasmConfig, - queryRouter ibcwasm.QueryRouter, + queryRouter types.QueryRouter, opts ...Option, ) Keeper { vm, err := wasmvm.NewVM(wasmConfig.DataDir, wasmConfig.SupportedCapabilities, types.ContractMemoryLimit, wasmConfig.ContractDebugMode, types.MemoryCacheSize) diff --git a/modules/light-clients/08-wasm/keeper/querier.go b/modules/light-clients/08-wasm/keeper/querier.go index b109af6e64f..3c8bda4515b 100644 --- a/modules/light-clients/08-wasm/keeper/querier.go +++ b/modules/light-clients/08-wasm/keeper/querier.go @@ -14,7 +14,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) /* @@ -23,7 +23,7 @@ to handle queries. The global `ibcwasm.QueryPluginsI` points to a `types.QueryPl contains two sub-queriers: `types.CustomQuerier` and `types.StargateQuerier`. These sub-queriers can be replaced by the user through the options api in the keeper. -In addition, the `types.StargateQuerier` references a global `ibcwasm.QueryRouter` which points +In addition, the `types.StargateQuerier` references a global `types.QueryRouter` which points to `baseapp.GRPCQueryRouter`. This design is based on wasmd's (v0.50.0) querier plugin design. @@ -122,7 +122,7 @@ func (e QueryPlugins) HandleQuery(ctx sdk.Context, caller string, request wasmvm } // NewDefaultQueryPlugins returns the default set of query plugins -func NewDefaultQueryPlugins(queryRouter ibcwasm.QueryRouter) QueryPlugins { +func NewDefaultQueryPlugins(queryRouter types.QueryRouter) QueryPlugins { return QueryPlugins{ Custom: RejectCustomQuerier(), Stargate: AcceptListStargateQuerier([]string{}, queryRouter), @@ -131,7 +131,7 @@ func NewDefaultQueryPlugins(queryRouter ibcwasm.QueryRouter) QueryPlugins { // AcceptListStargateQuerier allows all queries that are in the provided accept list. // This function returns protobuf encoded responses in bytes. -func AcceptListStargateQuerier(acceptedQueries []string, queryRouter ibcwasm.QueryRouter) func(sdk.Context, *wasmvmtypes.StargateQuery) ([]byte, error) { +func AcceptListStargateQuerier(acceptedQueries []string, queryRouter types.QueryRouter) func(sdk.Context, *wasmvmtypes.StargateQuery) ([]byte, error) { return func(ctx sdk.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) { // append user defined accepted queries to default list defined above. acceptedQueries = append(defaultAcceptList, acceptedQueries...) diff --git a/modules/light-clients/08-wasm/testing/mock_engine.go b/modules/light-clients/08-wasm/testing/mock_engine.go index 7b21a33a0e3..23a261307f8 100644 --- a/modules/light-clients/08-wasm/testing/mock_engine.go +++ b/modules/light-clients/08-wasm/testing/mock_engine.go @@ -10,14 +10,13 @@ import ( wasmvm "github.com/CosmWasm/wasmvm/v2" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) const DefaultGasUsed = uint64(1) var ( - _ ibcwasm.WasmEngine = (*MockWasmEngine)(nil) + _ types.WasmEngine = (*MockWasmEngine)(nil) // queryTypes contains all the possible query message types. queryTypes = [...]any{types.StatusMsg{}, types.TimestampAtHeightMsg{}, types.VerifyClientMessageMsg{}, types.CheckForMisbehaviourMsg{}} diff --git a/modules/light-clients/08-wasm/testing/simapp/app.go b/modules/light-clients/08-wasm/testing/simapp/app.go index 1f6b98d663c..07c64c64262 100644 --- a/modules/light-clients/08-wasm/testing/simapp/app.go +++ b/modules/light-clients/08-wasm/testing/simapp/app.go @@ -109,7 +109,6 @@ import ( capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" wasm "github.com/cosmos/ibc-go/modules/light-clients/08-wasm" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" wasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" wasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ica "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts" @@ -250,7 +249,7 @@ func NewSimApp( traceStore io.Writer, loadLatest bool, appOpts servertypes.AppOptions, - mockVM ibcwasm.WasmEngine, + mockVM wasmtypes.WasmEngine, baseAppOptions ...func(*baseapp.BaseApp), ) *SimApp { interfaceRegistry, _ := types.NewInterfaceRegistryWithOptions(types.InterfaceRegistryOptions{ diff --git a/modules/light-clients/08-wasm/testing/simapp/test_helpers.go b/modules/light-clients/08-wasm/testing/simapp/test_helpers.go index fffcfda8c9d..209b84e169e 100644 --- a/modules/light-clients/08-wasm/testing/simapp/test_helpers.go +++ b/modules/light-clients/08-wasm/testing/simapp/test_helpers.go @@ -25,10 +25,10 @@ import ( abci "github.com/cometbft/cometbft/abci/types" cmttypes "github.com/cometbft/cometbft/types" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/ibcwasm" + wasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) -func setup(tb testing.TB, chainID string, withGenesis bool, invCheckPeriod uint, mockVM ibcwasm.WasmEngine) (*SimApp, GenesisState) { +func setup(tb testing.TB, chainID string, withGenesis bool, invCheckPeriod uint, mockVM wasmtypes.WasmEngine) (*SimApp, GenesisState) { tb.Helper() db := dbm.NewMemDB() @@ -54,7 +54,7 @@ func setup(tb testing.TB, chainID string, withGenesis bool, invCheckPeriod uint, } // SetupWithEmptyStore set up a simapp instance with empty DB -func SetupWithEmptyStore(tb testing.TB, mockVM ibcwasm.WasmEngine) *SimApp { +func SetupWithEmptyStore(tb testing.TB, mockVM wasmtypes.WasmEngine) *SimApp { tb.Helper() app, _ := setup(tb, "", false, 0, mockVM) @@ -65,7 +65,7 @@ func SetupWithEmptyStore(tb testing.TB, mockVM ibcwasm.WasmEngine) *SimApp { // that also act as delegators. For simplicity, each validator is bonded with a delegation // of one consensus engine unit in the default token of the simapp from first genesis // account. A Nop logger is set in SimApp. -func SetupWithGenesisValSetSnapshotter(t *testing.T, mockVM ibcwasm.WasmEngine, valSet *cmttypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *SimApp { +func SetupWithGenesisValSetSnapshotter(t *testing.T, mockVM wasmtypes.WasmEngine, valSet *cmttypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *SimApp { t.Helper() app, genesisState := setup(t, "", true, 5, mockVM) @@ -87,7 +87,7 @@ func SetupWithGenesisValSetSnapshotter(t *testing.T, mockVM ibcwasm.WasmEngine, } // SetupWithSnapshotter initializes a new SimApp with a configured snapshot db. A Nop logger is set in SimApp. -func SetupWithSnapshotter(t *testing.T, mockVM ibcwasm.WasmEngine) *SimApp { +func SetupWithSnapshotter(t *testing.T, mockVM wasmtypes.WasmEngine) *SimApp { t.Helper() privVal := cmttypes.NewMockPV() diff --git a/modules/light-clients/08-wasm/internal/ibcwasm/expected_interfaces.go b/modules/light-clients/08-wasm/types/expected_interfaces.go similarity index 99% rename from modules/light-clients/08-wasm/internal/ibcwasm/expected_interfaces.go rename to modules/light-clients/08-wasm/types/expected_interfaces.go index ea000c4f26b..11686cc6049 100644 --- a/modules/light-clients/08-wasm/internal/ibcwasm/expected_interfaces.go +++ b/modules/light-clients/08-wasm/types/expected_interfaces.go @@ -1,4 +1,4 @@ -package ibcwasm +package types import ( wasmvm "github.com/CosmWasm/wasmvm/v2" diff --git a/modules/light-clients/08-wasm/internal/ibcwasm/wasm_vm.go b/modules/light-clients/08-wasm/types/wasm_vm.go similarity index 88% rename from modules/light-clients/08-wasm/internal/ibcwasm/wasm_vm.go rename to modules/light-clients/08-wasm/types/wasm_vm.go index 32b22a3f9e4..e8d237bcef6 100644 --- a/modules/light-clients/08-wasm/internal/ibcwasm/wasm_vm.go +++ b/modules/light-clients/08-wasm/types/wasm_vm.go @@ -1,6 +1,6 @@ //go:build cgo && !nolink_libwasmvm -package ibcwasm +package types import wasmvm "github.com/CosmWasm/wasmvm/v2" From 6330deb47b1678afbaed4552ec1e9e512954ddaf Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Fri, 19 Jul 2024 13:14:28 +0300 Subject: [PATCH 06/78] nit(07-tendermint): remove unused authority argument. (#6890) * nit(07-tendermint): remove unused authority argument. * docs: tweak integration section for registering tm light client module. --- docs/docs/01-ibc/02-integration.md | 7 ++----- modules/apps/callbacks/testing/simapp/app.go | 2 +- modules/core/02-client/types/router_test.go | 7 ++----- modules/light-clients/07-tendermint/light_client_module.go | 2 +- modules/light-clients/08-wasm/testing/simapp/app.go | 2 +- simapp/app.go | 2 +- testing/simapp/app.go | 2 +- 7 files changed, 9 insertions(+), 15 deletions(-) diff --git a/docs/docs/01-ibc/02-integration.md b/docs/docs/01-ibc/02-integration.md index f4cf0f206ca..cb31b9a0805 100644 --- a/docs/docs/01-ibc/02-integration.md +++ b/docs/docs/01-ibc/02-integration.md @@ -247,13 +247,10 @@ import ( // after sealing the IBC router clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() +storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() -tmLightClientModule := ibctm.NewLightClientModule( - appCodec, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), -) +tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) - app.ModuleManager = module.NewManager( // ... capability.NewAppModule(appCodec, *app.CapabilityKeeper, false), diff --git a/modules/apps/callbacks/testing/simapp/app.go b/modules/apps/callbacks/testing/simapp/app.go index 7050412e5fb..3def147154f 100644 --- a/modules/apps/callbacks/testing/simapp/app.go +++ b/modules/apps/callbacks/testing/simapp/app.go @@ -571,7 +571,7 @@ func NewSimApp( clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() - tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) smLightClientModule := solomachine.NewLightClientModule(appCodec, storeProvider) diff --git a/modules/core/02-client/types/router_test.go b/modules/core/02-client/types/router_test.go index 98d7c228057..7b18319601c 100644 --- a/modules/core/02-client/types/router_test.go +++ b/modules/core/02-client/types/router_test.go @@ -6,9 +6,6 @@ import ( "github.com/stretchr/testify/require" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" "github.com/cosmos/ibc-go/v9/modules/core/exported" ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" @@ -57,7 +54,7 @@ func (suite *TypesTestSuite) TestAddRoute() { cdc := suite.chainA.App.AppCodec() storeProvider := types.NewStoreProvider(suite.chainA.GetSimApp().GetKey(exported.StoreKey)) - tmLightClientModule := ibctm.NewLightClientModule(cdc, storeProvider, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + tmLightClientModule := ibctm.NewLightClientModule(cdc, storeProvider) router = types.NewRouter() tc.malleate() @@ -114,7 +111,7 @@ func (suite *TypesTestSuite) TestHasGetRoute() { cdc := suite.chainA.App.AppCodec() storeProvider := types.NewStoreProvider(suite.chainA.GetSimApp().GetKey(exported.StoreKey)) - tmLightClientModule := ibctm.NewLightClientModule(cdc, storeProvider, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + tmLightClientModule := ibctm.NewLightClientModule(cdc, storeProvider) router := types.NewRouter() router.AddRoute(exported.Tendermint, &tmLightClientModule) diff --git a/modules/light-clients/07-tendermint/light_client_module.go b/modules/light-clients/07-tendermint/light_client_module.go index ff0664e96c6..7d772dbe292 100644 --- a/modules/light-clients/07-tendermint/light_client_module.go +++ b/modules/light-clients/07-tendermint/light_client_module.go @@ -22,7 +22,7 @@ type LightClientModule struct { } // NewLightClientModule creates and returns a new 07-tendermint LightClientModule. -func NewLightClientModule(cdc codec.BinaryCodec, storeProvider clienttypes.StoreProvider, authority string) LightClientModule { +func NewLightClientModule(cdc codec.BinaryCodec, storeProvider clienttypes.StoreProvider) LightClientModule { return LightClientModule{ cdc: cdc, storeProvider: storeProvider, diff --git a/modules/light-clients/08-wasm/testing/simapp/app.go b/modules/light-clients/08-wasm/testing/simapp/app.go index 07c64c64262..db2b6c69927 100644 --- a/modules/light-clients/08-wasm/testing/simapp/app.go +++ b/modules/light-clients/08-wasm/testing/simapp/app.go @@ -596,7 +596,7 @@ func NewSimApp( clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() - tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) smLightClientModule := solomachine.NewLightClientModule(appCodec, storeProvider) diff --git a/simapp/app.go b/simapp/app.go index 77d82f1333d..821177ed9cf 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -554,7 +554,7 @@ func NewSimApp( clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() - tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) smLightClientModule := solomachine.NewLightClientModule(appCodec, storeProvider) diff --git a/testing/simapp/app.go b/testing/simapp/app.go index 3c608c7c085..f018d3e70f6 100644 --- a/testing/simapp/app.go +++ b/testing/simapp/app.go @@ -517,7 +517,7 @@ func NewSimApp( clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() - tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) smLightClientModule := solomachine.NewLightClientModule(appCodec, storeProvider) From aefc31d9cd31236c5a497aabfc79dc7afd92ea56 Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Fri, 19 Jul 2024 13:49:55 +0300 Subject: [PATCH 07/78] feat(core): return client identifier in create client response. (#6886) --- modules/core/02-client/types/tx.pb.go | 145 +++++++++++++++++--------- modules/core/keeper/msg_server.go | 5 +- proto/ibc/core/client/v1/tx.proto | 6 +- 3 files changed, 103 insertions(+), 53 deletions(-) diff --git a/modules/core/02-client/types/tx.pb.go b/modules/core/02-client/types/tx.pb.go index cdaf341ba7e..5a22491005e 100644 --- a/modules/core/02-client/types/tx.pb.go +++ b/modules/core/02-client/types/tx.pb.go @@ -77,6 +77,7 @@ var xxx_messageInfo_MsgCreateClient proto.InternalMessageInfo // MsgCreateClientResponse defines the Msg/CreateClient response type. type MsgCreateClientResponse struct { + ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` } func (m *MsgCreateClientResponse) Reset() { *m = MsgCreateClientResponse{} } @@ -654,58 +655,59 @@ func init() { func init() { proto.RegisterFile("ibc/core/client/v1/tx.proto", fileDescriptor_cb5dc4651eb49a04) } var fileDescriptor_cb5dc4651eb49a04 = []byte{ - // 807 bytes of a gzipped FileDescriptorProto + // 819 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0x8e, 0xd3, 0x36, 0xa2, 0xd7, 0xb4, 0xa1, 0x47, 0x4a, 0x53, 0x97, 0x26, 0x55, 0xe8, 0x50, - 0x0a, 0xb5, 0x9b, 0x22, 0x41, 0x01, 0x31, 0xb4, 0x59, 0xe8, 0x10, 0xa9, 0x72, 0xc5, 0xc2, 0x12, - 0x6c, 0xe7, 0x72, 0x35, 0x8a, 0x7d, 0x96, 0xef, 0x1c, 0xe8, 0x86, 0x98, 0x18, 0x19, 0x58, 0xd8, + 0x14, 0x8e, 0xd3, 0x34, 0xa2, 0xd7, 0xb4, 0xa1, 0x47, 0x4a, 0x53, 0x97, 0x26, 0x55, 0xe8, 0x50, + 0x0a, 0xb5, 0x9b, 0x22, 0x41, 0x29, 0x30, 0xb4, 0x59, 0xe8, 0x10, 0xa9, 0x72, 0xc5, 0xc2, 0x92, + 0xda, 0xce, 0xc5, 0x35, 0x8a, 0x7d, 0x96, 0xef, 0x1c, 0xe8, 0x86, 0x98, 0x18, 0x19, 0x58, 0xd8, 0xf8, 0x09, 0x15, 0x3f, 0x80, 0x0d, 0xa9, 0x63, 0x47, 0x26, 0x84, 0xda, 0xa1, 0x12, 0xbf, 0x02, - 0xd9, 0x77, 0x49, 0x6d, 0x27, 0x0e, 0xa9, 0xd8, 0x62, 0xbf, 0xef, 0xdd, 0xfb, 0xbe, 0x77, 0xef, - 0x7d, 0x31, 0x58, 0xb6, 0x0c, 0x53, 0x35, 0x89, 0x87, 0x54, 0xb3, 0x63, 0x21, 0x87, 0xa9, 0xdd, - 0x9a, 0xca, 0xde, 0x29, 0xae, 0x47, 0x18, 0x81, 0xd0, 0x32, 0x4c, 0x25, 0x08, 0x2a, 0x3c, 0xa8, - 0x74, 0x6b, 0xf2, 0xa2, 0x49, 0xa8, 0x4d, 0xa8, 0x6a, 0x53, 0x1c, 0x60, 0x6d, 0x8a, 0x39, 0x58, - 0x5e, 0x13, 0x01, 0xdf, 0xc5, 0x9e, 0xde, 0x42, 0x6a, 0xb7, 0x66, 0x20, 0xa6, 0xd7, 0x7a, 0xcf, - 0x02, 0x55, 0xc4, 0x04, 0x93, 0xf0, 0xa7, 0x1a, 0xfc, 0x12, 0x6f, 0x97, 0x30, 0x21, 0xb8, 0x83, - 0xd4, 0xf0, 0xc9, 0xf0, 0xdb, 0xaa, 0xee, 0x1c, 0x8b, 0x50, 0x65, 0x08, 0x41, 0xc1, 0x26, 0x04, - 0x54, 0xbf, 0x49, 0xa0, 0xd0, 0xa0, 0xb8, 0xee, 0x21, 0x9d, 0xa1, 0x7a, 0x18, 0x81, 0x8f, 0x41, - 0x9e, 0x63, 0x9a, 0x94, 0xe9, 0x0c, 0x95, 0xa4, 0x55, 0x69, 0x7d, 0x66, 0xbb, 0xa8, 0xf0, 0x32, - 0x4a, 0xaf, 0x8c, 0xb2, 0xeb, 0x1c, 0x6b, 0x33, 0x1c, 0x79, 0x18, 0x00, 0xe1, 0x73, 0x50, 0x30, - 0x89, 0x43, 0x91, 0x43, 0x7d, 0x2a, 0x72, 0xb3, 0x23, 0x72, 0xe7, 0xfa, 0x60, 0x9e, 0x7e, 0x1b, - 0xe4, 0xa8, 0x85, 0x1d, 0xe4, 0x95, 0x26, 0x56, 0xa5, 0xf5, 0x69, 0x4d, 0x3c, 0x3d, 0x2d, 0x7c, - 0xfc, 0x5a, 0xc9, 0x7c, 0xb8, 0x3c, 0xd9, 0x10, 0x2f, 0xaa, 0x4b, 0x60, 0x31, 0xc1, 0x59, 0x43, - 0xd4, 0x0d, 0x0e, 0xab, 0x7e, 0xe6, 0x7a, 0x5e, 0xba, 0xad, 0x2b, 0x3d, 0xcb, 0x60, 0x5a, 0xe8, - 0xb1, 0x5a, 0xa1, 0x98, 0x69, 0xed, 0x06, 0x7f, 0xb1, 0xdf, 0x82, 0xcf, 0xc0, 0x9c, 0x08, 0xda, - 0x88, 0x52, 0x1d, 0x8f, 0xa6, 0x3c, 0xcb, 0xb1, 0x0d, 0x0e, 0xbd, 0x2e, 0xe3, 0x28, 0xab, 0x3e, - 0xe3, 0x1f, 0x59, 0x70, 0x33, 0x8c, 0x85, 0x17, 0x3d, 0x0e, 0xe5, 0xe4, 0xfd, 0x64, 0xff, 0xe3, - 0x7e, 0x26, 0xae, 0x71, 0x3f, 0x5b, 0xa0, 0xe8, 0x7a, 0x84, 0xb4, 0x9b, 0x62, 0x28, 0x9b, 0xfc, - 0xec, 0xd2, 0xe4, 0xaa, 0xb4, 0x9e, 0xd7, 0x60, 0x18, 0x8b, 0xcb, 0xd8, 0x05, 0x2b, 0x89, 0x8c, - 0x44, 0xf9, 0xa9, 0x30, 0x55, 0x8e, 0xa5, 0xa6, 0x0d, 0x45, 0x6e, 0x74, 0x8b, 0x65, 0x50, 0x4a, - 0xb6, 0xb1, 0xdf, 0xe3, 0x2f, 0x12, 0x58, 0x68, 0x50, 0x7c, 0xe8, 0x1b, 0xb6, 0xc5, 0x1a, 0x16, - 0x35, 0xd0, 0x91, 0xde, 0xb5, 0x88, 0xef, 0x8d, 0x6e, 0xf4, 0x0e, 0xc8, 0xdb, 0x11, 0xf0, 0xc8, - 0x46, 0xc7, 0x90, 0xa9, 0x83, 0x31, 0x9f, 0x60, 0x5d, 0x92, 0xaa, 0x15, 0xb0, 0x32, 0x94, 0x5a, - 0x94, 0x7c, 0x30, 0x20, 0x1a, 0x32, 0x49, 0x17, 0x79, 0xa2, 0xb3, 0x1b, 0x60, 0x9e, 0xfa, 0xc6, - 0x1b, 0x64, 0xb2, 0x66, 0x92, 0x7f, 0x41, 0x04, 0xea, 0x3d, 0x19, 0x5b, 0xa0, 0x48, 0x7d, 0x83, - 0x32, 0x8b, 0xf9, 0x0c, 0x45, 0xe0, 0xd9, 0x10, 0x0e, 0xaf, 0x62, 0xfd, 0x8c, 0xb1, 0xe7, 0x9a, - 0x37, 0x3d, 0x46, 0xad, 0xcf, 0xfb, 0x3b, 0x6f, 0xfa, 0xfe, 0x5e, 0xfd, 0x90, 0xb4, 0xd9, 0x5b, - 0xdd, 0x43, 0xe2, 0x72, 0xe0, 0x23, 0x30, 0xe9, 0x76, 0x74, 0x47, 0x18, 0xcb, 0x1d, 0x85, 0x7b, - 0x9f, 0xd2, 0xf3, 0x3a, 0xe1, 0x7d, 0xca, 0x41, 0x47, 0x77, 0xf6, 0x26, 0x4f, 0x7f, 0x55, 0x32, - 0x5a, 0x88, 0x87, 0x2f, 0xc0, 0x82, 0xc0, 0xb4, 0x9a, 0x63, 0x6f, 0xc0, 0xad, 0x5e, 0x4a, 0x3d, - 0xb2, 0x09, 0x69, 0x02, 0x67, 0xa2, 0xe2, 0xf8, 0xcd, 0x0c, 0xf2, 0xef, 0x2b, 0x64, 0x11, 0xaf, - 0x39, 0xd0, 0x3d, 0xdd, 0xa6, 0x91, 0x83, 0xa5, 0xe8, 0xc1, 0x70, 0x07, 0xe4, 0xdc, 0x10, 0x21, - 0xb8, 0xca, 0xca, 0xe0, 0xbf, 0x83, 0xc2, 0xcf, 0x10, 0x92, 0x05, 0x7e, 0xb4, 0x97, 0xf0, 0x8c, - 0x1e, 0xa1, 0xed, 0x3f, 0x53, 0x60, 0xa2, 0x41, 0x31, 0x7c, 0x0d, 0xf2, 0x31, 0x47, 0xbf, 0x3b, - 0xac, 0x5a, 0xc2, 0x42, 0xe5, 0xfb, 0x63, 0x80, 0x7a, 0x95, 0x82, 0x0a, 0x31, 0x8f, 0x4d, 0xab, - 0x10, 0x05, 0xa5, 0x56, 0x18, 0xe6, 0x8b, 0xd0, 0x04, 0xb3, 0x71, 0x33, 0x59, 0x4b, 0xcd, 0x8e, - 0xa0, 0xe4, 0x07, 0xe3, 0xa0, 0xfa, 0x45, 0x3c, 0x00, 0x87, 0x98, 0xc2, 0xbd, 0x94, 0x33, 0x06, - 0xa1, 0x72, 0x6d, 0x6c, 0x68, 0x54, 0x58, 0x7c, 0x97, 0xd3, 0x84, 0xc5, 0x50, 0xa9, 0xc2, 0x86, - 0x2e, 0x5f, 0x20, 0x6c, 0xc8, 0xe2, 0xa5, 0x09, 0x1b, 0x84, 0xa6, 0x0a, 0x4b, 0x5f, 0x07, 0xd8, - 0x06, 0x30, 0x7a, 0x93, 0x62, 0x23, 0x46, 0x4f, 0x06, 0x07, 0xfd, 0x63, 0x32, 0xe2, 0x53, 0x2e, - 0x4f, 0xbd, 0xbf, 0x3c, 0xd9, 0x90, 0xf6, 0xb4, 0xd3, 0xf3, 0xb2, 0x74, 0x76, 0x5e, 0x96, 0x7e, - 0x9f, 0x97, 0xa5, 0x4f, 0x17, 0xe5, 0xcc, 0xd9, 0x45, 0x39, 0xf3, 0xf3, 0xa2, 0x9c, 0x79, 0xb5, - 0x83, 0x2d, 0x76, 0xe4, 0x1b, 0x8a, 0x49, 0x6c, 0x55, 0x7c, 0x57, 0x59, 0x86, 0xb9, 0x89, 0x89, - 0xda, 0x7d, 0xa2, 0xda, 0xa4, 0xe5, 0x77, 0x10, 0xe5, 0x5f, 0x45, 0x5b, 0xdb, 0x9b, 0xe2, 0xc3, - 0x88, 0x1d, 0xbb, 0x88, 0x1a, 0xb9, 0xd0, 0x3a, 0x1e, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x41, - 0x95, 0x49, 0x9d, 0xd9, 0x09, 0x00, 0x00, + 0xd9, 0x77, 0x49, 0x6d, 0x27, 0x36, 0x41, 0x6c, 0xb1, 0xdf, 0xf7, 0xee, 0x7d, 0xdf, 0xbb, 0xf7, + 0xbe, 0x18, 0x2c, 0x99, 0x9a, 0x2e, 0xeb, 0xd8, 0x45, 0xb2, 0xde, 0x35, 0x91, 0x4d, 0xe5, 0x5e, + 0x5d, 0xa6, 0x6f, 0x25, 0xc7, 0xc5, 0x14, 0x43, 0x68, 0x6a, 0xba, 0xe4, 0x07, 0x25, 0x16, 0x94, + 0x7a, 0x75, 0x71, 0x41, 0xc7, 0xc4, 0xc2, 0x44, 0xb6, 0x88, 0xe1, 0x63, 0x2d, 0x62, 0x30, 0xb0, + 0xb8, 0xca, 0x03, 0x9e, 0x63, 0xb8, 0x6a, 0x1b, 0xc9, 0xbd, 0xba, 0x86, 0xa8, 0x5a, 0xef, 0x3f, + 0x73, 0x54, 0xc9, 0xc0, 0x06, 0x0e, 0x7e, 0xca, 0xfe, 0x2f, 0xfe, 0x76, 0xd1, 0xc0, 0xd8, 0xe8, + 0x22, 0x39, 0x78, 0xd2, 0xbc, 0x8e, 0xac, 0xda, 0x27, 0x3c, 0x54, 0x1d, 0x41, 0x90, 0xb3, 0x09, + 0x00, 0xb5, 0xaf, 0x02, 0x28, 0x36, 0x89, 0xd1, 0x70, 0x91, 0x4a, 0x51, 0x23, 0x88, 0xc0, 0xc7, + 0xa0, 0xc0, 0x30, 0x2d, 0x42, 0x55, 0x8a, 0xca, 0xc2, 0x8a, 0xb0, 0x36, 0xbd, 0x55, 0x92, 0x58, + 0x19, 0xa9, 0x5f, 0x46, 0xda, 0xb5, 0x4f, 0x94, 0x69, 0x86, 0x3c, 0xf4, 0x81, 0xf0, 0x39, 0x28, + 0xea, 0xd8, 0x26, 0xc8, 0x26, 0x1e, 0xe1, 0xb9, 0xd9, 0x94, 0xdc, 0xd9, 0x01, 0x98, 0xa5, 0xdf, + 0x06, 0x79, 0x62, 0x1a, 0x36, 0x72, 0xcb, 0x13, 0x2b, 0xc2, 0xda, 0x94, 0xc2, 0x9f, 0x76, 0x8a, + 0x1f, 0xbe, 0x54, 0x33, 0xef, 0xaf, 0x4e, 0xd7, 0xf9, 0x8b, 0xda, 0x33, 0xb0, 0x10, 0xe3, 0xac, + 0x20, 0xe2, 0xf8, 0x87, 0xc1, 0x25, 0x30, 0xc5, 0xb9, 0x9b, 0xed, 0x80, 0xf8, 0x94, 0x72, 0x83, + 0xbd, 0xd8, 0x6f, 0xef, 0xe4, 0xfc, 0x83, 0x6a, 0x9f, 0x98, 0xe4, 0x97, 0x4e, 0xfb, 0x5a, 0x72, + 0x5a, 0x1a, 0x7c, 0x0a, 0x66, 0x79, 0xd0, 0x42, 0x84, 0xa8, 0x46, 0xba, 0xaa, 0x19, 0x86, 0x6d, + 0x32, 0xe8, 0xf8, 0xa2, 0x16, 0x03, 0x51, 0x61, 0x56, 0x7d, 0x51, 0xb5, 0xef, 0x59, 0x70, 0x33, + 0x88, 0x05, 0xb3, 0x30, 0x0e, 0xe5, 0xf8, 0x15, 0x66, 0xff, 0xe3, 0x0a, 0x27, 0xfe, 0xe1, 0x0a, + 0x37, 0x41, 0xc9, 0x71, 0x31, 0xee, 0xb4, 0xf8, 0xdc, 0xb6, 0xd8, 0xd9, 0xe5, 0xdc, 0x8a, 0xb0, + 0x56, 0x50, 0x60, 0x10, 0x8b, 0xca, 0xd8, 0x05, 0xcb, 0xb1, 0x8c, 0x58, 0xf9, 0xc9, 0x20, 0x55, + 0x8c, 0xa4, 0x26, 0xcd, 0x4d, 0x3e, 0xbd, 0xc5, 0x22, 0x28, 0xc7, 0xdb, 0x38, 0xe8, 0xf1, 0x67, + 0x01, 0xcc, 0x37, 0x89, 0x71, 0xe8, 0x69, 0x96, 0x49, 0x9b, 0x26, 0xd1, 0xd0, 0xb1, 0xda, 0x33, + 0xb1, 0xe7, 0xa6, 0x37, 0x7a, 0x1b, 0x14, 0xac, 0x10, 0x38, 0xb5, 0xd1, 0x11, 0x64, 0xe2, 0x60, + 0xcc, 0xc5, 0x58, 0x97, 0x85, 0x5a, 0x15, 0x2c, 0x8f, 0xa4, 0x16, 0x26, 0xef, 0x0f, 0x88, 0x82, + 0x74, 0xdc, 0x43, 0x2e, 0xef, 0xec, 0x3a, 0x98, 0x23, 0x9e, 0xf6, 0x1a, 0xe9, 0xb4, 0x15, 0xe7, + 0x5f, 0xe4, 0x81, 0x46, 0x5f, 0xc6, 0x26, 0x28, 0x11, 0x4f, 0x23, 0xd4, 0xa4, 0x1e, 0x45, 0x21, + 0x78, 0x36, 0x80, 0xc3, 0xeb, 0xd8, 0x20, 0x63, 0xec, 0xb9, 0x66, 0x4d, 0x8f, 0x50, 0x1b, 0xf0, + 0xfe, 0xc6, 0x9a, 0xbe, 0xbf, 0xd7, 0x38, 0xc4, 0x1d, 0xfa, 0x46, 0x75, 0x11, 0xbf, 0x1c, 0xf8, + 0x08, 0xe4, 0x9c, 0xae, 0x6a, 0x73, 0xef, 0xb9, 0x23, 0x31, 0x7b, 0x94, 0xfa, 0x76, 0xc8, 0xed, + 0x51, 0x3a, 0xe8, 0xaa, 0xf6, 0x5e, 0xee, 0xec, 0x67, 0x35, 0xa3, 0x04, 0x78, 0xf8, 0x02, 0xcc, + 0x73, 0x4c, 0xbb, 0x35, 0xf6, 0x06, 0xdc, 0xea, 0xa7, 0x34, 0x42, 0x9b, 0x90, 0x24, 0x70, 0x3a, + 0x2c, 0x8e, 0xdd, 0xcc, 0x30, 0xff, 0x81, 0x42, 0x1a, 0xf2, 0x9a, 0x03, 0xd5, 0x55, 0x2d, 0x12, + 0x3a, 0x58, 0x08, 0x1f, 0x0c, 0xb7, 0x41, 0xde, 0x09, 0x10, 0x9c, 0xab, 0x28, 0x0d, 0xff, 0x81, + 0x48, 0xec, 0x0c, 0x2e, 0x99, 0xe3, 0xd3, 0xbd, 0x84, 0x65, 0xf4, 0x09, 0x6d, 0xfd, 0x9e, 0x04, + 0x13, 0x4d, 0x62, 0xc0, 0x23, 0x50, 0x88, 0x98, 0xfe, 0xdd, 0x51, 0xd5, 0x62, 0x2e, 0x2b, 0xde, + 0x1f, 0x03, 0x34, 0xb0, 0xe2, 0x23, 0x50, 0x88, 0x78, 0x6c, 0x52, 0x85, 0x30, 0x28, 0xb1, 0xc2, + 0x28, 0x5f, 0x84, 0x3a, 0x98, 0x89, 0x9a, 0xc9, 0x6a, 0x62, 0x76, 0x08, 0x25, 0x3e, 0x18, 0x07, + 0x35, 0x28, 0xe2, 0x02, 0x38, 0xc2, 0x14, 0xee, 0x25, 0x9c, 0x31, 0x0c, 0x15, 0xeb, 0x63, 0x43, + 0xc3, 0xc2, 0xa2, 0xbb, 0x9c, 0x24, 0x2c, 0x82, 0x4a, 0x14, 0x36, 0x72, 0xf9, 0x7c, 0x61, 0x23, + 0x16, 0x2f, 0x49, 0xd8, 0x30, 0x34, 0x51, 0x58, 0xf2, 0x3a, 0xc0, 0x0e, 0x80, 0xe1, 0x9b, 0xe4, + 0x1b, 0x91, 0x3e, 0x19, 0x0c, 0xf4, 0x97, 0xc9, 0x88, 0x4e, 0xb9, 0x38, 0xf9, 0xee, 0xea, 0x74, + 0x5d, 0xd8, 0x53, 0xce, 0x2e, 0x2a, 0xc2, 0xf9, 0x45, 0x45, 0xf8, 0x75, 0x51, 0x11, 0x3e, 0x5e, + 0x56, 0x32, 0xe7, 0x97, 0x95, 0xcc, 0x8f, 0xcb, 0x4a, 0xe6, 0xd5, 0xb6, 0x61, 0xd2, 0x63, 0x4f, + 0x93, 0x74, 0x6c, 0xc9, 0xfc, 0xd3, 0xcb, 0xd4, 0xf4, 0x0d, 0x03, 0xcb, 0xbd, 0x27, 0xb2, 0x85, + 0xdb, 0x5e, 0x17, 0x11, 0xf6, 0xe1, 0xb4, 0xb9, 0xb5, 0xc1, 0xbf, 0x9d, 0xe8, 0x89, 0x83, 0x88, + 0x96, 0x0f, 0xac, 0xe3, 0xe1, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, 0xa7, 0x07, 0xfb, 0xfc, + 0x09, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1092,6 +1094,13 @@ func (m *MsgCreateClientResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } @@ -1580,6 +1589,10 @@ func (m *MsgCreateClientResponse) Size() (n int) { } var l int _ = l + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -1956,6 +1969,38 @@ func (m *MsgCreateClientResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgCreateClientResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/modules/core/keeper/msg_server.go b/modules/core/keeper/msg_server.go index 345f73c5dce..173706e4b21 100644 --- a/modules/core/keeper/msg_server.go +++ b/modules/core/keeper/msg_server.go @@ -38,11 +38,12 @@ func (k *Keeper) CreateClient(goCtx context.Context, msg *clienttypes.MsgCreateC return nil, err } - if _, err = k.ClientKeeper.CreateClient(ctx, clientState.ClientType(), msg.ClientState.Value, msg.ConsensusState.Value); err != nil { + clientID, err := k.ClientKeeper.CreateClient(ctx, clientState.ClientType(), msg.ClientState.Value, msg.ConsensusState.Value) + if err != nil { return nil, err } - return &clienttypes.MsgCreateClientResponse{}, nil + return &clienttypes.MsgCreateClientResponse{ClientId: clientID}, nil } // UpdateClient defines a rpc handler method for MsgUpdateClient. diff --git a/proto/ibc/core/client/v1/tx.proto b/proto/ibc/core/client/v1/tx.proto index b951e3d43d3..1e9e4f47ada 100644 --- a/proto/ibc/core/client/v1/tx.proto +++ b/proto/ibc/core/client/v1/tx.proto @@ -52,7 +52,11 @@ message MsgCreateClient { } // MsgCreateClientResponse defines the Msg/CreateClient response type. -message MsgCreateClientResponse {} +message MsgCreateClientResponse { + option (gogoproto.goproto_getters) = false; + + string client_id = 1; +} // MsgUpdateClient defines an sdk.Msg to update a IBC client state using // the given client message. From 811807f5f41ce1354d3011f932b76bbd26d95351 Mon Sep 17 00:00:00 2001 From: Gjermund Garaba Date: Fri, 19 Jul 2024 12:59:52 +0200 Subject: [PATCH 08/78] docs: migration doc updates for 08-wasm v8 to v9 (#6845) * docs: migration doc updates for 08-wasm v8 to v9 * fix typo * Move 08-wasm changes to wasm specific migration docs * fixed bad links --------- Co-authored-by: Carlos Rodriguez --- .../04-wasm/03-integration.md | 2 +- .../03-light-clients/04-wasm/09-migrations.md | 19 +++++++++++++++++++ docs/docs/05-migrations/13-v8-to-v9.md | 6 ++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/docs/docs/03-light-clients/04-wasm/03-integration.md b/docs/docs/03-light-clients/04-wasm/03-integration.md index b90d30ce7fb..fac273541a7 100644 --- a/docs/docs/03-light-clients/04-wasm/03-integration.md +++ b/docs/docs/03-light-clients/04-wasm/03-integration.md @@ -138,7 +138,7 @@ func NewSimApp( ctx := app.BaseApp.NewUncachedContext(true, cmtproto.Header{}) // Initialize pinned codes in wasmvm as they are not persisted there - if err := ibcwasmkeeper.InitializePinnedCodes(ctx); err != nil { + if err := app.WasmClientKeeper.InitializePinnedCodes(ctx); err != nil { cmtos.Exit(fmt.Sprintf("failed initialize pinned codes %s", err)) } } diff --git a/docs/docs/03-light-clients/04-wasm/09-migrations.md b/docs/docs/03-light-clients/04-wasm/09-migrations.md index bc1f94e426c..f9c332c6b5f 100644 --- a/docs/docs/03-light-clients/04-wasm/09-migrations.md +++ b/docs/docs/03-light-clients/04-wasm/09-migrations.md @@ -9,6 +9,25 @@ slug: /ibc/light-clients/wasm/migrations This guide provides instructions for migrating 08-wasm versions. +## From ibc-go v8.3.x to ibc-go v9.0.x + +### Chains + +- The `Initialize`, `Status`, `GetTimestampAtHeight`, `GetLatestHeight`, `VerifyMembership`, `VerifyNonMembership`, `VerifyClientMessage`, `UpdateState` and `UpdateStateOnMisbehaviour` functions in `ClientState` have been removed and all their logic has been moved to functions of the `LightClientModule`. +- The `MigrateContract` function has been removed from `ClientState`. +- The `VerifyMembershipMsg` and `VerifyNonMembershipMsg` payloads for `SudoMsg` have been modified. The `Path` field of both structs has been updated from `v1.MerklePath` to `v2.MerklePath`. The new `v2.MerklePath` field contains a `KeyPath` of `[][]byte` as opposed to `[]string`, see [23-commitment](../../05-migrations/13-v8-to-v9.md#23-commitment). This supports proving values stored under keys which contain non-utf8 encoded symbols. As a result, the JSON field `path` containing `key_path` of both messages will marshal elements as a base64 encoded bytestrings. This is a breaking change for 08-wasm client contracts and they should be migrated to correctly support deserialisation of the `v2.MerklePath` field. +- The `ExportMetadataMsg` struct has been removed and is no longer required for contracts to implement. Core IBC will handle exporting all key/value's written to the store by a light client contract. +- The `ZeroCustomFields` interface function has been removed from the `ClientState` interface. Core IBC only used this function to set tendermint client states when scheduling an IBC software upgrade. The interface function has been replaced by a type assertion. +- The `MaxWasmByteSize` function has been removed in favor of the `MaxWasmSize` constant. +- The `HasChecksum`, `GetAllChecksums` and `Logger` functions have been moved from the `types` package to a method on the `Keeper` type in the `keeper` package. +- The `InitializePinnedCodes` function has been moved to a method on the `Keeper` type in the `keeper` package. +- The `CustomQuerier`, `StargateQuerier` and `QueryPlugins` types have been moved from the `types` package to the `keeper` package. +- The `NewDefaultQueryPlugins`, `AcceptListStargateQuerier` and `RejectCustomQuerier` functions has been moved from the `types` package to the `keeper` package. +- The `NewDefaultQueryPlugins` function signature has changed to take an argument: `queryRouter ibcwasm.QueryRouter`. +- The `AcceptListStargateQuerier` function signature has changed to take an additional argument: `queryRouter ibcwasm.QueryRouter`. +- The `WithQueryPlugins` function signature has changed to take in the `QueryPlugins` type from the `keeper` package (previously from the `types` package). +- The `VMGasRegister` variable has been moved from the `types` package to the `keeper` package. + ## From v0.2.0+ibc-go-v8.3-wasmvm-v2.0 to v0.3.0-ibc-go-v8.3-wasmvm-v2.0 ### Contract developers diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 9375bbef74b..53c5807d88f 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -53,7 +53,7 @@ func NewMsgTransfer( - The helper function [`GetDenomPrefix`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L35) has been removed. - The helper function [`GetPrefixedDenom`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L40) has been removed. Please construct the denom using the new [`Denom` type](https://github.com/cosmos/ibc-go/blob/7068760f7277cab75b760a0d6ca95ccbfe2f78ae/modules/apps/transfer/types/token.pb.go#L82). -### `DenomTrace` type +#### `DenomTrace` type - The [`DenomTrace`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/transfer.pb.go#L25-L33) type has been made private and will be completely removed in a later release. - The [`DenomTrace` and `DenomTraces` gRPCs](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/keeper/grpc_query.go#L22-L75) have therefore been removed as well. Please use the [`Denom` type](https://github.com/cosmos/ibc-go/blob/14fedae884e541779eefd01fc4aab5fe194856bc/modules/apps/transfer/types/token.pb.go#L81-L87) instead, and the [`Denom` and `Denoms` gRPCs](https://github.com/cosmos/ibc-go/blob/14fedae884e541779eefd01fc4aab5fe194856bc/modules/apps/transfer/keeper/grpc_query.go#L27-L80). @@ -213,9 +213,7 @@ The `IterateConsensusMetadata` function has been removed. ### 08-wasm -- The `VerifyMembershipMsg` and `VerifyNonMembershipMsg` payloads for `SudoMsg` have been modified. The `Path` field of both structs has been updated from `v1.MerklePath` to `v2.MerklePath`. The new `v2.MerklePath` field contains a `KeyPath` of `[][]byte` as opposed to `[]string`, see [23-commitment](#23-commitment). This supports proving values stored under keys which contain non-utf8 encoded symbols. As a result, the JSON field `path` containing `key_path` of both messages will marshal elements as a base64 encoded bytestrings. This is a breaking change for 08-wasm client contracts and they should be migrated to correctly support deserialisation of the `v2.MerklePath` field. See [08-wasm migrations](../03-light-clients/04-wasm/09-migrations.md) for more information. -- The `ExportMetadataMsg` struct has been removed and is no longer required for contracts to implement. Core IBC will handle exporting all key/value's written to the store by a light client contract. -- The `ZeroCustomFields` interface function has been removed from the `ClientState` interface. Core IBC only used this function to set tendermint client states when scheduling an IBC software upgrade. The interface function has been replaced by a type assertion. +Refer to the [08-wasm migrations](../03-light-clients/04-wasm/09-migrations.md) for more information. ### 09-localhost From 58f8deb3c00b0b692d4f1af84b080f7a2b1bda5d Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Sat, 20 Jul 2024 22:05:28 +0200 Subject: [PATCH 09/78] e2e: compatibility tests for v9 (#6892) * e2e: compatibility tests for v9 * add v9.0.x option to dropdowns * add failed forwarding test --- ...transfer-v2-1-channel-upgrade-chain-a.json | 18 ++ ...ransfer-v2-2-channel-upgrade-chain-a.json} | 2 - .../main/transfer-v2-forwarding-chain-a.json | 21 ++ ...on => transfer-v2-multidenom-chain-a.json} | 0 .../release-v9.0.x/client-chain-a.json | 21 ++ .../release-v9.0.x/connection-chain-a.json | 17 ++ .../release-v9.0.x/genesis-chain-a.json | 17 ++ .../release-v9.0.x/ica-chain-a.json | 26 +++ .../release-v9.0.x/ica-chain-b.json | 26 +++ .../ica-channel-upgrade-chain-a.json | 20 ++ .../ica-channel-upgrade-chain-b.json | 20 ++ .../release-v9.0.x/ica-gov-chain-a.json | 23 +++ .../release-v9.0.x/ica-gov-chain-b.json | 23 +++ .../release-v9.0.x/ica-groups-chain-a.json | 23 +++ .../release-v9.0.x/ica-groups-chain-b.json | 23 +++ .../release-v9.0.x/ica-queries-chain-a.json | 20 ++ .../release-v9.0.x/ica-queries-chain-b.json | 20 ++ .../ica-unordered-channel-chain-a.json | 21 ++ .../ica-unordered-channel-chain-b.json | 21 ++ .../incentivized-ica-chain-a.json | 24 +++ .../incentivized-ica-chain-b.json | 24 +++ .../incentivized-transfer-chain-a.json | 30 +++ .../incentivized-transfer-chain-b.json | 30 +++ .../release-v9.0.x/localhost-ica-chain-a.json | 23 +++ .../localhost-transfer-chain-a.json | 22 ++ .../transfer-authz-chain-a.json | 23 +++ .../transfer-authz-chain-b.json | 23 +++ .../release-v9.0.x/transfer-chain-a.json | 32 +++ .../release-v9.0.x/transfer-chain-b.json | 30 +++ ...transfer-channel-upgrade-chain-a copy.json | 21 ++ .../transfer-channel-upgrade-chain-a.json | 21 ++ ...transfer-v2-1-channel-upgrade-chain-a.json | 18 ++ ...ransfer-v2-2-channel-upgrade-chain-a.json} | 2 - .../transfer-v2-forwarding-chain-a.json | 21 ++ .../transfer-v2-multidenom-chain-a.json | 18 ++ .../transfer-v2-1-channel-upgrade.json | 18 ++ .../transfer-v2-2-channel-upgrade.json | 17 ++ .../unreleased/transfer-v2-forwarding.json | 21 ++ ...er-v2.json => transfer-v2-multidenom.json} | 0 .../e2e-compatibility-unreleased.yaml | 33 +++ .github/workflows/e2e-compatibility.yaml | 42 +++- e2e/tests/transfer/upgradesv2_test.go | 190 +++++++++--------- 42 files changed, 944 insertions(+), 101 deletions(-) create mode 100644 .github/compatibility-test-matrices/main/transfer-v2-1-channel-upgrade-chain-a.json rename .github/compatibility-test-matrices/main/{transfer-v2-channel-upgrade-chain-a.json => transfer-v2-2-channel-upgrade-chain-a.json} (67%) create mode 100644 .github/compatibility-test-matrices/main/transfer-v2-forwarding-chain-a.json rename .github/compatibility-test-matrices/main/{transfer-v2-chain-a.json => transfer-v2-multidenom-chain-a.json} (100%) create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/client-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/connection-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/genesis-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/localhost-ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/localhost-transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a copy.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-v2-1-channel-upgrade-chain-a.json rename .github/compatibility-test-matrices/{unreleased/transfer-v2-channel-upgrade.json => release-v9.0.x/transfer-v2-2-channel-upgrade-chain-a.json} (69%) create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-v2-forwarding-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json create mode 100644 .github/compatibility-test-matrices/unreleased/transfer-v2-1-channel-upgrade.json create mode 100644 .github/compatibility-test-matrices/unreleased/transfer-v2-2-channel-upgrade.json create mode 100644 .github/compatibility-test-matrices/unreleased/transfer-v2-forwarding.json rename .github/compatibility-test-matrices/unreleased/{transfer-v2.json => transfer-v2-multidenom.json} (100%) diff --git a/.github/compatibility-test-matrices/main/transfer-v2-1-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/main/transfer-v2-1-channel-upgrade-chain-a.json new file mode 100644 index 00000000000..487d66ed0fc --- /dev/null +++ b/.github/compatibility-test-matrices/main/transfer-v2-1-channel-upgrade-chain-a.json @@ -0,0 +1,18 @@ +{ + "chain-a": [ + "main" + ], + "chain-b": [ + "main" + ], + "entrypoint": [ + "TransferChannelUpgradesV1TestSuite" + ], + "test": [ + "TestChannelUpgrade_WithICS20v2_Succeeds", + "TestChannelUpgrade_WithFeeMiddlewareAndICS20v2_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/main/transfer-v2-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/main/transfer-v2-2-channel-upgrade-chain-a.json similarity index 67% rename from .github/compatibility-test-matrices/main/transfer-v2-channel-upgrade-chain-a.json rename to .github/compatibility-test-matrices/main/transfer-v2-2-channel-upgrade-chain-a.json index 9703bd94cef..d1558f9c12e 100644 --- a/.github/compatibility-test-matrices/main/transfer-v2-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/main/transfer-v2-2-channel-upgrade-chain-a.json @@ -9,8 +9,6 @@ "TestTransferChannelUpgradesTestSuite" ], "test": [ - "TestChannelUpgrade_WithICS20v2_Succeeds", - "TestChannelUpgrade_WithFeeMiddlewareAndICS20v2_Succeeds", "TestChannelDowngrade_WithICS20v1_Succeeds" ], "relayer-type": [ diff --git a/.github/compatibility-test-matrices/main/transfer-v2-forwarding-chain-a.json b/.github/compatibility-test-matrices/main/transfer-v2-forwarding-chain-a.json new file mode 100644 index 00000000000..7fc9ecbaae4 --- /dev/null +++ b/.github/compatibility-test-matrices/main/transfer-v2-forwarding-chain-a.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "main" + ], + "chain-b": [ + "main" + ], + "entrypoint": [ + "TransferForwardingTestSuite" + ], + "test": [ + "TestForwarding_Succeeds", + "TestForwarding_WithLastChainBeingICS20v1_Succeeds", + "TestForwardingWithUnwindSucceeds", + "TestFailedForwarding", + "TestChannelUpgradeForwarding_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/main/transfer-v2-chain-a.json b/.github/compatibility-test-matrices/main/transfer-v2-multidenom-chain-a.json similarity index 100% rename from .github/compatibility-test-matrices/main/transfer-v2-chain-a.json rename to .github/compatibility-test-matrices/main/transfer-v2-multidenom-chain-a.json diff --git a/.github/compatibility-test-matrices/release-v9.0.x/client-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/client-chain-a.json new file mode 100644 index 00000000000..8cb1a47d514 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/client-chain-a.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestClientTestSuite" + ], + "test": [ + "TestClientUpdateProposal_Succeeds", + "TestRecoverClient_Succeeds", + "TestScheduleIBCUpgrade_Succeeds", + "TestClient_Update_Misbehaviour", + "TestAllowedClientsParam" + ], + "relayer-type": [ + "hermes" + ] +} diff --git a/.github/compatibility-test-matrices/release-v9.0.x/connection-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/connection-chain-a.json new file mode 100644 index 00000000000..a1e8386ec8a --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/connection-chain-a.json @@ -0,0 +1,17 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestConnectionTestSuite" + ], + "test": [ + "TestMaxExpectedTimePerBlockParam" + ], + "relayer-type": [ + "hermes" + ] +} diff --git a/.github/compatibility-test-matrices/release-v9.0.x/genesis-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/genesis-chain-a.json new file mode 100644 index 00000000000..72e89c72162 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/genesis-chain-a.json @@ -0,0 +1,17 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestGenesisTestSuite" + ], + "test": [ + "TestIBCGenesis" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-a.json new file mode 100644 index 00000000000..0adbba595f6 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-a.json @@ -0,0 +1,26 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer", + "TestMsgSendTx_FailedTransfer_InsufficientFunds", + "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", + "TestControllerEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-b.json new file mode 100644 index 00000000000..4c041c294f6 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-b.json @@ -0,0 +1,26 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer", + "TestMsgSendTx_FailedTransfer_InsufficientFunds", + "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", + "TestHostEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-a.json new file mode 100644 index 00000000000..4fc8690c0c0 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-a.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsChannelUpgradesTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_AfterUpgradingOrdertoUnordered", + "TestChannelUpgrade_ICAChannelClosesAfterTimeout_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-b.json new file mode 100644 index 00000000000..daac8125f04 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-b.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsChannelUpgradesTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_AfterUpgradingOrdertoUnordered", + "TestChannelUpgrade_ICAChannelClosesAfterTimeout_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-a.json new file mode 100644 index 00000000000..a0d414d5e42 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsGovTestSuite" + ], + "test": [ + "TestInterchainAccountsGovIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-b.json new file mode 100644 index 00000000000..e7255c99aaa --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsGovTestSuite" + ], + "test": [ + "TestInterchainAccountsGovIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-a.json new file mode 100644 index 00000000000..fbc29cd4e05 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsGroupsTestSuite" + ], + "test": [ + "TestInterchainAccountsGroupsIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-b.json new file mode 100644 index 00000000000..29b7f8b2e86 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsGroupsTestSuite" + ], + "test": [ + "TestInterchainAccountsGroupsIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-a.json new file mode 100644 index 00000000000..da7d84f08f1 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-a.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v7.6.0", + "v7.5.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsQueryTestSuite" + ], + "test": [ + "TestInterchainAccountsQuery" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-b.json new file mode 100644 index 00000000000..3b451c97fa8 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-b.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "v7.6.0", + "v7.5.0", + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsQueryTestSuite" + ], + "test": [ + "TestInterchainAccountsQuery" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-a.json new file mode 100644 index 00000000000..43f7f0df218 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-a.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-b.json new file mode 100644 index 00000000000..32b111c6053 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-b.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-a.json new file mode 100644 index 00000000000..0221f4d2e81 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-a.json @@ -0,0 +1,24 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestIncentivizedInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulBankSend_Incentivized", + "TestMsgSendTx_FailedBankSend_Incentivized" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-b.json new file mode 100644 index 00000000000..66372a7f44a --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-b.json @@ -0,0 +1,24 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestIncentivizedInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulBankSend_Incentivized", + "TestMsgSendTx_FailedBankSend_Incentivized" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-a.json new file mode 100644 index 00000000000..9e10c3fce02 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-a.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestIncentivizedTransferTestSuite" + ], + "test": [ + "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", + "TestMsgPayPacketFee_InvalidReceiverAccount", + "TestMultiMsg_MsgPayPacketFeeSingleSender", + "TestMsgPayPacketFee_SingleSender_TimesOut", + "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", + "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-b.json new file mode 100644 index 00000000000..b3fb85b3e11 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-b.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestIncentivizedTransferTestSuite" + ], + "test": [ + "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", + "TestMsgPayPacketFee_InvalidReceiverAccount", + "TestMultiMsg_MsgPayPacketFeeSingleSender", + "TestMsgPayPacketFee_SingleSender_TimesOut", + "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", + "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/localhost-ica-chain-a.json new file mode 100644 index 00000000000..c38819cb400 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/localhost-ica-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v9.0.x" + ], + "entrypoint": [ + "LocalhostInterchainAccountsTestSuite" + ], + "test": [ + "TestInterchainAccounts_Localhost", + "TestInterchainAccounts_ReopenChannel_Localhost" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/localhost-transfer-chain-a.json new file mode 100644 index 00000000000..ec935c77ce0 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/localhost-transfer-chain-a.json @@ -0,0 +1,22 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v9.0.x" + ], + "entrypoint": [ + "LocalhostTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Localhost" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-a.json new file mode 100644 index 00000000000..1779cd427ba --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestAuthzTransferTestSuite" + ], + "test": [ + "TestAuthz_MsgTransfer_Succeeds", + "TestAuthz_InvalidTransferAuthorizations" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-b.json new file mode 100644 index 00000000000..5b98eb537f5 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestAuthzTransferTestSuite" + ], + "test": [ + "TestAuthz_MsgTransfer_Succeeds", + "TestAuthz_InvalidTransferAuthorizations" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-a.json new file mode 100644 index 00000000000..3ae998768e4 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-a.json @@ -0,0 +1,32 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "v3.4.0", + "v2.5.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Succeeds_Nonincentivized", + "TestMsgTransfer_Fails_InvalidAddress", + "TestMsgTransfer_Timeout_Nonincentivized", + "TestMsgTransfer_WithMemo", + "TestSendEnabledParam", + "TestReceiveEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json new file mode 100644 index 00000000000..8d1e5d947f8 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "v3.4.0", + "v2.5.0", + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Succeeds_Nonincentivized", + "TestMsgTransfer_Fails_InvalidAddress", + "TestMsgTransfer_Timeout_Nonincentivized", + "TestMsgTransfer_WithMemo" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a copy.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a copy.json new file mode 100644 index 00000000000..32719dab55a --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a copy.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestTransferChannelUpgradesTestSuite" + ], + "test": [ + "TestChannelUpgrade_WithFeeMiddleware_Succeeds", + "TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds", + "TestChannelUpgrade_WithFeeMiddleware_FailsWithTimeoutOnAck" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a.json new file mode 100644 index 00000000000..32719dab55a --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "release-v9.0.x" + ], + "entrypoint": [ + "TestTransferChannelUpgradesTestSuite" + ], + "test": [ + "TestChannelUpgrade_WithFeeMiddleware_Succeeds", + "TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds", + "TestChannelUpgrade_WithFeeMiddleware_FailsWithTimeoutOnAck" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-1-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-1-channel-upgrade-chain-a.json new file mode 100644 index 00000000000..54055b7f6a5 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-1-channel-upgrade-chain-a.json @@ -0,0 +1,18 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TransferChannelUpgradesV1TestSuite" + ], + "test": [ + "TestChannelUpgrade_WithICS20v2_Succeeds", + "TestChannelUpgrade_WithFeeMiddlewareAndICS20v2_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/unreleased/transfer-v2-channel-upgrade.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-2-channel-upgrade-chain-a.json similarity index 69% rename from .github/compatibility-test-matrices/unreleased/transfer-v2-channel-upgrade.json rename to .github/compatibility-test-matrices/release-v9.0.x/transfer-v2-2-channel-upgrade-chain-a.json index 1d13a54e695..6d34120aae7 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-v2-channel-upgrade.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-2-channel-upgrade-chain-a.json @@ -9,8 +9,6 @@ "TestTransferChannelUpgradesTestSuite" ], "test": [ - "TestChannelUpgrade_WithICS20v2_Succeeds", - "TestChannelUpgrade_WithFeeMiddlewareAndICS20v2_Succeeds", "TestChannelDowngrade_WithICS20v1_Succeeds" ], "relayer-type": [ diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-forwarding-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-forwarding-chain-a.json new file mode 100644 index 00000000000..e161d7ae8a1 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-forwarding-chain-a.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TransferForwardingTestSuite" + ], + "test": [ + "TestForwarding_Succeeds", + "TestForwarding_WithLastChainBeingICS20v1_Succeeds", + "TestForwardingWithUnwindSucceeds", + "TestFailedForwarding", + "TestChannelUpgradeForwarding_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json new file mode 100644 index 00000000000..60de14c5609 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json @@ -0,0 +1,18 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Succeeds_Nonincentivized_MultiDenom", + "TestMsgTransfer_Fails_InvalidAddress_MultiDenom" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/unreleased/transfer-v2-1-channel-upgrade.json b/.github/compatibility-test-matrices/unreleased/transfer-v2-1-channel-upgrade.json new file mode 100644 index 00000000000..54055b7f6a5 --- /dev/null +++ b/.github/compatibility-test-matrices/unreleased/transfer-v2-1-channel-upgrade.json @@ -0,0 +1,18 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TransferChannelUpgradesV1TestSuite" + ], + "test": [ + "TestChannelUpgrade_WithICS20v2_Succeeds", + "TestChannelUpgrade_WithFeeMiddlewareAndICS20v2_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/unreleased/transfer-v2-2-channel-upgrade.json b/.github/compatibility-test-matrices/unreleased/transfer-v2-2-channel-upgrade.json new file mode 100644 index 00000000000..6d34120aae7 --- /dev/null +++ b/.github/compatibility-test-matrices/unreleased/transfer-v2-2-channel-upgrade.json @@ -0,0 +1,17 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TestTransferChannelUpgradesTestSuite" + ], + "test": [ + "TestChannelDowngrade_WithICS20v1_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/unreleased/transfer-v2-forwarding.json b/.github/compatibility-test-matrices/unreleased/transfer-v2-forwarding.json new file mode 100644 index 00000000000..575063f63fe --- /dev/null +++ b/.github/compatibility-test-matrices/unreleased/transfer-v2-forwarding.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "release-v9.0.x" + ], + "chain-b": [ + "release-v9.0.x" + ], + "entrypoint": [ + "TransferForwardingTestSuite" + ], + "test": [ + "TestForwarding_Succeeds", + "TestForwarding_WithLastChainBeingICS20v1_Succeeds", + "TestForwardingWithUnwindSucceeds", + "TestFailedForwarding", + "TestChannelUpgradeForwarding_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} diff --git a/.github/compatibility-test-matrices/unreleased/transfer-v2.json b/.github/compatibility-test-matrices/unreleased/transfer-v2-multidenom.json similarity index 100% rename from .github/compatibility-test-matrices/unreleased/transfer-v2.json rename to .github/compatibility-test-matrices/unreleased/transfer-v2-multidenom.json diff --git a/.github/workflows/e2e-compatibility-unreleased.yaml b/.github/workflows/e2e-compatibility-unreleased.yaml index b59a0851892..7a7f3f78090 100644 --- a/.github/workflows/e2e-compatibility-unreleased.yaml +++ b/.github/workflows/e2e-compatibility-unreleased.yaml @@ -20,6 +20,7 @@ jobs: - release/v7.6.x - release/v8.2.x - release/v8.3.x + - release/v9.0.x steps: - uses: actions/checkout@v4 with: @@ -186,6 +187,38 @@ jobs: test-file-directory: "unreleased" test-suite: "transfer-channel-upgrade-chain-b" + transfer-v2-1-channel-upgrade: + needs: + - build-release-images + uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml + with: + test-file-directory: "unreleased" + test-suite: "transfer-v2-1-channel-upgrade" + + transfer-v2-2-channel-upgrade: + needs: + - build-release-images + uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml + with: + test-file-directory: "unreleased" + test-suite: "transfer-v2-2-channel-upgrade" + + transfer-v2-forwarding: + needs: + - build-release-images + uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml + with: + test-file-directory: "unreleased" + test-suite: "transfer-v2-forwarding" + + transfer-v2-multidenom: + needs: + - build-release-images + uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml + with: + test-file-directory: "unreleased" + test-suite: "transfer-v2-multidenom" + ica-channel-upgrade: needs: - build-release-images diff --git a/.github/workflows/e2e-compatibility.yaml b/.github/workflows/e2e-compatibility.yaml index 6f2a5a3a159..f9f382242d2 100644 --- a/.github/workflows/e2e-compatibility.yaml +++ b/.github/workflows/e2e-compatibility.yaml @@ -18,6 +18,7 @@ on: - release/v7.6.x - release/v8.2.x - release/v8.3.x + - release/v9.0.x - main ibc-go-version: description: 'The version of ibc-go that is going to be released' @@ -56,6 +57,7 @@ jobs: - release/v7.6.x - release/v8.2.x - release/v8.3.x + - release/v9.0.x - main steps: - uses: actions/checkout@v4 @@ -118,6 +120,24 @@ jobs: test-file-directory: "${{ needs.determine-test-directory.outputs.test-directory }}" test-suite: "transfer-authz-chain-b" + transfer-v2-forwarding-chain-a: + needs: + - build-release-images + - determine-test-directory + uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml + with: + test-file-directory: "${{ needs.determine-test-directory.outputs.test-directory }}" + test-suite: "transfer-v2-forwarding-chain-a" + + transfer-v2-multidenom-chain-a: + needs: + - build-release-images + - determine-test-directory + uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml + with: + test-file-directory: "${{ needs.determine-test-directory.outputs.test-directory }}" + test-suite: "transfer-v2-multidenom-chain-a" + connection-chain-a: needs: - build-release-images @@ -307,6 +327,24 @@ jobs: test-file-directory: "${{ needs.determine-test-directory.outputs.test-directory }}" test-suite: "transfer-channel-upgrade-chain-b" + transfer-v2-1-channel-upgrade-chain-1: + needs: + - build-release-images + - determine-test-directory + uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml + with: + test-file-directory: "${{ needs.determine-test-directory.outputs.test-directory }}" + test-suite: "transfer-v2-1-channel-upgrade-chain-1" + + transfer-v2-2-channel-upgrade-chain-1: + needs: + - build-release-images + - determine-test-directory + uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml + with: + test-file-directory: "${{ needs.determine-test-directory.outputs.test-directory }}" + test-suite: "transfer-v2-2-channel-upgrade-chain-1" + ica-channel-upgrade-chain-a: needs: - build-release-images @@ -314,7 +352,7 @@ jobs: uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml with: test-file-directory: "${{ needs.determine-test-directory.outputs.test-directory }}" - test-suite: "transfer-channel-upgrade-chain-a" + test-suite: "ica-channel-upgrade-chain-a" ica-channel-upgrade-chain-b: needs: @@ -323,4 +361,4 @@ jobs: uses: ./.github/workflows/e2e-compatibility-workflow-call.yaml with: test-file-directory: "${{ needs.determine-test-directory.outputs.test-directory }}" - test-suite: "transfer-channel-upgrade-chain-b" + test-suite: "ica-channel-upgrade-chain-b" diff --git a/e2e/tests/transfer/upgradesv2_test.go b/e2e/tests/transfer/upgradesv2_test.go index 7b2b53559d8..305706ddf74 100644 --- a/e2e/tests/transfer/upgradesv2_test.go +++ b/e2e/tests/transfer/upgradesv2_test.go @@ -256,101 +256,6 @@ func (s *TransferChannelUpgradesTestSuite) TestChannelUpgrade_WithFeeMiddleware_ }) } -// TestChannelDowngrade_WithICS20v1_Succeeds tests downgrading a transfer channel from ICS20 v2 to ICS20 v1. -func (s *TransferChannelUpgradesTestSuite) TestChannelDowngrade_WithICS20v1_Succeeds() { - t := s.T() - ctx := context.TODO() - - testName := t.Name() - s.SetupChannelUpgradesPath(testName) - - relayer, channelA := s.GetRelayerForTest(testName), s.GetChainAChannelForTest(testName) - - channelB := channelA.Counterparty - chainA, chainB := s.GetChains() - - chainADenom := chainA.Config().Denom - chainBIBCToken := testsuite.GetIBCToken(chainADenom, channelB.PortID, channelB.ChannelID) - - chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) - chainBWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) - chainBAddress := chainBWallet.FormattedAddress() - - s.Require().NoError(test.WaitForBlocks(ctx, 1, chainA, chainB), "failed to wait for blocks") - - var ( - err error - channel channeltypes.Channel - ) - - t.Run("verify transfer version of channel A is ics20-2", func(t *testing.T) { - channel, err = query.Channel(ctx, chainA, channelA.PortID, channelA.ChannelID) - s.Require().NoError(err) - s.Require().Equal(transfertypes.V2, channel.Version, "the channel version is not ics20-2") - }) - - t.Run("start relayer", func(t *testing.T) { - s.StartRelayer(relayer, testName) - }) - - t.Run("execute gov proposal to initiate channel upgrade", func(t *testing.T) { - upgradeFields := channeltypes.NewUpgradeFields(channel.Ordering, channel.ConnectionHops, transfertypes.V1) - s.InitiateChannelUpgrade(ctx, chainA, chainAWallet, channelA.PortID, channelA.ChannelID, upgradeFields) - }) - - s.Require().NoError(test.WaitForBlocks(ctx, 10, chainA, chainB), "failed to wait for blocks") - - t.Run("verify channel A downgraded and transfer version is ics20-1", func(t *testing.T) { - channel, err = query.Channel(ctx, chainA, channelA.PortID, channelA.ChannelID) - s.Require().NoError(err) - s.Require().Equal(transfertypes.V1, channel.Version, "the channel version is not ics20-1") - }) - - t.Run("verify channel B downgraded and transfer version is ics20-1", func(t *testing.T) { - channel, err = query.Channel(ctx, chainB, channelB.PortID, channelB.ChannelID) - s.Require().NoError(err) - s.Require().Equal(transfertypes.V1, channel.Version, "the channel version is not ics20-1") - }) - - t.Run("native IBC token transfer from chainA to chainB, sender is source of tokens", func(t *testing.T) { - chainBWalletAmount := ibc.WalletAmount{ - Address: chainBWallet.FormattedAddress(), // destination address - Denom: chainA.Config().Denom, - Amount: sdkmath.NewInt(testvalues.IBCTransferAmount), - } - - transferTxResp, err := chainA.SendIBCTransfer(ctx, channelA.ChannelID, chainAWallet.KeyName(), chainBWalletAmount, ibc.TransferOptions{}) - s.Require().NoError(err) - s.Require().NoError(transferTxResp.Validate(), "chain-a ibc transfer tx is invalid") - }) - - s.Require().NoError(test.WaitForBlocks(ctx, 5, chainA, chainB), "failed to wait for blocks") - - t.Run("tokens are escrowed", func(t *testing.T) { - actualBalance, err := s.GetChainANativeBalance(ctx, chainAWallet) - s.Require().NoError(err) - - expected := testvalues.StartingTokenAmount - testvalues.IBCTransferAmount - s.Require().Equal(expected, actualBalance) - - actualTotalEscrow, err := query.TotalEscrowForDenom(ctx, chainA, chainADenom) - s.Require().NoError(err) - - expectedTotalEscrow := sdk.NewCoin(chainADenom, sdkmath.NewInt(testvalues.IBCTransferAmount)) - s.Require().Equal(expectedTotalEscrow, actualTotalEscrow) - }) - - t.Run("packets are relayed", func(t *testing.T) { - s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1) - - actualBalance, err := query.Balance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom()) - s.Require().NoError(err) - - expected := testvalues.IBCTransferAmount - s.Require().Equal(expected, actualBalance.Int64()) - }) -} - // TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds tests upgrading a transfer channel to wire up fee middleware under crossing hello func (s *TransferChannelUpgradesTestSuite) TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds() { t := s.T() @@ -506,3 +411,98 @@ func (s *TransferChannelUpgradesTestSuite) TestChannelUpgrade_WithFeeMiddleware_ s.Require().Contains(errorReceipt.Message, "restored channel to pre-upgrade state") }) } + +// TestChannelDowngrade_WithICS20v1_Succeeds tests downgrading a transfer channel from ICS20 v2 to ICS20 v1. +func (s *TransferChannelUpgradesTestSuite) TestChannelDowngrade_WithICS20v1_Succeeds() { + t := s.T() + ctx := context.TODO() + + testName := t.Name() + s.SetupChannelUpgradesPath(testName) + + relayer, channelA := s.GetRelayerForTest(testName), s.GetChainAChannelForTest(testName) + + channelB := channelA.Counterparty + chainA, chainB := s.GetChains() + + chainADenom := chainA.Config().Denom + chainBIBCToken := testsuite.GetIBCToken(chainADenom, channelB.PortID, channelB.ChannelID) + + chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) + chainBWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + chainBAddress := chainBWallet.FormattedAddress() + + s.Require().NoError(test.WaitForBlocks(ctx, 1, chainA, chainB), "failed to wait for blocks") + + var ( + err error + channel channeltypes.Channel + ) + + t.Run("verify transfer version of channel A is ics20-2", func(t *testing.T) { + channel, err = query.Channel(ctx, chainA, channelA.PortID, channelA.ChannelID) + s.Require().NoError(err) + s.Require().Equal(transfertypes.V2, channel.Version, "the channel version is not ics20-2") + }) + + t.Run("start relayer", func(t *testing.T) { + s.StartRelayer(relayer, testName) + }) + + t.Run("execute gov proposal to initiate channel upgrade", func(t *testing.T) { + upgradeFields := channeltypes.NewUpgradeFields(channel.Ordering, channel.ConnectionHops, transfertypes.V1) + s.InitiateChannelUpgrade(ctx, chainA, chainAWallet, channelA.PortID, channelA.ChannelID, upgradeFields) + }) + + s.Require().NoError(test.WaitForBlocks(ctx, 10, chainA, chainB), "failed to wait for blocks") + + t.Run("verify channel A downgraded and transfer version is ics20-1", func(t *testing.T) { + channel, err = query.Channel(ctx, chainA, channelA.PortID, channelA.ChannelID) + s.Require().NoError(err) + s.Require().Equal(transfertypes.V1, channel.Version, "the channel version is not ics20-1") + }) + + t.Run("verify channel B downgraded and transfer version is ics20-1", func(t *testing.T) { + channel, err = query.Channel(ctx, chainB, channelB.PortID, channelB.ChannelID) + s.Require().NoError(err) + s.Require().Equal(transfertypes.V1, channel.Version, "the channel version is not ics20-1") + }) + + t.Run("native IBC token transfer from chainA to chainB, sender is source of tokens", func(t *testing.T) { + chainBWalletAmount := ibc.WalletAmount{ + Address: chainBWallet.FormattedAddress(), // destination address + Denom: chainA.Config().Denom, + Amount: sdkmath.NewInt(testvalues.IBCTransferAmount), + } + + transferTxResp, err := chainA.SendIBCTransfer(ctx, channelA.ChannelID, chainAWallet.KeyName(), chainBWalletAmount, ibc.TransferOptions{}) + s.Require().NoError(err) + s.Require().NoError(transferTxResp.Validate(), "chain-a ibc transfer tx is invalid") + }) + + s.Require().NoError(test.WaitForBlocks(ctx, 5, chainA, chainB), "failed to wait for blocks") + + t.Run("tokens are escrowed", func(t *testing.T) { + actualBalance, err := s.GetChainANativeBalance(ctx, chainAWallet) + s.Require().NoError(err) + + expected := testvalues.StartingTokenAmount - testvalues.IBCTransferAmount + s.Require().Equal(expected, actualBalance) + + actualTotalEscrow, err := query.TotalEscrowForDenom(ctx, chainA, chainADenom) + s.Require().NoError(err) + + expectedTotalEscrow := sdk.NewCoin(chainADenom, sdkmath.NewInt(testvalues.IBCTransferAmount)) + s.Require().Equal(expectedTotalEscrow, actualTotalEscrow) + }) + + t.Run("packets are relayed", func(t *testing.T) { + s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1) + + actualBalance, err := query.Balance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom()) + s.Require().NoError(err) + + expected := testvalues.IBCTransferAmount + s.Require().Equal(expected, actualBalance.Int64()) + }) +} From 4c4356a7646b9945de9e4199260857e644de0248 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Sat, 20 Jul 2024 22:12:13 +0200 Subject: [PATCH 10/78] e2e: remove client update proposal test from v9.0.x compatibility --- .../release-v9.0.x/client-chain-a.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/compatibility-test-matrices/release-v9.0.x/client-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/client-chain-a.json index 8cb1a47d514..3d017530294 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/client-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/client-chain-a.json @@ -9,7 +9,6 @@ "TestClientTestSuite" ], "test": [ - "TestClientUpdateProposal_Succeeds", "TestRecoverClient_Succeeds", "TestScheduleIBCUpgrade_Succeeds", "TestClient_Update_Misbehaviour", From 214f6d8d8b0b81ff98f73a437801c5c1d120cbe2 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Sun, 21 Jul 2024 23:00:19 +0200 Subject: [PATCH 11/78] fix comment --- modules/apps/transfer/keeper/relay_forwarding_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/apps/transfer/keeper/relay_forwarding_test.go b/modules/apps/transfer/keeper/relay_forwarding_test.go index b037d14033a..9ba70cbe8db 100644 --- a/modules/apps/transfer/keeper/relay_forwarding_test.go +++ b/modules/apps/transfer/keeper/relay_forwarding_test.go @@ -466,9 +466,8 @@ func (suite *ForwardingTestSuite) TestSuccessfulUnwind() { chain A (channel 0) -> (channel-0) chain B (channel-1) -> (channel-0) chain C stake transfer/channel-0/stake transfer/channel-0/transfer/channel-0/stake We want to trigger: - 1. Send vouchers from C to B. - 2. Receive on B. - 2.1 B sends B over channel-0 + 1. Set up the initial state as tokens would have been sent from A -> B -> C. + 2. Send vouchers from C back to A through B. 3. Receive on A. At this point we want to assert: - escrow on B and C is zero From f738c22f57033e1a51a27cf88eb5c1777a719458 Mon Sep 17 00:00:00 2001 From: yingshanghuangqiao Date: Mon, 22 Jul 2024 17:30:25 +0900 Subject: [PATCH 12/78] chore: fix some comments (#6909) Signed-off-by: yingshanghuangqiao --- modules/core/02-client/migrations/v7/store.go | 2 +- modules/core/03-connection/keeper/keeper_test.go | 2 +- modules/core/03-connection/keeper/verify_test.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/core/02-client/migrations/v7/store.go b/modules/core/02-client/migrations/v7/store.go index 384bdb1c883..a75de44cbed 100644 --- a/modules/core/02-client/migrations/v7/store.go +++ b/modules/core/02-client/migrations/v7/store.go @@ -80,7 +80,7 @@ func handleSolomachineMigration(ctx sdk.Context, store storetypes.KVStore, cdc c return nil } -// handlerTendermintMigration asserts that the tendermint client in state can be decoded properly. +// handleTendermintMigration asserts that the tendermint client in state can be decoded properly. // This ensures the upgrading chain properly registered the tendermint client types on the chain codec. func handleTendermintMigration(ctx sdk.Context, store storetypes.KVStore, clientKeeper ClientKeeper) error { clients, err := collectClients(ctx, store, exported.Tendermint) diff --git a/modules/core/03-connection/keeper/keeper_test.go b/modules/core/03-connection/keeper/keeper_test.go index 7348266c8e9..ecdcdd3ab59 100644 --- a/modules/core/03-connection/keeper/keeper_test.go +++ b/modules/core/03-connection/keeper/keeper_test.go @@ -136,7 +136,7 @@ func (suite *KeeperTestSuite) TestDefaultSetParams() { suite.Require().Equal(expParams, params) } -// TestParams tests that param setting and retrieval works properly +// TestSetAndGetParams tests that param setting and retrieval works properly func (suite *KeeperTestSuite) TestSetAndGetParams() { testCases := []struct { name string diff --git a/modules/core/03-connection/keeper/verify_test.go b/modules/core/03-connection/keeper/verify_test.go index 00fb18c7335..c3e2e02a2de 100644 --- a/modules/core/03-connection/keeper/verify_test.go +++ b/modules/core/03-connection/keeper/verify_test.go @@ -275,7 +275,7 @@ func (suite *KeeperTestSuite) TestVerifyChannelState() { } } -// TestVerifyPacketCommitmentState has chainB verify the packet commitment +// TestVerifyPacketCommitment has chainB verify the packet commitment // on channelA. The channels on chainA and chainB are fully opened and a // packet is sent from chainA to chainB, but has not been received. func (suite *KeeperTestSuite) TestVerifyPacketCommitment() { From a6fd4d73cefdc62be2f8bc6292dde1a533448ae6 Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Mon, 22 Jul 2024 14:06:02 +0300 Subject: [PATCH 13/78] chore(06-solomachine, 07-tendermint): make client state methods moved to lcm private (#6891) * chore(06-solomachine, 07-tendermint)make client state methods moved to lcm private. * docs: add changelog, add to migration doc. * Update CHANGELOG.md * Update docs/docs/05-migrations/13-v8-to-v9.md --- CHANGELOG.md | 1 + docs/docs/05-migrations/13-v8-to-v9.md | 4 ++-- modules/core/02-client/keeper/client_test.go | 7 +++---- modules/core/keeper/msg_server_test.go | 8 +++---- .../06-solomachine/client_state.go | 17 ++++----------- .../06-solomachine/light_client_module.go | 8 +++---- .../07-tendermint/client_state.go | 21 +++++++++---------- .../07-tendermint/light_client_module.go | 20 +++++++++--------- .../07-tendermint/light_client_module_test.go | 7 +++---- .../07-tendermint/proposal_handle.go | 2 +- 10 files changed, 42 insertions(+), 53 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c9a8d3aec0..016eb0a9acb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -66,6 +66,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (core/02-client) [\#6777](https://github.com/cosmos/ibc-go/pull/6777) The `NewClientProposalHandler` of `02-client` has been removed. * (core/types) [\#6794](https://github.com/cosmos/ibc-go/pull/6794) The composite interface `QueryServer` has been removed from package `core/types`. Please use the granular `QueryServer` interfaces provided by each core submodule. * (light-clients/06-solomachine) [\#6888](https://github.com/cosmos/ibc-go/pull/6888) Remove `TypeClientMisbehaviour` constant and the `Type` method on `Misbehaviour`. +* (light-clients/06-solomachine, light-clients/07-tendermint) [\#6891](https://github.com/cosmos/ibc-go/pull/6891) The `VerifyMembership` and `VerifyNonMembership` functions of solomachine's `ClientState` have been made private. The `VerifyMembership`, `VerifyNonMembership`, `GetTimestampAtHeight`, `Status` and `Initialize` functions of tendermint's `ClientState` have been made private. ### State Machine Breaking diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 53c5807d88f..ff42acaf175 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -204,12 +204,12 @@ Please check also the [Light client developer guide](../03-light-clients/01-deve ### 06-solomachine -- The `Initialize`, `Status`, `GetTimestampAtHeight` and `UpdateStateOnMisbehaviour` functions in `ClientState` have been removed and all their logic has been moved to functions of the `LightClientModule`. +- The `Initialize`, `Status`, `GetTimestampAtHeight` and `UpdateStateOnMisbehaviour` functions in `ClientState` have been removed and all their logic has been moved to functions of the `LightClientModule`. The `VerifyMembership` and `VerifyNonMembership` functions have been made private. - The `Type` method on `Misbehaviour` has been removed. ### 07-tendermint -The `IterateConsensusMetadata` function has been removed. +The `IterateConsensusMetadata` function has been removed. The `VerifyMembership`, `VerifyNonMembership`, `GetTimestampAtHeight`, `Status` and `Initialize` functions have been made private. ### 08-wasm diff --git a/modules/core/02-client/keeper/client_test.go b/modules/core/02-client/keeper/client_test.go index 92ed3b40a3c..9d550eb6f60 100644 --- a/modules/core/02-client/keeper/client_test.go +++ b/modules/core/02-client/keeper/client_test.go @@ -682,10 +682,9 @@ func (suite *KeeperTestSuite) TestRecoverClient() { ibctesting.AssertEvents(&suite.Suite, expectedEvents, ctx.EventManager().Events().ToABCIEvents()) // Assert that client status is now Active - clientStore := suite.chainA.App.GetIBCKeeper().ClientKeeper.ClientStore(suite.chainA.GetContext(), subjectPath.EndpointA.ClientID) - tmClientState, ok := subjectPath.EndpointA.GetClientState().(*ibctm.ClientState) - suite.Require().True(ok) - suite.Require().Equal(tmClientState.Status(suite.chainA.GetContext(), clientStore, suite.chainA.App.AppCodec()), exported.Active) + lightClientModule, err := suite.chainA.App.GetIBCKeeper().ClientKeeper.Route(suite.chainA.GetContext(), subjectPath.EndpointA.ClientID) + suite.Require().NoError(err) + suite.Require().Equal(lightClientModule.Status(suite.chainA.GetContext(), subjectPath.EndpointA.ClientID), exported.Active) } else { suite.Require().Error(err) diff --git a/modules/core/keeper/msg_server_test.go b/modules/core/keeper/msg_server_test.go index b75736b9c55..68d354786d7 100644 --- a/modules/core/keeper/msg_server_test.go +++ b/modules/core/keeper/msg_server_test.go @@ -287,10 +287,10 @@ func (suite *KeeperTestSuite) TestRecoverClient() { suite.Require().NoError(err) // Assert that client status is now Active - clientStore := suite.chainA.App.GetIBCKeeper().ClientKeeper.ClientStore(suite.chainA.GetContext(), subjectPath.EndpointA.ClientID) - tmClientState, ok := subjectPath.EndpointA.GetClientState().(*ibctm.ClientState) - suite.Require().True(ok) - suite.Require().Equal(tmClientState.Status(suite.chainA.GetContext(), clientStore, suite.chainA.App.AppCodec()), exported.Active) + + lightClientModule, err := suite.chainA.App.GetIBCKeeper().ClientKeeper.Route(suite.chainA.GetContext(), subjectPath.EndpointA.ClientID) + suite.Require().NoError(err) + suite.Require().Equal(lightClientModule.Status(suite.chainA.GetContext(), subjectPath.EndpointA.ClientID), exported.Active) } else { suite.Require().Error(err) suite.Require().ErrorIs(err, tc.expErr) diff --git a/modules/light-clients/06-solomachine/client_state.go b/modules/light-clients/06-solomachine/client_state.go index 68f099d233c..4c92e976192 100644 --- a/modules/light-clients/06-solomachine/client_state.go +++ b/modules/light-clients/06-solomachine/client_state.go @@ -6,7 +6,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/tx/signing" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" @@ -43,15 +42,11 @@ func (cs ClientState) Validate() error { return cs.ConsensusState.ValidateBasic() } -// VerifyMembership is a generic proof verification method which verifies a proof of the existence of a value at a given CommitmentPath at the latest sequence. +// verifyMembership is a generic proof verification method which verifies a proof of the existence of a value at a given CommitmentPath at the latest sequence. // The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). -func (cs *ClientState) VerifyMembership( - ctx sdk.Context, +func (cs *ClientState) verifyMembership( clientStore storetypes.KVStore, cdc codec.BinaryCodec, - _ exported.Height, - delayTimePeriod uint64, - delayBlockPeriod uint64, proof []byte, path exported.Path, value []byte, @@ -100,15 +95,11 @@ func (cs *ClientState) VerifyMembership( return nil } -// VerifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath at the latest sequence. +// verifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath at the latest sequence. // The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). -func (cs *ClientState) VerifyNonMembership( - ctx sdk.Context, +func (cs *ClientState) verifyNonMembership( clientStore storetypes.KVStore, cdc codec.BinaryCodec, - _ exported.Height, - delayTimePeriod uint64, - delayBlockPeriod uint64, proof []byte, path exported.Path, ) error { diff --git a/modules/light-clients/06-solomachine/light_client_module.go b/modules/light-clients/06-solomachine/light_client_module.go index e7851b6b1d8..6d8dd2201bc 100644 --- a/modules/light-clients/06-solomachine/light_client_module.go +++ b/modules/light-clients/06-solomachine/light_client_module.go @@ -118,7 +118,7 @@ func (l LightClientModule) UpdateState(ctx sdk.Context, clientID string, clientM return clientState.UpdateState(ctx, l.cdc, clientStore, clientMsg) } -// VerifyMembership obtains the client state associated with the client identifier and calls into the clientState.VerifyMembership method. +// VerifyMembership obtains the client state associated with the client identifier and calls into the clientState.verifyMembership method. // // CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) VerifyMembership( @@ -137,10 +137,10 @@ func (l LightClientModule) VerifyMembership( return errorsmod.Wrap(clienttypes.ErrClientNotFound, clientID) } - return clientState.VerifyMembership(ctx, clientStore, l.cdc, height, delayTimePeriod, delayBlockPeriod, proof, path, value) + return clientState.verifyMembership(clientStore, l.cdc, proof, path, value) } -// VerifyNonMembership obtains the client state associated with the client identifier and calls into the clientState.VerifyNonMembership method. +// VerifyNonMembership obtains the client state associated with the client identifier and calls into the clientState.verifyNonMembership method. // // CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) VerifyNonMembership( @@ -158,7 +158,7 @@ func (l LightClientModule) VerifyNonMembership( return errorsmod.Wrap(clienttypes.ErrClientNotFound, clientID) } - return clientState.VerifyNonMembership(ctx, clientStore, l.cdc, height, delayTimePeriod, delayBlockPeriod, proof, path) + return clientState.verifyNonMembership(clientStore, l.cdc, proof, path) } // Status returns the status of the solo machine client. diff --git a/modules/light-clients/07-tendermint/client_state.go b/modules/light-clients/07-tendermint/client_state.go index 83add3fb0f4..2e5becea74f 100644 --- a/modules/light-clients/07-tendermint/client_state.go +++ b/modules/light-clients/07-tendermint/client_state.go @@ -54,9 +54,8 @@ func (ClientState) ClientType() string { return exported.Tendermint } -// GetTimestampAtHeight returns the timestamp in nanoseconds of the consensus state at the given height. -func (ClientState) GetTimestampAtHeight( - ctx sdk.Context, +// getTimestampAtHeight returns the timestamp in nanoseconds of the consensus state at the given height. +func (ClientState) getTimestampAtHeight( clientStore storetypes.KVStore, cdc codec.BinaryCodec, height exported.Height, @@ -69,7 +68,7 @@ func (ClientState) GetTimestampAtHeight( return consState.GetTimestamp(), nil } -// Status returns the status of the tendermint client. +// status returns the status of the tendermint client. // The client may be: // - Active: FrozenHeight is zero and client is not expired // - Frozen: Frozen Height is not zero @@ -77,7 +76,7 @@ func (ClientState) GetTimestampAtHeight( // // A frozen client will become expired, so the Frozen status // has higher precedence. -func (cs ClientState) Status( +func (cs ClientState) status( ctx sdk.Context, clientStore storetypes.KVStore, cdc codec.BinaryCodec, @@ -185,9 +184,9 @@ func (cs ClientState) ZeroCustomFields() *ClientState { } } -// Initialize checks that the initial consensus state is an 07-tendermint consensus state and +// initialize checks that the initial consensus state is an 07-tendermint consensus state and // sets the client state, consensus state and associated metadata in the provided client store. -func (cs ClientState) Initialize(ctx sdk.Context, cdc codec.BinaryCodec, clientStore storetypes.KVStore, consState exported.ConsensusState) error { +func (cs ClientState) initialize(ctx sdk.Context, cdc codec.BinaryCodec, clientStore storetypes.KVStore, consState exported.ConsensusState) error { consensusState, ok := consState.(*ConsensusState) if !ok { return errorsmod.Wrapf(clienttypes.ErrInvalidConsensus, "invalid initial consensus state. expected type: %T, got: %T", @@ -201,10 +200,10 @@ func (cs ClientState) Initialize(ctx sdk.Context, cdc codec.BinaryCodec, clientS return nil } -// VerifyMembership is a generic proof verification method which verifies a proof of the existence of a value at a given CommitmentPath at the specified height. +// verifyMembership is a generic proof verification method which verifies a proof of the existence of a value at a given CommitmentPath at the specified height. // The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). // If a zero proof height is passed in, it will fail to retrieve the associated consensus state. -func (cs ClientState) VerifyMembership( +func (cs ClientState) verifyMembership( ctx sdk.Context, clientStore storetypes.KVStore, cdc codec.BinaryCodec, @@ -244,10 +243,10 @@ func (cs ClientState) VerifyMembership( return merkleProof.VerifyMembership(cs.ProofSpecs, consensusState.GetRoot(), merklePath, value) } -// VerifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath at a specified height. +// verifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath at a specified height. // The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). // If a zero proof height is passed in, it will fail to retrieve the associated consensus state. -func (cs ClientState) VerifyNonMembership( +func (cs ClientState) verifyNonMembership( ctx sdk.Context, clientStore storetypes.KVStore, cdc codec.BinaryCodec, diff --git a/modules/light-clients/07-tendermint/light_client_module.go b/modules/light-clients/07-tendermint/light_client_module.go index 7d772dbe292..33fd57b0e44 100644 --- a/modules/light-clients/07-tendermint/light_client_module.go +++ b/modules/light-clients/07-tendermint/light_client_module.go @@ -30,7 +30,7 @@ func NewLightClientModule(cdc codec.BinaryCodec, storeProvider clienttypes.Store } // Initialize unmarshals the provided client and consensus states and performs basic validation. It calls into the -// clientState.Initialize method. +// clientState.initialize method. // // CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) Initialize(ctx sdk.Context, clientID string, clientStateBz, consensusStateBz []byte) error { @@ -54,7 +54,7 @@ func (l LightClientModule) Initialize(ctx sdk.Context, clientID string, clientSt clientStore := l.storeProvider.ClientStore(ctx, clientID) - return clientState.Initialize(ctx, l.cdc, clientStore, &consensusState) + return clientState.initialize(ctx, l.cdc, clientStore, &consensusState) } // VerifyClientMessage obtains the client state associated with the client identifier and calls into the clientState.VerifyClientMessage method. @@ -109,7 +109,7 @@ func (l LightClientModule) UpdateState(ctx sdk.Context, clientID string, clientM return clientState.UpdateState(ctx, l.cdc, clientStore, clientMsg) } -// VerifyMembership obtains the client state associated with the client identifier and calls into the clientState.VerifyMembership method. +// VerifyMembership obtains the client state associated with the client identifier and calls into the clientState.verifyMembership method. // // CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) VerifyMembership( @@ -128,10 +128,10 @@ func (l LightClientModule) VerifyMembership( return errorsmod.Wrap(clienttypes.ErrClientNotFound, clientID) } - return clientState.VerifyMembership(ctx, clientStore, l.cdc, height, delayTimePeriod, delayBlockPeriod, proof, path, value) + return clientState.verifyMembership(ctx, clientStore, l.cdc, height, delayTimePeriod, delayBlockPeriod, proof, path, value) } -// VerifyNonMembership obtains the client state associated with the client identifier and calls into the clientState.VerifyNonMembership method. +// VerifyNonMembership obtains the client state associated with the client identifier and calls into the clientState.verifyNonMembership method. // // CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) VerifyNonMembership( @@ -149,10 +149,10 @@ func (l LightClientModule) VerifyNonMembership( return errorsmod.Wrap(clienttypes.ErrClientNotFound, clientID) } - return clientState.VerifyNonMembership(ctx, clientStore, l.cdc, height, delayTimePeriod, delayBlockPeriod, proof, path) + return clientState.verifyNonMembership(ctx, clientStore, l.cdc, height, delayTimePeriod, delayBlockPeriod, proof, path) } -// Status obtains the client state associated with the client identifier and calls into the clientState.Status method. +// Status obtains the client state associated with the client identifier and calls into the clientState.status method. // // CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) Status(ctx sdk.Context, clientID string) exported.Status { @@ -162,7 +162,7 @@ func (l LightClientModule) Status(ctx sdk.Context, clientID string) exported.Sta return exported.Unknown } - return clientState.Status(ctx, clientStore, l.cdc) + return clientState.status(ctx, clientStore, l.cdc) } // LatestHeight returns the latest height for the client state for the given client identifier. @@ -179,7 +179,7 @@ func (l LightClientModule) LatestHeight(ctx sdk.Context, clientID string) export return clientState.LatestHeight } -// TimestampAtHeight obtains the client state associated with the client identifier and calls into the clientState.GetTimestampAtHeight method. +// TimestampAtHeight obtains the client state associated with the client identifier and calls into the clientState.getTimestampAtHeight method. // // CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) TimestampAtHeight( @@ -193,7 +193,7 @@ func (l LightClientModule) TimestampAtHeight( return 0, errorsmod.Wrap(clienttypes.ErrClientNotFound, clientID) } - return clientState.GetTimestampAtHeight(ctx, clientStore, l.cdc, height) + return clientState.getTimestampAtHeight(clientStore, l.cdc, height) } // RecoverClient asserts that the substitute client is a tendermint client. It obtains the client state associated with the diff --git a/modules/light-clients/07-tendermint/light_client_module_test.go b/modules/light-clients/07-tendermint/light_client_module_test.go index 58d5ccd1b9d..87119309949 100644 --- a/modules/light-clients/07-tendermint/light_client_module_test.go +++ b/modules/light-clients/07-tendermint/light_client_module_test.go @@ -1026,10 +1026,9 @@ func (suite *TendermintTestSuite) TestRecoverClient() { suite.Require().NoError(err) // assert that status of subject client is now Active - clientStore := suite.chainA.App.GetIBCKeeper().ClientKeeper.ClientStore(ctx, subjectClientID) - tmClientState, ok := subjectPath.EndpointA.GetClientState().(*ibctm.ClientState) - suite.Require().True(ok) - suite.Require().Equal(exported.Active, tmClientState.Status(ctx, clientStore, suite.chainA.App.AppCodec())) + lightClientModule, err := suite.chainA.App.GetIBCKeeper().ClientKeeper.Route(suite.chainA.GetContext(), subjectClientID) + suite.Require().NoError(err) + suite.Require().Equal(lightClientModule.Status(suite.chainA.GetContext(), subjectClientID), exported.Active) } else { suite.Require().Error(err) suite.Require().ErrorIs(err, tc.expErr) diff --git a/modules/light-clients/07-tendermint/proposal_handle.go b/modules/light-clients/07-tendermint/proposal_handle.go index cae0efc842a..60f8ea4ac8b 100644 --- a/modules/light-clients/07-tendermint/proposal_handle.go +++ b/modules/light-clients/07-tendermint/proposal_handle.go @@ -39,7 +39,7 @@ func (cs ClientState) CheckSubstituteAndUpdateState( return errorsmod.Wrap(clienttypes.ErrInvalidSubstitute, "subject client state does not match substitute client state") } - if cs.Status(ctx, subjectClientStore, cdc) == exported.Frozen { + if cs.status(ctx, subjectClientStore, cdc) == exported.Frozen { // unfreeze the client cs.FrozenHeight = clienttypes.ZeroHeight() } From bb9d12c857e2c335546ca3a9b45b3fcddbdbef1f Mon Sep 17 00:00:00 2001 From: Gjermund Garaba Date: Mon, 22 Jul 2024 14:09:16 +0200 Subject: [PATCH 14/78] chore: make UnmarshalPacketData public (#6897) --- modules/apps/transfer/ibc_module.go | 3 +- modules/apps/transfer/internal/packet.go | 67 ----- modules/apps/transfer/internal/packet_test.go | 250 ------------------ modules/apps/transfer/types/packet.go | 55 ++++ modules/apps/transfer/types/packet_test.go | 235 ++++++++++++++++ 5 files changed, 291 insertions(+), 319 deletions(-) delete mode 100644 modules/apps/transfer/internal/packet.go delete mode 100644 modules/apps/transfer/internal/packet_test.go diff --git a/modules/apps/transfer/ibc_module.go b/modules/apps/transfer/ibc_module.go index b022cae66cb..d588128943c 100644 --- a/modules/apps/transfer/ibc_module.go +++ b/modules/apps/transfer/ibc_module.go @@ -11,7 +11,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - "github.com/cosmos/ibc-go/v9/modules/apps/transfer/internal" "github.com/cosmos/ibc-go/v9/modules/apps/transfer/internal/events" "github.com/cosmos/ibc-go/v9/modules/apps/transfer/keeper" "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" @@ -322,5 +321,5 @@ func (im IBCModule) getICS20PacketData(ctx sdk.Context, packetData []byte, portI return types.FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrNotFound, "app version not found for port %s and channel %s", portID, channelID) } - return internal.UnmarshalPacketData(packetData, ics20Version) + return types.UnmarshalPacketData(packetData, ics20Version) } diff --git a/modules/apps/transfer/internal/packet.go b/modules/apps/transfer/internal/packet.go deleted file mode 100644 index f74cc57b27a..00000000000 --- a/modules/apps/transfer/internal/packet.go +++ /dev/null @@ -1,67 +0,0 @@ -package internal - -import ( - "encoding/json" - - "github.com/cosmos/gogoproto/proto" - - errorsmod "cosmossdk.io/errors" - - "github.com/cosmos/cosmos-sdk/codec/unknownproto" - - "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" - ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" -) - -// UnmarshalPacketData attempts to unmarshal the provided packet data bytes into a FungibleTokenPacketDataV2. -// The version of ics20 should be provided and should be either ics20-1 or ics20-2. -func UnmarshalPacketData(bz []byte, ics20Version string) (types.FungibleTokenPacketDataV2, error) { - switch ics20Version { - case types.V1: - var datav1 types.FungibleTokenPacketData - if err := json.Unmarshal(bz, &datav1); err != nil { - return types.FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS20-V1 transfer packet data: %s", err.Error()) - } - - return packetDataV1ToV2(datav1) - case types.V2: - var datav2 types.FungibleTokenPacketDataV2 - if err := unknownproto.RejectUnknownFieldsStrict(bz, &datav2, unknownproto.DefaultAnyResolver{}); err != nil { - return types.FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS20-V2 transfer packet data: %s", err.Error()) - } - - if err := proto.Unmarshal(bz, &datav2); err != nil { - return types.FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS20-V2 transfer packet data: %s", err.Error()) - } - - if err := datav2.ValidateBasic(); err != nil { - return types.FungibleTokenPacketDataV2{}, err - } - - return datav2, nil - default: - return types.FungibleTokenPacketDataV2{}, errorsmod.Wrap(types.ErrInvalidVersion, ics20Version) - } -} - -// packetDataV1ToV2 converts a v1 packet data to a v2 packet data. The packet data is validated -// before conversion. -func packetDataV1ToV2(packetData types.FungibleTokenPacketData) (types.FungibleTokenPacketDataV2, error) { - if err := packetData.ValidateBasic(); err != nil { - return types.FungibleTokenPacketDataV2{}, errorsmod.Wrapf(err, "invalid packet data") - } - - denom := types.ExtractDenomFromPath(packetData.Denom) - return types.FungibleTokenPacketDataV2{ - Tokens: []types.Token{ - { - Denom: denom, - Amount: packetData.Amount, - }, - }, - Sender: packetData.Sender, - Receiver: packetData.Receiver, - Memo: packetData.Memo, - Forwarding: types.ForwardingPacketData{}, - }, nil -} diff --git a/modules/apps/transfer/internal/packet_test.go b/modules/apps/transfer/internal/packet_test.go deleted file mode 100644 index da545fb4133..00000000000 --- a/modules/apps/transfer/internal/packet_test.go +++ /dev/null @@ -1,250 +0,0 @@ -package internal - -import ( - "testing" - - "github.com/stretchr/testify/require" - - errorsmod "cosmossdk.io/errors" - - "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" - ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" -) - -const ( - sender = "sender" - receiver = "receiver" -) - -func TestUnmarshalPacketData(t *testing.T) { - var ( - packetDataBz []byte - version string - ) - - testCases := []struct { - name string - malleate func() - expError error - }{ - { - "success: v1 -> v2", - func() {}, - nil, - }, - { - "success: v2", - func() { - packetData := types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom", types.NewHop("transfer", "channel-0")), - Amount: "1000", - }, - }, sender, receiver, "", types.ForwardingPacketData{}) - - packetDataBz = packetData.GetBytes() - version = types.V2 - }, - nil, - }, - { - "invalid version", - func() { - version = "ics20-100" - }, - types.ErrInvalidVersion, - }, - } - - for _, tc := range testCases { - - packetDataV1 := types.NewFungibleTokenPacketData("transfer/channel-0/atom", "1000", sender, receiver, "") - - packetDataBz = packetDataV1.GetBytes() - version = types.V1 - - tc.malleate() - - packetData, err := UnmarshalPacketData(packetDataBz, version) - - expPass := tc.expError == nil - if expPass { - require.IsType(t, types.FungibleTokenPacketDataV2{}, packetData) - } else { - require.ErrorIs(t, err, tc.expError) - } - } -} - -// TestV2ForwardsCompatibilityFails asserts that new fields being added to a future proto definition of -// FungibleTokenPacketDataV2 fail to unmarshal with previous versions. In essence, permit backwards compatibility -// but restrict forward one. -func TestV2ForwardsCompatibilityFails(t *testing.T) { - var ( - packet types.FungibleTokenPacketDataV2 - packetDataBz []byte - ) - - testCases := []struct { - name string - malleate func() - expError error - }{ - { - "success", - func() {}, - nil, - }, - { - "failure: new field present in packet data", - func() { - // packet data containing extra field unknown to current proto file. - packetDataBz = append(packet.GetBytes(), []byte("22\tnew_value")...) - }, - ibcerrors.ErrInvalidType, - }, - } - - for _, tc := range testCases { - packet = types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom", types.NewHop("transfer", "channel-0")), - Amount: "1000", - }, - }, "sender", "receiver", "", types.ForwardingPacketData{}, - ) - - packetDataBz = packet.GetBytes() - - tc.malleate() - - packetData, err := UnmarshalPacketData(packetDataBz, types.V2) - - expPass := tc.expError == nil - if expPass { - require.NoError(t, err) - require.NotEqual(t, types.FungibleTokenPacketDataV2{}, packetData) - } else { - require.ErrorIs(t, err, tc.expError) - } - } -} - -func TestPacketV1ToPacketV2(t *testing.T) { - const ( - sender = "sender" - receiver = "receiver" - ) - - testCases := []struct { - name string - v1Data types.FungibleTokenPacketData - v2Data types.FungibleTokenPacketDataV2 - expError error - }{ - { - "success", - types.NewFungibleTokenPacketData("transfer/channel-0/atom", "1000", sender, receiver, ""), - types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom", types.NewHop("transfer", "channel-0")), - Amount: "1000", - }, - }, sender, receiver, "", types.ForwardingPacketData{}), - nil, - }, - { - "success with empty trace", - types.NewFungibleTokenPacketData("atom", "1000", sender, receiver, ""), - types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom"), - Amount: "1000", - }, - }, sender, receiver, "", types.ForwardingPacketData{}), - nil, - }, - { - "success: base denom with '/'", - types.NewFungibleTokenPacketData("transfer/channel-0/atom/withslash", "1000", sender, receiver, ""), - types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom/withslash", types.NewHop("transfer", "channel-0")), - Amount: "1000", - }, - }, sender, receiver, "", types.ForwardingPacketData{}), - nil, - }, - { - "success: base denom with '/' at the end", - types.NewFungibleTokenPacketData("transfer/channel-0/atom/", "1000", sender, receiver, ""), - types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom/", types.NewHop("transfer", "channel-0")), - Amount: "1000", - }, - }, sender, receiver, "", types.ForwardingPacketData{}), - nil, - }, - { - "success: longer trace base denom with '/'", - types.NewFungibleTokenPacketData("transfer/channel-0/transfer/channel-1/atom/pool", "1000", sender, receiver, ""), - types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom/pool", types.NewHop("transfer", "channel-0"), types.NewHop("transfer", "channel-1")), - Amount: "1000", - }, - }, sender, receiver, "", types.ForwardingPacketData{}), - nil, - }, - { - "success: longer trace with non transfer port", - types.NewFungibleTokenPacketData("transfer/channel-0/transfer/channel-1/transfer-custom/channel-2/atom", "1000", sender, receiver, ""), - types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom", types.NewHop("transfer", "channel-0"), types.NewHop("transfer", "channel-1"), types.NewHop("transfer-custom", "channel-2")), - Amount: "1000", - }, - }, sender, receiver, "", types.ForwardingPacketData{}), - nil, - }, - { - "success: base denom with slash, trace with non transfer port", - types.NewFungibleTokenPacketData("transfer/channel-0/transfer/channel-1/transfer-custom/channel-2/atom/pool", "1000", sender, receiver, ""), - types.NewFungibleTokenPacketDataV2( - []types.Token{ - { - Denom: types.NewDenom("atom/pool", types.NewHop("transfer", "channel-0"), types.NewHop("transfer", "channel-1"), types.NewHop("transfer-custom", "channel-2")), - Amount: "1000", - }, - }, sender, receiver, "", types.ForwardingPacketData{}), - nil, - }, - { - "failure: packet data fails validation with empty denom", - types.NewFungibleTokenPacketData("", "1000", sender, receiver, ""), - types.FungibleTokenPacketDataV2{}, - errorsmod.Wrap(types.ErrInvalidDenomForTransfer, "base denomination cannot be blank"), - }, - } - - for _, tc := range testCases { - actualV2Data, err := packetDataV1ToV2(tc.v1Data) - - expPass := tc.expError == nil - if expPass { - require.NoError(t, err, "test case: %s", tc.name) - require.Equal(t, tc.v2Data, actualV2Data, "test case: %s", tc.name) - } else { - require.Error(t, err, "test case: %s", tc.name) - } - } -} diff --git a/modules/apps/transfer/types/packet.go b/modules/apps/transfer/types/packet.go index fcd66dfd3cc..209c721d75b 100644 --- a/modules/apps/transfer/types/packet.go +++ b/modules/apps/transfer/types/packet.go @@ -10,6 +10,8 @@ import ( errorsmod "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/codec/unknownproto" + ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" ibcexported "github.com/cosmos/ibc-go/v9/modules/core/exported" ) @@ -204,3 +206,56 @@ func (ftpd FungibleTokenPacketDataV2) GetPacketSender(sourcePortID string) strin func (ftpd FungibleTokenPacketDataV2) HasForwarding() bool { return len(ftpd.Forwarding.Hops) > 0 } + +// UnmarshalPacketData attempts to unmarshal the provided packet data bytes into a FungibleTokenPacketDataV2. +// The version of ics20 should be provided and should be either ics20-1 or ics20-2. +func UnmarshalPacketData(bz []byte, ics20Version string) (FungibleTokenPacketDataV2, error) { + switch ics20Version { + case V1: + var datav1 FungibleTokenPacketData + if err := json.Unmarshal(bz, &datav1); err != nil { + return FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS20-V1 transfer packet data: %s", err.Error()) + } + + return PacketDataV1ToV2(datav1) + case V2: + var datav2 FungibleTokenPacketDataV2 + if err := unknownproto.RejectUnknownFieldsStrict(bz, &datav2, unknownproto.DefaultAnyResolver{}); err != nil { + return FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS20-V2 transfer packet data: %s", err.Error()) + } + + if err := proto.Unmarshal(bz, &datav2); err != nil { + return FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS20-V2 transfer packet data: %s", err.Error()) + } + + if err := datav2.ValidateBasic(); err != nil { + return FungibleTokenPacketDataV2{}, err + } + + return datav2, nil + default: + return FungibleTokenPacketDataV2{}, errorsmod.Wrap(ErrInvalidVersion, ics20Version) + } +} + +// PacketDataV1ToV2 converts a v1 packet data to a v2 packet data. The packet data is validated +// before conversion. +func PacketDataV1ToV2(packetData FungibleTokenPacketData) (FungibleTokenPacketDataV2, error) { + if err := packetData.ValidateBasic(); err != nil { + return FungibleTokenPacketDataV2{}, errorsmod.Wrapf(err, "invalid packet data") + } + + denom := ExtractDenomFromPath(packetData.Denom) + return FungibleTokenPacketDataV2{ + Tokens: []Token{ + { + Denom: denom, + Amount: packetData.Amount, + }, + }, + Sender: packetData.Sender, + Receiver: packetData.Receiver, + Memo: packetData.Memo, + Forwarding: ForwardingPacketData{}, + }, nil +} diff --git a/modules/apps/transfer/types/packet_test.go b/modules/apps/transfer/types/packet_test.go index d2f3e1fa329..ff26a3188fe 100644 --- a/modules/apps/transfer/types/packet_test.go +++ b/modules/apps/transfer/types/packet_test.go @@ -7,6 +7,8 @@ import ( "github.com/stretchr/testify/require" + errorsmod "cosmossdk.io/errors" + "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" ibctesting "github.com/cosmos/ibc-go/v9/testing" @@ -711,3 +713,236 @@ func TestFungibleTokenPacketDataOmitEmpty(t *testing.T) { }) } } + +func TestUnmarshalPacketData(t *testing.T) { + var ( + packetDataBz []byte + version string + ) + + testCases := []struct { + name string + malleate func() + expError error + }{ + { + "success: v1 -> v2", + func() {}, + nil, + }, + { + "success: v2", + func() { + packetData := types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom", types.NewHop("transfer", "channel-0")), + Amount: "1000", + }, + }, sender, receiver, "", types.ForwardingPacketData{}) + + packetDataBz = packetData.GetBytes() + version = types.V2 + }, + nil, + }, + { + "invalid version", + func() { + version = "ics20-100" + }, + types.ErrInvalidVersion, + }, + } + + for _, tc := range testCases { + + packetDataV1 := types.NewFungibleTokenPacketData("transfer/channel-0/atom", "1000", sender, receiver, "") + + packetDataBz = packetDataV1.GetBytes() + version = types.V1 + + tc.malleate() + + packetData, err := types.UnmarshalPacketData(packetDataBz, version) + + expPass := tc.expError == nil + if expPass { + require.IsType(t, types.FungibleTokenPacketDataV2{}, packetData) + } else { + require.ErrorIs(t, err, tc.expError) + } + } +} + +// TestV2ForwardsCompatibilityFails asserts that new fields being added to a future proto definition of +// FungibleTokenPacketDataV2 fail to unmarshal with previous versions. In essence, permit backwards compatibility +// but restrict forward one. +func TestV2ForwardsCompatibilityFails(t *testing.T) { + var ( + packet types.FungibleTokenPacketDataV2 + packetDataBz []byte + ) + + testCases := []struct { + name string + malleate func() + expError error + }{ + { + "success", + func() {}, + nil, + }, + { + "failure: new field present in packet data", + func() { + // packet data containing extra field unknown to current proto file. + packetDataBz = append(packet.GetBytes(), []byte("22\tnew_value")...) + }, + ibcerrors.ErrInvalidType, + }, + } + + for _, tc := range testCases { + packet = types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom", types.NewHop("transfer", "channel-0")), + Amount: "1000", + }, + }, "sender", "receiver", "", types.ForwardingPacketData{}, + ) + + packetDataBz = packet.GetBytes() + + tc.malleate() + + packetData, err := types.UnmarshalPacketData(packetDataBz, types.V2) + + expPass := tc.expError == nil + if expPass { + require.NoError(t, err) + require.NotEqual(t, types.FungibleTokenPacketDataV2{}, packetData) + } else { + require.ErrorIs(t, err, tc.expError) + } + } +} + +func TestPacketV1ToPacketV2(t *testing.T) { + const ( + sender = "sender" + receiver = "receiver" + ) + + testCases := []struct { + name string + v1Data types.FungibleTokenPacketData + v2Data types.FungibleTokenPacketDataV2 + expError error + }{ + { + "success", + types.NewFungibleTokenPacketData("transfer/channel-0/atom", "1000", sender, receiver, ""), + types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom", types.NewHop("transfer", "channel-0")), + Amount: "1000", + }, + }, sender, receiver, "", types.ForwardingPacketData{}), + nil, + }, + { + "success with empty trace", + types.NewFungibleTokenPacketData("atom", "1000", sender, receiver, ""), + types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom"), + Amount: "1000", + }, + }, sender, receiver, "", types.ForwardingPacketData{}), + nil, + }, + { + "success: base denom with '/'", + types.NewFungibleTokenPacketData("transfer/channel-0/atom/withslash", "1000", sender, receiver, ""), + types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom/withslash", types.NewHop("transfer", "channel-0")), + Amount: "1000", + }, + }, sender, receiver, "", types.ForwardingPacketData{}), + nil, + }, + { + "success: base denom with '/' at the end", + types.NewFungibleTokenPacketData("transfer/channel-0/atom/", "1000", sender, receiver, ""), + types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom/", types.NewHop("transfer", "channel-0")), + Amount: "1000", + }, + }, sender, receiver, "", types.ForwardingPacketData{}), + nil, + }, + { + "success: longer trace base denom with '/'", + types.NewFungibleTokenPacketData("transfer/channel-0/transfer/channel-1/atom/pool", "1000", sender, receiver, ""), + types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom/pool", types.NewHop("transfer", "channel-0"), types.NewHop("transfer", "channel-1")), + Amount: "1000", + }, + }, sender, receiver, "", types.ForwardingPacketData{}), + nil, + }, + { + "success: longer trace with non transfer port", + types.NewFungibleTokenPacketData("transfer/channel-0/transfer/channel-1/transfer-custom/channel-2/atom", "1000", sender, receiver, ""), + types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom", types.NewHop("transfer", "channel-0"), types.NewHop("transfer", "channel-1"), types.NewHop("transfer-custom", "channel-2")), + Amount: "1000", + }, + }, sender, receiver, "", types.ForwardingPacketData{}), + nil, + }, + { + "success: base denom with slash, trace with non transfer port", + types.NewFungibleTokenPacketData("transfer/channel-0/transfer/channel-1/transfer-custom/channel-2/atom/pool", "1000", sender, receiver, ""), + types.NewFungibleTokenPacketDataV2( + []types.Token{ + { + Denom: types.NewDenom("atom/pool", types.NewHop("transfer", "channel-0"), types.NewHop("transfer", "channel-1"), types.NewHop("transfer-custom", "channel-2")), + Amount: "1000", + }, + }, sender, receiver, "", types.ForwardingPacketData{}), + nil, + }, + { + "failure: packet data fails validation with empty denom", + types.NewFungibleTokenPacketData("", "1000", sender, receiver, ""), + types.FungibleTokenPacketDataV2{}, + errorsmod.Wrap(types.ErrInvalidDenomForTransfer, "base denomination cannot be blank"), + }, + } + + for _, tc := range testCases { + actualV2Data, err := types.PacketDataV1ToV2(tc.v1Data) + + expPass := tc.expError == nil + if expPass { + require.NoError(t, err, "test case: %s", tc.name) + require.Equal(t, tc.v2Data, actualV2Data, "test case: %s", tc.name) + } else { + require.Error(t, err, "test case: %s", tc.name) + } + } +} From dab878eff8bbb800480b44d722bd34f33abc010b Mon Sep 17 00:00:00 2001 From: Vishal Potpelliwar <71565171+vishal-kanna@users.noreply.github.com> Date: Mon, 22 Jul 2024 19:21:42 +0530 Subject: [PATCH 15/78] chore: moved the CONTRACT godoc to doc.go (#6894) * chore: moved the CONTRACT godoc to doc.go * chore: made review changes * chore: clean up doc.go files. * chore: update doc.go of light client modules --------- Co-authored-by: DimitrisJim Co-authored-by: Damian Nolan --- modules/light-clients/06-solomachine/doc.go | 3 +++ .../06-solomachine/light_client_module.go | 24 ------------------- modules/light-clients/07-tendermint/doc.go | 3 +++ .../07-tendermint/light_client_module.go | 24 ------------------- modules/light-clients/08-wasm/doc.go | 3 +++ .../08-wasm/light_client_module.go | 24 ------------------- modules/light-clients/09-localhost/doc.go | 3 +++ .../09-localhost/light_client_module.go | 12 ---------- 8 files changed, 12 insertions(+), 84 deletions(-) diff --git a/modules/light-clients/06-solomachine/doc.go b/modules/light-clients/06-solomachine/doc.go index 8a46b0430c3..fc29e6b51bc 100644 --- a/modules/light-clients/06-solomachine/doc.go +++ b/modules/light-clients/06-solomachine/doc.go @@ -3,5 +3,8 @@ Package solomachine implements a concrete LightClientModule, ClientState, Consen Header and Misbehaviour types for the Solo Machine light client. This implementation is based off the ICS 06 specification (https://github.com/cosmos/ibc/tree/master/spec/client/ics-006-solo-machine-client) + +Note that client identifiers are expected to be in the form: 06-solomachine-{N}. +Client identifiers are generated and validated by core IBC, unexpected client identifiers will result in errors. */ package solomachine diff --git a/modules/light-clients/06-solomachine/light_client_module.go b/modules/light-clients/06-solomachine/light_client_module.go index 6d8dd2201bc..8c4885c776a 100644 --- a/modules/light-clients/06-solomachine/light_client_module.go +++ b/modules/light-clients/06-solomachine/light_client_module.go @@ -30,8 +30,6 @@ func NewLightClientModule(cdc codec.BinaryCodec, storeProvider clienttypes.Store // Initialize unmarshals the provided client and consensus states and performs basic validation. It calls into the // clientState.Initialize method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) Initialize(ctx sdk.Context, clientID string, clientStateBz, consensusStateBz []byte) error { var clientState ClientState if err := l.cdc.Unmarshal(clientStateBz, &clientState); err != nil { @@ -64,8 +62,6 @@ func (l LightClientModule) Initialize(ctx sdk.Context, clientID string, clientSt } // VerifyClientMessage obtains the client state associated with the client identifier and calls into the clientState.VerifyClientMessage method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) VerifyClientMessage(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) error { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -77,8 +73,6 @@ func (l LightClientModule) VerifyClientMessage(ctx sdk.Context, clientID string, } // CheckForMisbehaviour obtains the client state associated with the client identifier and calls into the clientState.CheckForMisbehaviour method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) CheckForMisbehaviour(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) bool { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -92,8 +86,6 @@ func (l LightClientModule) CheckForMisbehaviour(ctx sdk.Context, clientID string // UpdateStateOnMisbehaviour updates state upon misbehaviour, freezing the ClientState. // This method should only be called when misbehaviour is detected as it does not perform // any misbehaviour checks. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) UpdateStateOnMisbehaviour(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -106,8 +98,6 @@ func (l LightClientModule) UpdateStateOnMisbehaviour(ctx sdk.Context, clientID s } // UpdateState obtains the client state associated with the client identifier and calls into the clientState.UpdateState method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) UpdateState(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) []exported.Height { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -119,8 +109,6 @@ func (l LightClientModule) UpdateState(ctx sdk.Context, clientID string, clientM } // VerifyMembership obtains the client state associated with the client identifier and calls into the clientState.verifyMembership method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) VerifyMembership( ctx sdk.Context, clientID string, @@ -141,8 +129,6 @@ func (l LightClientModule) VerifyMembership( } // VerifyNonMembership obtains the client state associated with the client identifier and calls into the clientState.verifyNonMembership method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) VerifyNonMembership( ctx sdk.Context, clientID string, @@ -166,8 +152,6 @@ func (l LightClientModule) VerifyNonMembership( // - Active: if `IsFrozen` is false. // - Frozen: if `IsFrozen` is true. // - Unknown: if the client state associated with the provided client identifier is not found. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) Status(ctx sdk.Context, clientID string) exported.Status { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -185,8 +169,6 @@ func (l LightClientModule) Status(ctx sdk.Context, clientID string) exported.Sta // LatestHeight returns the latest height for the client state for the given client identifier. // If no client is present for the provided client identifier a zero value height is returned. // NOTE: RevisionNumber is always 0 for solomachine client heights. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) LatestHeight(ctx sdk.Context, clientID string) exported.Height { clientStore := l.storeProvider.ClientStore(ctx, clientID) @@ -199,8 +181,6 @@ func (l LightClientModule) LatestHeight(ctx sdk.Context, clientID string) export } // TimestampAtHeight obtains the client state associated with the client identifier and returns the timestamp in nanoseconds of the consensus state at the given height. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) TimestampAtHeight(ctx sdk.Context, clientID string, height exported.Height) (uint64, error) { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -213,8 +193,6 @@ func (l LightClientModule) TimestampAtHeight(ctx sdk.Context, clientID string, h // RecoverClient asserts that the substitute client is a solo machine client. It obtains the client state associated with the // subject client and calls into the subjectClientState.CheckSubstituteAndUpdateState method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (l LightClientModule) RecoverClient(ctx sdk.Context, clientID, substituteClientID string) error { substituteClientType, _, err := clienttypes.ParseClientIdentifier(substituteClientID) if err != nil { @@ -241,8 +219,6 @@ func (l LightClientModule) RecoverClient(ctx sdk.Context, clientID, substituteCl } // VerifyUpgradeAndUpdateState returns an error since solomachine client does not support upgrades -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 06-solomachine-{n}. func (LightClientModule) VerifyUpgradeAndUpdateState(ctx sdk.Context, clientID string, newClient, newConsState, upgradeClientProof, upgradeConsensusStateProof []byte) error { return errorsmod.Wrap(clienttypes.ErrInvalidUpgradeClient, "cannot upgrade solomachine client") } diff --git a/modules/light-clients/07-tendermint/doc.go b/modules/light-clients/07-tendermint/doc.go index d173dd7efe8..ae623cc742e 100644 --- a/modules/light-clients/07-tendermint/doc.go +++ b/modules/light-clients/07-tendermint/doc.go @@ -3,5 +3,8 @@ Package tendermint implements a concrete LightClientModule, ClientState, Consens Header, Misbehaviour and types for the Tendermint consensus light client. This implementation is based off the ICS 07 specification (https://github.com/cosmos/ibc/tree/main/spec/client/ics-007-tendermint-client) + +Note that client identifiers are expected to be in the form: 07-tendermint-{N}. +Client identifiers are generated and validated by core IBC, unexpected client identifiers will result in errors. */ package tendermint diff --git a/modules/light-clients/07-tendermint/light_client_module.go b/modules/light-clients/07-tendermint/light_client_module.go index 33fd57b0e44..e0acee6d75e 100644 --- a/modules/light-clients/07-tendermint/light_client_module.go +++ b/modules/light-clients/07-tendermint/light_client_module.go @@ -31,8 +31,6 @@ func NewLightClientModule(cdc codec.BinaryCodec, storeProvider clienttypes.Store // Initialize unmarshals the provided client and consensus states and performs basic validation. It calls into the // clientState.initialize method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) Initialize(ctx sdk.Context, clientID string, clientStateBz, consensusStateBz []byte) error { var clientState ClientState if err := l.cdc.Unmarshal(clientStateBz, &clientState); err != nil { @@ -58,8 +56,6 @@ func (l LightClientModule) Initialize(ctx sdk.Context, clientID string, clientSt } // VerifyClientMessage obtains the client state associated with the client identifier and calls into the clientState.VerifyClientMessage method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) VerifyClientMessage(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) error { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -71,8 +67,6 @@ func (l LightClientModule) VerifyClientMessage(ctx sdk.Context, clientID string, } // CheckForMisbehaviour obtains the client state associated with the client identifier and calls into the clientState.CheckForMisbehaviour method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) CheckForMisbehaviour(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) bool { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -84,8 +78,6 @@ func (l LightClientModule) CheckForMisbehaviour(ctx sdk.Context, clientID string } // UpdateStateOnMisbehaviour obtains the client state associated with the client identifier and calls into the clientState.UpdateStateOnMisbehaviour method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) UpdateStateOnMisbehaviour(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -97,8 +89,6 @@ func (l LightClientModule) UpdateStateOnMisbehaviour(ctx sdk.Context, clientID s } // UpdateState obtains the client state associated with the client identifier and calls into the clientState.UpdateState method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) UpdateState(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) []exported.Height { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -110,8 +100,6 @@ func (l LightClientModule) UpdateState(ctx sdk.Context, clientID string, clientM } // VerifyMembership obtains the client state associated with the client identifier and calls into the clientState.verifyMembership method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) VerifyMembership( ctx sdk.Context, clientID string, @@ -132,8 +120,6 @@ func (l LightClientModule) VerifyMembership( } // VerifyNonMembership obtains the client state associated with the client identifier and calls into the clientState.verifyNonMembership method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) VerifyNonMembership( ctx sdk.Context, clientID string, @@ -153,8 +139,6 @@ func (l LightClientModule) VerifyNonMembership( } // Status obtains the client state associated with the client identifier and calls into the clientState.status method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) Status(ctx sdk.Context, clientID string) exported.Status { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -167,8 +151,6 @@ func (l LightClientModule) Status(ctx sdk.Context, clientID string) exported.Sta // LatestHeight returns the latest height for the client state for the given client identifier. // If no client is present for the provided client identifier a zero value height is returned. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) LatestHeight(ctx sdk.Context, clientID string) exported.Height { clientStore := l.storeProvider.ClientStore(ctx, clientID) clientState, found := getClientState(clientStore, l.cdc) @@ -180,8 +162,6 @@ func (l LightClientModule) LatestHeight(ctx sdk.Context, clientID string) export } // TimestampAtHeight obtains the client state associated with the client identifier and calls into the clientState.getTimestampAtHeight method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) TimestampAtHeight( ctx sdk.Context, clientID string, @@ -198,8 +178,6 @@ func (l LightClientModule) TimestampAtHeight( // RecoverClient asserts that the substitute client is a tendermint client. It obtains the client state associated with the // subject client and calls into the subjectClientState.CheckSubstituteAndUpdateState method. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) RecoverClient(ctx sdk.Context, clientID, substituteClientID string) error { substituteClientType, _, err := clienttypes.ParseClientIdentifier(substituteClientID) if err != nil { @@ -228,8 +206,6 @@ func (l LightClientModule) RecoverClient(ctx sdk.Context, clientID, substituteCl // VerifyUpgradeAndUpdateState obtains the client state associated with the client identifier and calls into the clientState.VerifyUpgradeAndUpdateState method. // The new client and consensus states will be unmarshaled and an error is returned if the new client state is not at a height greater // than the existing client. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 07-tendermint-{n}. func (l LightClientModule) VerifyUpgradeAndUpdateState( ctx sdk.Context, clientID string, diff --git a/modules/light-clients/08-wasm/doc.go b/modules/light-clients/08-wasm/doc.go index d7783575d03..afa32fd3dec 100644 --- a/modules/light-clients/08-wasm/doc.go +++ b/modules/light-clients/08-wasm/doc.go @@ -11,5 +11,8 @@ In this case, it is possible to build the code with either cgo disabled or a cus This allows disabling linking of libwasmvm and not forcing users to have specific libraries available on their systems. Please refer to the 08-wasm module documentation for more information. + +Note that client identifiers are expected to be in the form: 08-wasm-{N}. +Client identifiers are generated and validated by core IBC, unexpected client identifiers will result in errors. */ package wasm diff --git a/modules/light-clients/08-wasm/light_client_module.go b/modules/light-clients/08-wasm/light_client_module.go index ec0cc930579..d9660cec654 100644 --- a/modules/light-clients/08-wasm/light_client_module.go +++ b/modules/light-clients/08-wasm/light_client_module.go @@ -38,8 +38,6 @@ func NewLightClientModule(keeper wasmkeeper.Keeper, storeProvider clienttypes.St // Initialize unmarshals the provided client and consensus states and performs basic validation. It sets the client // state and consensus state in the client store. // It also initializes the wasm contract for the client. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) Initialize(ctx sdk.Context, clientID string, clientStateBz, consensusStateBz []byte) error { var clientState types.ClientState if err := l.keeper.Codec().Unmarshal(clientStateBz, &clientState); err != nil { @@ -80,8 +78,6 @@ func (l LightClientModule) Initialize(ctx sdk.Context, clientID string, clientSt // It must handle each type of ClientMessage appropriately. Calls to CheckForMisbehaviour, UpdateState, and UpdateStateOnMisbehaviour // will assume that the content of the ClientMessage has been verified and can be trusted. An error should be returned // if the ClientMessage fails to verify. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) VerifyClientMessage(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) error { clientStore := l.storeProvider.ClientStore(ctx, clientID) cdc := l.keeper.Codec() @@ -105,8 +101,6 @@ func (l LightClientModule) VerifyClientMessage(ctx sdk.Context, clientID string, // CheckForMisbehaviour obtains the client state associated with the client identifier, it detects misbehaviour in a submitted Header // message and verifies the correctness of a submitted Misbehaviour ClientMessage. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) CheckForMisbehaviour(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) bool { clientStore := l.storeProvider.ClientStore(ctx, clientID) cdc := l.keeper.Codec() @@ -141,8 +135,6 @@ func (l LightClientModule) CheckForMisbehaviour(ctx sdk.Context, clientID string // UpdateStateOnMisbehaviour obtains the client state associated with the client identifier performs appropriate state changes on // a client state given that misbehaviour has been detected and verified. // Client state is updated in the store by the contract. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) UpdateStateOnMisbehaviour(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) { clientStore := l.storeProvider.ClientStore(ctx, clientID) cdc := l.keeper.Codec() @@ -169,8 +161,6 @@ func (l LightClientModule) UpdateStateOnMisbehaviour(ctx sdk.Context, clientID s // UpdateState obtains the client state associated with the client identifier and calls into the appropriate // contract endpoint. Client state and new consensus states are updated in the store by the contract. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) UpdateState(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) []exported.Height { clientStore := l.storeProvider.ClientStore(ctx, clientID) cdc := l.keeper.Codec() @@ -211,8 +201,6 @@ func (l LightClientModule) UpdateState(ctx sdk.Context, clientID string, clientM // VerifyMembership is a generic proof verification method which verifies a proof of the existence of a value at a given CommitmentPath at the specified height. // The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). // If a zero proof height is passed in, it will fail to retrieve the associated consensus state. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) VerifyMembership( ctx sdk.Context, clientID string, @@ -267,8 +255,6 @@ func (l LightClientModule) VerifyMembership( // VerifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath at a specified height. // The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). // If a zero proof height is passed in, it will fail to retrieve the associated consensus state. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) VerifyNonMembership( ctx sdk.Context, clientID string, @@ -327,8 +313,6 @@ func (l LightClientModule) VerifyNonMembership( // // A frozen client will become expired, so the Frozen status // has higher precedence. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) Status(ctx sdk.Context, clientID string) exported.Status { clientStore := l.storeProvider.ClientStore(ctx, clientID) cdc := l.keeper.Codec() @@ -359,8 +343,6 @@ func (l LightClientModule) Status(ctx sdk.Context, clientID string) exported.Sta // LatestHeight returns the latest height for the client state for the given client identifier. // If no client is present for the provided client identifier a zero value height is returned. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) LatestHeight(ctx sdk.Context, clientID string) exported.Height { clientStore := l.storeProvider.ClientStore(ctx, clientID) cdc := l.keeper.Codec() @@ -375,8 +357,6 @@ func (l LightClientModule) LatestHeight(ctx sdk.Context, clientID string) export // TimestampAtHeight obtains the client state associated with the client identifier and calls into the appropriate contract endpoint. // It returns the timestamp in nanoseconds of the consensus state at the given height. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) TimestampAtHeight(ctx sdk.Context, clientID string, height exported.Height) (uint64, error) { clientStore := l.storeProvider.ClientStore(ctx, clientID) cdc := l.keeper.Codec() @@ -414,8 +394,6 @@ func (l LightClientModule) TimestampAtHeight(ctx sdk.Context, clientID string, h // subject client and calls into the appropriate contract endpoint. // It will verify that a substitute client state is valid and update the subject client state. // Note that this method is used only for recovery and will not allow changes to the checksum. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) RecoverClient(ctx sdk.Context, clientID, substituteClientID string) error { substituteClientType, _, err := clienttypes.ParseClientIdentifier(substituteClientID) if err != nil { @@ -459,8 +437,6 @@ func (l LightClientModule) RecoverClient(ctx sdk.Context, clientID, substituteCl // VerifyUpgradeAndUpdateState obtains the client state associated with the client identifier and calls into the appropriate contract endpoint. // The new client and consensus states will be unmarshaled and an error is returned if the new client state is not at a height greater // than the existing client. On a successful verification, it expects the contract to update the new client state, consensus state, and any other client metadata. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to have the format 08-wasm-{n}. func (l LightClientModule) VerifyUpgradeAndUpdateState( ctx sdk.Context, clientID string, diff --git a/modules/light-clients/09-localhost/doc.go b/modules/light-clients/09-localhost/doc.go index da32e440c0c..59a8cf11dc8 100644 --- a/modules/light-clients/09-localhost/doc.go +++ b/modules/light-clients/09-localhost/doc.go @@ -3,5 +3,8 @@ Package solomachine implements a concrete LightClientModule, ClientState, Consen Header and Misbehaviour types for the Localhost light client. This implementation is based off the ICS 09 specification (https://github.com/cosmos/ibc/blob/main/spec/client/ics-009-loopback-cilent) + +Note the client identifier is expected to be: 09-localhost. +This is validated by core IBC in the 02-client submodule. */ package localhost diff --git a/modules/light-clients/09-localhost/light_client_module.go b/modules/light-clients/09-localhost/light_client_module.go index 7b37fe9c71a..78eb4f1916a 100644 --- a/modules/light-clients/09-localhost/light_client_module.go +++ b/modules/light-clients/09-localhost/light_client_module.go @@ -45,15 +45,11 @@ func NewLightClientModule(cdc codec.BinaryCodec, key storetypes.StoreKey) *Light } // Initialize returns an error because it is stateless. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to be 09-localhost. func (LightClientModule) Initialize(_ sdk.Context, _ string, _, _ []byte) error { return errorsmod.Wrap(clienttypes.ErrClientExists, "localhost is stateless and cannot be initialized") } // VerifyClientMessage is unsupported by the 09-localhost client type and returns an error. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to be 09-localhost. func (LightClientModule) VerifyClientMessage(_ sdk.Context, _ string, _ exported.ClientMessage) error { return errorsmod.Wrap(clienttypes.ErrUpdateClientFailed, "client message verification is unsupported by the localhost client") } @@ -69,8 +65,6 @@ func (LightClientModule) UpdateStateOnMisbehaviour(_ sdk.Context, _ string, _ ex } // UpdateState performs a no-op and returns the context height in the updated heights return value. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to be 09-localhost. func (LightClientModule) UpdateState(ctx sdk.Context, _ string, _ exported.ClientMessage) []exported.Height { return []exported.Height{clienttypes.GetSelfHeight(ctx)} } @@ -78,8 +72,6 @@ func (LightClientModule) UpdateState(ctx sdk.Context, _ string, _ exported.Clien // VerifyMembership is a generic proof verification method which verifies the existence of a given key and value within the IBC store. // The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). // The caller must provide the full IBC store. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to be 09-localhost. func (l LightClientModule) VerifyMembership( ctx sdk.Context, clientID string, @@ -122,8 +114,6 @@ func (l LightClientModule) VerifyMembership( // VerifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath within the IBC store. // The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). // The caller must provide the full IBC store. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to be 09-localhost. func (l LightClientModule) VerifyNonMembership( ctx sdk.Context, clientID string, @@ -163,8 +153,6 @@ func (LightClientModule) Status(_ sdk.Context, _ string) exported.Status { } // LatestHeight returns the context height. -// -// CONTRACT: clientID is validated in 02-client router, thus clientID is assumed here to be 09-localhost. func (LightClientModule) LatestHeight(ctx sdk.Context, _ string) exported.Height { return clienttypes.GetSelfHeight(ctx) } From e95628997c288efb7d5b8602973b03502b8d61bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 19:18:05 +0300 Subject: [PATCH 16/78] chore(deps): bump docker/build-push-action from 6.4.1 to 6.5.0 (#6915) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.4.1 to 6.5.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/1ca370b3a9802c92e886402e0dd88098a2533b12...5176d81f87c23d6fc96624dfdbcd9f3830bbe445) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker.yml | 4 ++-- .github/workflows/e2e-test-workflow-call.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 3bf7eecba10..04371cc9cee 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -28,7 +28,7 @@ jobs: images: ${{ env.REGISTRY }}/cosmos/${{ env.IMAGE_NAME }} - name: Build Docker image - uses: docker/build-push-action@1ca370b3a9802c92e886402e0dd88098a2533b12 + uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 with: context: . tags: ${{ steps.meta.outputs.tags }} @@ -46,7 +46,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Push Docker image - uses: docker/build-push-action@1ca370b3a9802c92e886402e0dd88098a2533b12 + uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 with: context: . push: true diff --git a/.github/workflows/e2e-test-workflow-call.yml b/.github/workflows/e2e-test-workflow-call.yml index 5dc7ab29002..17765429a99 100644 --- a/.github/workflows/e2e-test-workflow-call.yml +++ b/.github/workflows/e2e-test-workflow-call.yml @@ -132,7 +132,7 @@ jobs: - name: Build and push Docker image if: ${{ inputs.build-and-push-docker-image }} - uses: docker/build-push-action@1ca370b3a9802c92e886402e0dd88098a2533b12 + uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 with: context: . push: true @@ -179,7 +179,7 @@ jobs: - name: Build and push Docker image if: ${{ inputs.build-and-push-docker-image-wasm }} - uses: docker/build-push-action@1ca370b3a9802c92e886402e0dd88098a2533b12 + uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 with: context: . push: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c07f5f7faca..46c296b260e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: images: ${{ env.REGISTRY }}/cosmos/${{ env.IMAGE_NAME }} - name: Build and push Docker image - uses: docker/build-push-action@1ca370b3a9802c92e886402e0dd88098a2533b12 + uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 with: context: . push: true From 3d46620f09764d344c83e0b32089014caefabcef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 19:18:23 +0300 Subject: [PATCH 17/78] chore(deps): bump docker/login-action from 3.2.0 to 3.3.0 (#6914) Bumps [docker/login-action](https://github.com/docker/login-action) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/0d4c9c5ea7693da7b068278f7b52bda2a190a446...9780b0c442fbb1117ed29e0efdff1e18412f7567) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-callbacks-simd-image-from-tag.yml | 2 +- .github/workflows/build-simd-image-from-tag.yml | 2 +- .github/workflows/build-wasm-simd-image-from-tag.yml | 2 +- .github/workflows/docker.yml | 2 +- .github/workflows/e2e-compatibility-unreleased.yaml | 2 +- .github/workflows/e2e-compatibility.yaml | 2 +- .github/workflows/e2e-test-workflow-call.yml | 4 ++-- .github/workflows/release-wasm.yml | 2 +- .github/workflows/release.yml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-callbacks-simd-image-from-tag.yml b/.github/workflows/build-callbacks-simd-image-from-tag.yml index 34ab1f3babb..75b96933603 100644 --- a/.github/workflows/build-callbacks-simd-image-from-tag.yml +++ b/.github/workflows/build-callbacks-simd-image-from-tag.yml @@ -22,7 +22,7 @@ jobs: ref: "${{ env.GIT_TAG }}" fetch-depth: 0 - name: Log in to the Container registry - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/build-simd-image-from-tag.yml b/.github/workflows/build-simd-image-from-tag.yml index 8ea8e565c2e..eabe55f7858 100644 --- a/.github/workflows/build-simd-image-from-tag.yml +++ b/.github/workflows/build-simd-image-from-tag.yml @@ -26,7 +26,7 @@ jobs: ref: "${{ env.GIT_TAG }}" fetch-depth: 0 - name: Log in to the Container registry - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/build-wasm-simd-image-from-tag.yml b/.github/workflows/build-wasm-simd-image-from-tag.yml index 3e8eee30be4..185e2e6ce31 100644 --- a/.github/workflows/build-wasm-simd-image-from-tag.yml +++ b/.github/workflows/build-wasm-simd-image-from-tag.yml @@ -27,7 +27,7 @@ jobs: - name: Install dependencies run: make python-install-deps - name: Log in to the Container registry - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 04371cc9cee..bd58e9aaf8e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -39,7 +39,7 @@ jobs: run: | docker run --rm ${{ steps.meta.outputs.tags }} - name: Log in to the Container registry - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/e2e-compatibility-unreleased.yaml b/.github/workflows/e2e-compatibility-unreleased.yaml index 7a7f3f78090..68a0601ff39 100644 --- a/.github/workflows/e2e-compatibility-unreleased.yaml +++ b/.github/workflows/e2e-compatibility-unreleased.yaml @@ -27,7 +27,7 @@ jobs: ref: "${{ matrix.release-branch }}" fetch-depth: 0 - name: Log in to the Container registry - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/e2e-compatibility.yaml b/.github/workflows/e2e-compatibility.yaml index f9f382242d2..38069ac0b97 100644 --- a/.github/workflows/e2e-compatibility.yaml +++ b/.github/workflows/e2e-compatibility.yaml @@ -67,7 +67,7 @@ jobs: fetch-depth: 0 - name: Log in to the Container registry if: env.RELEASE_BRANCH == matrix.release-branch - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/e2e-test-workflow-call.yml b/.github/workflows/e2e-test-workflow-call.yml index 17765429a99..2b80aeefa84 100644 --- a/.github/workflows/e2e-test-workflow-call.yml +++ b/.github/workflows/e2e-test-workflow-call.yml @@ -117,7 +117,7 @@ jobs: if: ${{ inputs.build-and-push-docker-image }} - name: Log in to the Container registry if: ${{ inputs.build-and-push-docker-image }} - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -164,7 +164,7 @@ jobs: - name: Log in to the Container registry if: ${{ inputs.build-and-push-docker-image-wasm }} - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/release-wasm.yml b/.github/workflows/release-wasm.yml index ef16028ab99..3cb42026837 100644 --- a/.github/workflows/release-wasm.yml +++ b/.github/workflows/release-wasm.yml @@ -38,7 +38,7 @@ jobs: - name: Install dependencies run: make python-install-deps - name: Log in to the Container registry - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 46c296b260e..ff75dabb463 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,7 +39,7 @@ jobs: uses: actions/checkout@v4 - name: Log in to the Container registry - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} From 6aa61afbc59b055bac1449e7f3239f08e5cd9b95 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 22 Jul 2024 22:01:02 +0200 Subject: [PATCH 18/78] docs: add receiver and memo limits to v8.3.x docs --- .../version-v8.3.x/02-apps/01-transfer/04-messages.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/04-messages.md b/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/04-messages.md index 483384a09fe..202596ed70f 100644 --- a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/04-messages.md +++ b/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/04-messages.md @@ -32,7 +32,8 @@ This message is expected to fail if: - `Token.Amount` is not positive. - `Token.Denom` is not a valid IBC denomination as per [ADR 001 - Coin Source Tracing](/architecture/adr-001-coin-source-tracing). - `Sender` is empty. -- `Receiver` is empty. +- `Receiver` is empty or contains more than 2048 bytes. +- `Memo` contains more than 32768 bytes. - `TimeoutHeight` and `TimeoutTimestamp` are both zero. This message will send a fungible token to the counterparty chain represented by the counterparty Channel End connected to the Channel End with the identifiers `SourcePort` and `SourceChannel`. From 92e1f387b0c222dd2cc44c7df7981b0ca96a27f5 Mon Sep 17 00:00:00 2001 From: Nikolas De Giorgis Date: Tue, 23 Jul 2024 10:28:07 +0100 Subject: [PATCH 19/78] (feat) Add possibility to transfer entire balance. (#6877) * Add possibility to transfer entire balance. * Added entry to the Changelog. * Added e2e test * Added forwarding * Update modules/apps/transfer/keeper/relay.go Co-authored-by: DimitrisJim * Move UnboundedSpendLimit to token.go * add documentation * add test to compatibility matrices * PR Feedback. --------- Co-authored-by: DimitrisJim Co-authored-by: Carlos Rodriguez --- .../main/transfer-v2-multidenom-chain-a.json | 1 + .../transfer-v2-multidenom-chain-a.json | 1 + .../unreleased/transfer-v2-multidenom.json | 1 + CHANGELOG.md | 1 + docs/docs/02-apps/01-transfer/04-messages.md | 7 +- .../01-transfer/10-ICS20-v1/04-messages.md | 2 + e2e/tests/transfer/base_test.go | 89 +++++++++++++++++++ modules/apps/transfer/keeper/relay.go | 5 ++ modules/apps/transfer/keeper/relay_test.go | 10 +++ modules/apps/transfer/types/token.go | 14 +++ .../transfer/types/transfer_authorization.go | 14 --- testing/chain.go | 6 +- 12 files changed, 133 insertions(+), 18 deletions(-) diff --git a/.github/compatibility-test-matrices/main/transfer-v2-multidenom-chain-a.json b/.github/compatibility-test-matrices/main/transfer-v2-multidenom-chain-a.json index 95ca1fcfe0f..fb04ec8ba4d 100644 --- a/.github/compatibility-test-matrices/main/transfer-v2-multidenom-chain-a.json +++ b/.github/compatibility-test-matrices/main/transfer-v2-multidenom-chain-a.json @@ -10,6 +10,7 @@ ], "test": [ "TestMsgTransfer_Succeeds_Nonincentivized_MultiDenom", + "TestMsgTransfer_EntireBalance", "TestMsgTransfer_Fails_InvalidAddress_MultiDenom" ], "relayer-type": [ diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json index 60de14c5609..e75a7b6c73e 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json @@ -10,6 +10,7 @@ ], "test": [ "TestMsgTransfer_Succeeds_Nonincentivized_MultiDenom", + "TestMsgTransfer_EntireBalance", "TestMsgTransfer_Fails_InvalidAddress_MultiDenom" ], "relayer-type": [ diff --git a/.github/compatibility-test-matrices/unreleased/transfer-v2-multidenom.json b/.github/compatibility-test-matrices/unreleased/transfer-v2-multidenom.json index 23484ea3cd0..da1134e3fa6 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-v2-multidenom.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-v2-multidenom.json @@ -10,6 +10,7 @@ ], "test": [ "TestMsgTransfer_Succeeds_Nonincentivized_MultiDenom", + "TestMsgTransfer_EntireBalance", "TestMsgTransfer_Fails_InvalidAddress_MultiDenom" ], "relayer-type": [ diff --git a/CHANGELOG.md b/CHANGELOG.md index 016eb0a9acb..ee56fa3031e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -82,6 +82,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (apps/transfer) [\#6492](https://github.com/cosmos/ibc-go/pull/6492) Added new `Tokens` field to `MsgTransfer` to enable sending of multiple denoms, and deprecated the `Token` field. * (apps/transfer) [\#6693](https://github.com/cosmos/ibc-go/pull/6693) Added new `Forwarding` field to `MsgTransfer` to enable forwarding tokens through multiple intermediary chains with a single transaction. This also enables automatic unwinding of tokens to their native chain. `x/authz` support for transfer allows granters to specify a set of possible forwarding hops that are allowed for grantees. +* (apps/transfer) [\#6877](https://github.com/cosmos/ibc-go/pull/6877) Added the possibility to transfer the entire user balance of a particular denomination by using [`UnboundedSpendLimit`](https://github.com/cosmos/ibc-go/blob/715f00eef8727da41db25fdd4763b709bdbba07e/modules/apps/transfer/types/transfer_authorization.go#L253-L255) as the token amount. ### Bug Fixes diff --git a/docs/docs/02-apps/01-transfer/04-messages.md b/docs/docs/02-apps/01-transfer/04-messages.md index 2d9c28bf38d..4d121985fdc 100644 --- a/docs/docs/02-apps/01-transfer/04-messages.md +++ b/docs/docs/02-apps/01-transfer/04-messages.md @@ -57,13 +57,14 @@ If `Forwarding` is `nil`, this message is expected to fail if: If `Forwarding` is not `nil`, then to use forwarding you must either set `Unwind` to true or provide a non-empty list of `Hops`. Setting both `Unwind` to true and providing a non-empty list of `Hops` is allowed, but the total number of hops that is formed as a combination of the hops needed to unwind the tokens and the hops to forward them afterwards to the final destination must not exceed 8. When using forwarding, timeout must be specified using only `TimeoutTimestamp` (i.e. `TimeoutHeight` must be zero). Please note that the timeout timestamp must take into account the time that it may take tokens to be forwarded through the intermediary chains. Additionally, please note that the `MsgTransfer` will fail if: - `Hops` is not empty, and the number of elements of `Hops` is greater than 8, or either the `PortId` or `ChannelId` of any of the `Hops` is not a valid identifier. -- `Unwind` is true, and either the coins to be transfered have different denomination traces, or `SourcePort` and `SourceChannel` are not empty strings (they must be empty because they are set by the transfer module, since it has access to the denomination trace information and is thus able to know the source port ID, channel ID to use in order to unwind the tokens). If `Unwind` is true, the transfer module expects the tokens in `MsgTransfer` to not be native to the sending chain (i.e. they must be IBC vouchers). +- `Unwind` is true, and either the coins to be transferred have different denomination traces, or `SourcePort` and `SourceChannel` are not empty strings (they must be empty because they are set by the transfer module, since it has access to the denomination trace information and is thus able to know the source port ID, channel ID to use in order to unwind the tokens). If `Unwind` is true, the transfer module expects the tokens in `MsgTransfer` to not be native to the sending chain (i.e. they must be IBC vouchers). -Please note that the `Token` field is deprecated and users should now use `Tokens` instead. If `Token` is used then `Tokens` must be empty. Similarly, if `Tokens` is used then `Token` should be left empty. -This message will send a fungible token to the counterparty chain represented by the counterparty Channel End connected to the Channel End with the identifiers `SourcePort` and `SourceChannel`. +Please note that the `Token` field is deprecated and users should now use `Tokens` instead. If `Token` is used then `Tokens` must be empty. Similarly, if `Tokens` is used then `Token` should be left empty. This message will send a fungible token to the counterparty chain represented by the counterparty Channel End connected to the Channel End with the identifiers `SourcePort` and `SourceChannel`. The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain. +If the `Amount` is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corrsponding denomination will be transferred. The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. + ### Memo The memo field was added to allow applications and users to attach metadata to transfer packets. The field is optional and may be left empty. When it is used to attach metadata for a particular middleware, the memo field should be represented as a json object where different middlewares use different json keys. diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md index 703054ae1ec..08fc05e88c3 100644 --- a/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md @@ -44,6 +44,8 @@ This message will send a fungible token to the counterparty chain represented by The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain. +If the `Amount` is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corrsponding denomination will be transferred. The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. + ### Memo The memo field was added to allow applications and users to attach metadata to transfer packets. The field is optional and may be left empty. When it is used to attach metadata for a particular middleware, the memo field should be represented as a json object where different middlewares use different json keys. diff --git a/e2e/tests/transfer/base_test.go b/e2e/tests/transfer/base_test.go index af140a4f19b..745a0d57f07 100644 --- a/e2e/tests/transfer/base_test.go +++ b/e2e/tests/transfer/base_test.go @@ -553,3 +553,92 @@ func (s *TransferTestSuite) TestMsgTransfer_WithMemo() { s.Require().Equal(testvalues.IBCTransferAmount, actualBalance.Int64()) }) } + +// TestMsgTransfer_EntireBalance tests that it is possible to transfer the entire balance +// of a given denom by using types.UnboundedSpendLimit as the amount. +func (s *TransferTestSuite) TestMsgTransfer_EntireBalance() { + t := s.T() + ctx := context.TODO() + + testName := t.Name() + t.Parallel() + relayer, channelA := s.CreateTransferPath(testName) + + chainA, chainB := s.GetChains() + + chainADenom := chainA.Config().Denom + + chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) + chainAAddress := chainAWallet.FormattedAddress() + + chainBWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + chainBAddress := chainBWallet.FormattedAddress() + + coinFromA := testvalues.DefaultTransferAmount(chainADenom) + + s.Require().NoError(test.WaitForBlocks(ctx, 1, chainA, chainB), "failed to wait for blocks") + + t.Run("IBC token transfer from chainA to chainB", func(t *testing.T) { + transferTxResp := s.Transfer(ctx, chainA, chainAWallet, channelA.PortID, channelA.ChannelID, sdk.NewCoins(coinFromA), chainAAddress, chainBAddress, s.GetTimeoutHeight(ctx, chainA), 0, "", nil) + s.AssertTxSuccess(transferTxResp) + }) + + t.Run("tokens are escrowed", func(t *testing.T) { + actualBalance, err := s.GetChainANativeBalance(ctx, chainAWallet) + s.Require().NoError(err) + + s.Require().Equal(testvalues.StartingTokenAmount-coinFromA.Amount.Int64(), actualBalance) + }) + + t.Run("start relayer", func(t *testing.T) { + s.StartRelayer(relayer, testName) + }) + + chainBIBCToken := testsuite.GetIBCToken(chainADenom, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID) + + t.Run("packets relayed", func(t *testing.T) { + s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1) + actualBalance, err := query.Balance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom()) + + s.Require().NoError(err) + s.Require().Equal(coinFromA.Amount.Int64(), actualBalance.Int64()) + + actualBalance, err = query.Balance(ctx, chainA, chainAAddress, chainADenom) + + s.Require().NoError(err) + s.Require().Equal(testvalues.StartingTokenAmount-coinFromA.Amount.Int64(), actualBalance.Int64()) + }) + + t.Run("send entire balance from B to A", func(t *testing.T) { + transferCoins := sdk.NewCoins((sdk.NewCoin(chainBIBCToken.IBCDenom(), transfertypes.UnboundedSpendLimit())), sdk.NewCoin(chainB.Config().Denom, transfertypes.UnboundedSpendLimit())) + transferTxResp := s.Transfer(ctx, chainB, chainBWallet, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID, transferCoins, chainBAddress, chainAAddress, s.GetTimeoutHeight(ctx, chainB), 0, "", nil) + s.AssertTxSuccess(transferTxResp) + }) + + chainAIBCToken := testsuite.GetIBCToken(chainB.Config().Denom, channelA.PortID, channelA.ChannelID) + t.Run("packets relayed", func(t *testing.T) { + // test that chainA has the entire balance back of its native token. + s.AssertPacketRelayed(ctx, chainA, channelA.PortID, channelA.ChannelID, 1) + actualBalance, err := query.Balance(ctx, chainA, chainAAddress, chainADenom) + + s.Require().NoError(err) + s.Require().Equal(testvalues.StartingTokenAmount, actualBalance.Int64()) + + // test that chainA has the entirety of chainB's token IBC denom. + actualBalance, err = query.Balance(ctx, chainA, chainAAddress, chainAIBCToken.IBCDenom()) + + s.Require().NoError(err) + s.Require().Equal(testvalues.StartingTokenAmount, actualBalance.Int64()) + + // Tests that chainB has a zero balance for both. + actualBalance, err = query.Balance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom()) + + s.Require().NoError(err) + s.Require().Zero(actualBalance.Int64()) + + actualBalance, err = query.Balance(ctx, chainB, chainBAddress, chainB.Config().Denom) + + s.Require().NoError(err) + s.Require().Zero(actualBalance.Int64()) + }) +} diff --git a/modules/apps/transfer/keeper/relay.go b/modules/apps/transfer/keeper/relay.go index f41cacebd2e..122e4501fae 100644 --- a/modules/apps/transfer/keeper/relay.go +++ b/modules/apps/transfer/keeper/relay.go @@ -98,6 +98,11 @@ func (k Keeper) sendTransfer( tokens := make([]types.Token, 0, len(coins)) for _, coin := range coins { + // Using types.UnboundedSpendLimit allows us to send the entire balance of a given denom. + if coin.Amount.Equal(types.UnboundedSpendLimit()) { + coin.Amount = k.bankKeeper.GetBalance(ctx, sender, coin.Denom).Amount + } + token, err := k.tokenFromCoin(ctx, coin) if err != nil { return 0, err diff --git a/modules/apps/transfer/keeper/relay_test.go b/modules/apps/transfer/keeper/relay_test.go index ef49f1cdf64..b1bc29f9ec0 100644 --- a/modules/apps/transfer/keeper/relay_test.go +++ b/modules/apps/transfer/keeper/relay_test.go @@ -113,6 +113,16 @@ func (suite *KeeperTestSuite) TestSendTransfer() { }, nil, }, + { + "successful transfer of entire balance", + func() { + coins = sdk.NewCoins(sdk.NewCoin(coins[0].Denom, types.UnboundedSpendLimit())) + var ok bool + expEscrowAmounts[0], ok = sdkmath.NewIntFromString(ibctesting.DefaultGenesisAccBalance) + suite.Require().True(ok) + }, + nil, + }, { "failure: source channel not found", func() { diff --git a/modules/apps/transfer/types/token.go b/modules/apps/transfer/types/token.go index 0f8b361516d..d30a765f0f2 100644 --- a/modules/apps/transfer/types/token.go +++ b/modules/apps/transfer/types/token.go @@ -1,6 +1,8 @@ package types import ( + "math/big" + errorsmod "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" @@ -10,6 +12,9 @@ import ( // Tokens is a slice of Tokens type Tokens []Token +// maxUint256 is the maximum value for a 256 bit unsigned integer. +var maxUint256 = new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(1)) + // Validate validates a token denomination and amount. func (t Token) Validate() error { if err := t.Denom.Validate(); err != nil { @@ -42,3 +47,12 @@ func (t Token) ToCoin() (sdk.Coin, error) { coin := sdk.NewCoin(t.Denom.IBCDenom(), transferAmount) return coin, nil } + +// UnboundedSpendLimit returns the sentinel value that can be used +// as the amount for a denomination's spend limit for which spend limit updating +// should be disabled. Please note that using this sentinel value means that a grantee +// will be granted the privilege to do ICS20 token transfers for the total amount +// of the denomination available at the granter's account. +func UnboundedSpendLimit() sdkmath.Int { + return sdkmath.NewIntFromBigInt(maxUint256) +} diff --git a/modules/apps/transfer/types/transfer_authorization.go b/modules/apps/transfer/types/transfer_authorization.go index 0332ef53b3d..6e166fe63b9 100644 --- a/modules/apps/transfer/types/transfer_authorization.go +++ b/modules/apps/transfer/types/transfer_authorization.go @@ -2,14 +2,12 @@ package types import ( "context" - "math/big" "slices" "strings" "github.com/cosmos/gogoproto/proto" errorsmod "cosmossdk.io/errors" - sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/authz" @@ -25,9 +23,6 @@ const ( allocationNotFound = -1 ) -// maxUint256 is the maximum value for a 256 bit unsigned integer. -var maxUint256 = new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(1)) - // NewTransferAuthorization creates a new TransferAuthorization object. func NewTransferAuthorization(allocations ...Allocation) *TransferAuthorization { return &TransferAuthorization{ @@ -244,15 +239,6 @@ func validateMemo(ctx sdk.Context, memo string, allowedMemos []string) error { return nil } -// UnboundedSpendLimit returns the sentinel value that can be used -// as the amount for a denomination's spend limit for which spend limit updating -// should be disabled. Please note that using this sentinel value means that a grantee -// will be granted the privilege to do ICS20 token transfers for the total amount -// of the denomination available at the granter's account. -func UnboundedSpendLimit() sdkmath.Int { - return sdkmath.NewIntFromBigInt(maxUint256) -} - // getAllocationIndex ranges through a set of allocations, and returns the index of the allocation if found. If not, returns -1. func getAllocationIndex(msg MsgTransfer, allocations []Allocation) int { for index, allocation := range allocations { diff --git a/testing/chain.go b/testing/chain.go index d9aff925a42..cda9fe83b4c 100644 --- a/testing/chain.go +++ b/testing/chain.go @@ -45,6 +45,10 @@ type SenderAccount struct { SenderAccount sdk.AccountI } +const ( + DefaultGenesisAccBalance = "10000000000000000000" +) + // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI // header and the validators of the TestChain. It also contains a field called ChainID. This // is the clientID that *other* chains use to refer to this TestChain. The SenderAccount @@ -107,7 +111,7 @@ func NewTestChainWithValSet(tb testing.TB, coord *Coordinator, chainID string, v for i := 0; i < MaxAccounts; i++ { senderPrivKey := secp256k1.GenPrivKey() acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), uint64(i), 0) - amount, ok := sdkmath.NewIntFromString("10000000000000000000") + amount, ok := sdkmath.NewIntFromString(DefaultGenesisAccBalance) require.True(tb, ok) // add sender account From 241c8673ef687bb85290b4a6ff6a3ee15dee9b87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 21:12:58 +0300 Subject: [PATCH 20/78] chore(deps): bump bufbuild/buf-setup-action from 1.34.0 to 1.35.0 (#6922) Bumps [bufbuild/buf-setup-action](https://github.com/bufbuild/buf-setup-action) from 1.34.0 to 1.35.0. - [Release notes](https://github.com/bufbuild/buf-setup-action/releases) - [Commits](https://github.com/bufbuild/buf-setup-action/compare/v1.34.0...v1.35.0) --- updated-dependencies: - dependency-name: bufbuild/buf-setup-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/proto-registry.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/proto-registry.yml b/.github/workflows/proto-registry.yml index d00ba181de0..4666173537b 100644 --- a/.github/workflows/proto-registry.yml +++ b/.github/workflows/proto-registry.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: bufbuild/buf-setup-action@v1.34.0 + - uses: bufbuild/buf-setup-action@v1.35.0 - uses: bufbuild/buf-push-action@v1 with: input: "proto" From f11ac7a9d4fbb0b29d2c21ca7ed89c6f8638ebf0 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Tue, 23 Jul 2024 22:14:43 +0200 Subject: [PATCH 21/78] chore: mergify for v7.7.x and v8.4.x (#6917) --- .github/mergify.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/mergify.yml b/.github/mergify.yml index cbc0334007f..d0209883bd2 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -113,7 +113,15 @@ pull_request_rules: actions: backport: branches: - - release/v7.6.x + - release/v7.6.x + - name: backport patches to v7.7.x branch + conditions: + - base=main + - label=backport-to-v7.7.x + actions: + backport: + branches: + - release/v7.7.x - name: backport patches to v8.2.x branch conditions: - base=main @@ -130,6 +138,14 @@ pull_request_rules: backport: branches: - release/v8.3.x + - name: backport patches to v8.4.x branch + conditions: + - base=main + - label=backport-to-v8.4.x + actions: + backport: + branches: + - release/v8.4.x - name: backport patches to v9.0.x branch conditions: - base=main From 76743a93a946003554a71032263b4fddd904ea42 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Wed, 24 Jul 2024 11:44:00 +0200 Subject: [PATCH 22/78] fix(state!): check upgrade compatibility in channel upgrade confirm --- CHANGELOG.md | 1 + modules/core/04-channel/keeper/upgrade.go | 15 +++++++++++++ .../core/04-channel/keeper/upgrade_test.go | 21 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee56fa3031e..869e57f9f06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -87,6 +87,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes * (apps/27-interchain-accounts) [\#6377](https://github.com/cosmos/ibc-go/pull/6377) Generate ICA simtest proposals only for provided keepers. +* (core/04-channel) [\#6935](https://github.com/cosmos/ibc-go/pull/6935) Check upgrade compatibility in `ChanUpgradeConfirm`. ## [v8.3.2](https://github.com/cosmos/ibc-go/releases/tag/v8.3.2) - 2024-06-20 diff --git a/modules/core/04-channel/keeper/upgrade.go b/modules/core/04-channel/keeper/upgrade.go index 5c1848f223b..5ba7a02c0f9 100644 --- a/modules/core/04-channel/keeper/upgrade.go +++ b/modules/core/04-channel/keeper/upgrade.go @@ -446,6 +446,21 @@ func (k *Keeper) ChanUpgradeConfirm( return errorsmod.Wrap(err, "failed to verify counterparty upgrade") } + // if we have cancelled our upgrade after performing UpgradeInit + // or UpgradeTry, the lack of a stored upgrade will prevent us from + // continuing the upgrade handshake + upgrade, found := k.GetUpgrade(ctx, portID, channelID) + if !found { + return errorsmod.Wrapf(types.ErrUpgradeNotFound, "failed to retrieve channel upgrade: port ID (%s) channel ID (%s)", portID, channelID) + } + + // in the crossing-hello case it is possible that both chains execute the + // INIT, TRY and CONFIRM steps without any of them executing ACK, therefore + // we also need to check that the upgrades are compatible on this step + if err := k.checkForUpgradeCompatibility(ctx, upgrade.Fields, counterpartyUpgrade.Fields); err != nil { + return types.NewUpgradeError(channel.UpgradeSequence, err) + } + timeout := counterpartyUpgrade.Timeout selfHeight, selfTimestamp := clienttypes.GetSelfHeight(ctx), uint64(ctx.BlockTime().UnixNano()) diff --git a/modules/core/04-channel/keeper/upgrade_test.go b/modules/core/04-channel/keeper/upgrade_test.go index 0f75a7df868..9db9a43e0d8 100644 --- a/modules/core/04-channel/keeper/upgrade_test.go +++ b/modules/core/04-channel/keeper/upgrade_test.go @@ -1073,6 +1073,27 @@ func (suite *KeeperTestSuite) TestChanUpgradeConfirm() { }, types.NewUpgradeError(1, types.ErrTimeoutElapsed), }, + { + "upgrade not found", + func() { + path.EndpointB.Chain.DeleteKey(host.ChannelUpgradeKey(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID)) + }, + types.NewUpgradeError(1, types.ErrUpgradeNotFound), + }, + { + "upgrades are not compatible", + func() { + // the expected upgrade version is mock-version-v2 + counterpartyUpgrade.Fields.Version = fmt.Sprintf("%s-v3", mock.Version) + path.EndpointA.SetChannelUpgrade(counterpartyUpgrade) + + suite.coordinator.CommitBlock(suite.chainA) + + err := path.EndpointB.UpdateClient() + suite.Require().NoError(err) + }, + types.NewUpgradeError(1, types.ErrIncompatibleCounterpartyUpgrade), + }, } for _, tc := range testCases { From 5836f039096df91abccad1ecef35af5cd402e49c Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Wed, 24 Jul 2024 11:44:34 +0200 Subject: [PATCH 23/78] Revert "fix(state!): check upgrade compatibility in channel upgrade confirm" This reverts commit 76743a93a946003554a71032263b4fddd904ea42. --- CHANGELOG.md | 1 - modules/core/04-channel/keeper/upgrade.go | 15 ------------- .../core/04-channel/keeper/upgrade_test.go | 21 ------------------- 3 files changed, 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 869e57f9f06..ee56fa3031e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -87,7 +87,6 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes * (apps/27-interchain-accounts) [\#6377](https://github.com/cosmos/ibc-go/pull/6377) Generate ICA simtest proposals only for provided keepers. -* (core/04-channel) [\#6935](https://github.com/cosmos/ibc-go/pull/6935) Check upgrade compatibility in `ChanUpgradeConfirm`. ## [v8.3.2](https://github.com/cosmos/ibc-go/releases/tag/v8.3.2) - 2024-06-20 diff --git a/modules/core/04-channel/keeper/upgrade.go b/modules/core/04-channel/keeper/upgrade.go index 5ba7a02c0f9..5c1848f223b 100644 --- a/modules/core/04-channel/keeper/upgrade.go +++ b/modules/core/04-channel/keeper/upgrade.go @@ -446,21 +446,6 @@ func (k *Keeper) ChanUpgradeConfirm( return errorsmod.Wrap(err, "failed to verify counterparty upgrade") } - // if we have cancelled our upgrade after performing UpgradeInit - // or UpgradeTry, the lack of a stored upgrade will prevent us from - // continuing the upgrade handshake - upgrade, found := k.GetUpgrade(ctx, portID, channelID) - if !found { - return errorsmod.Wrapf(types.ErrUpgradeNotFound, "failed to retrieve channel upgrade: port ID (%s) channel ID (%s)", portID, channelID) - } - - // in the crossing-hello case it is possible that both chains execute the - // INIT, TRY and CONFIRM steps without any of them executing ACK, therefore - // we also need to check that the upgrades are compatible on this step - if err := k.checkForUpgradeCompatibility(ctx, upgrade.Fields, counterpartyUpgrade.Fields); err != nil { - return types.NewUpgradeError(channel.UpgradeSequence, err) - } - timeout := counterpartyUpgrade.Timeout selfHeight, selfTimestamp := clienttypes.GetSelfHeight(ctx), uint64(ctx.BlockTime().UnixNano()) diff --git a/modules/core/04-channel/keeper/upgrade_test.go b/modules/core/04-channel/keeper/upgrade_test.go index 9db9a43e0d8..0f75a7df868 100644 --- a/modules/core/04-channel/keeper/upgrade_test.go +++ b/modules/core/04-channel/keeper/upgrade_test.go @@ -1073,27 +1073,6 @@ func (suite *KeeperTestSuite) TestChanUpgradeConfirm() { }, types.NewUpgradeError(1, types.ErrTimeoutElapsed), }, - { - "upgrade not found", - func() { - path.EndpointB.Chain.DeleteKey(host.ChannelUpgradeKey(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID)) - }, - types.NewUpgradeError(1, types.ErrUpgradeNotFound), - }, - { - "upgrades are not compatible", - func() { - // the expected upgrade version is mock-version-v2 - counterpartyUpgrade.Fields.Version = fmt.Sprintf("%s-v3", mock.Version) - path.EndpointA.SetChannelUpgrade(counterpartyUpgrade) - - suite.coordinator.CommitBlock(suite.chainA) - - err := path.EndpointB.UpdateClient() - suite.Require().NoError(err) - }, - types.NewUpgradeError(1, types.ErrIncompatibleCounterpartyUpgrade), - }, } for _, tc := range testCases { From fe42ec6fb184b3d1d68ce1fa20787c2832987c45 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Wed, 24 Jul 2024 11:48:45 +0200 Subject: [PATCH 24/78] nit: rename arguments for clarity (#6932) --- modules/apps/transfer/keeper/forwarding.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/apps/transfer/keeper/forwarding.go b/modules/apps/transfer/keeper/forwarding.go index 642c94548c8..d4c2fb57168 100644 --- a/modules/apps/transfer/keeper/forwarding.go +++ b/modules/apps/transfer/keeper/forwarding.go @@ -44,18 +44,18 @@ func (k Keeper) forwardPacket(ctx sdk.Context, data types.FungibleTokenPacketDat return nil } -// acknowledgeForwardedPacket writes the async acknowledgement for packet -func (k Keeper) acknowledgeForwardedPacket(ctx sdk.Context, packet, forwardedPacket channeltypes.Packet, ack channeltypes.Acknowledgement) error { - capability, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(packet.DestinationPort, packet.DestinationChannel)) +// acknowledgeForwardedPacket writes the async acknowledgement for forwardedPacket +func (k Keeper) acknowledgeForwardedPacket(ctx sdk.Context, forwardedPacket, packet channeltypes.Packet, ack channeltypes.Acknowledgement) error { + capability, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(forwardedPacket.DestinationPort, forwardedPacket.DestinationChannel)) if !ok { return errorsmod.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") } - if err := k.ics4Wrapper.WriteAcknowledgement(ctx, capability, packet, ack); err != nil { + if err := k.ics4Wrapper.WriteAcknowledgement(ctx, capability, forwardedPacket, ack); err != nil { return err } - k.deleteForwardedPacket(ctx, forwardedPacket.SourcePort, forwardedPacket.SourceChannel, forwardedPacket.Sequence) + k.deleteForwardedPacket(ctx, packet.SourcePort, packet.SourceChannel, packet.Sequence) return nil } From 253e42512d36a1cfb68e0ec2539c3546e64cd2a6 Mon Sep 17 00:00:00 2001 From: Nikolas De Giorgis Date: Wed, 24 Jul 2024 11:59:29 +0100 Subject: [PATCH 25/78] chore(api!): Replace GetRouter with AddRoute in 02-client keeper. (#6934) * chore(api!): Replace GetRouter with AddRoute in 02-client keeper. * Update CHANGELOG.md * Update CHANGELOG.md * Docstring, removed changelog * Update CHANGELOG.md * Update CHANGELOG.md --- docs/docs/01-ibc/02-integration.md | 3 +-- docs/docs/03-light-clients/04-wasm/03-integration.md | 3 +-- modules/apps/callbacks/testing/simapp/app.go | 6 +++--- modules/core/02-client/keeper/keeper.go | 6 +++--- modules/light-clients/08-wasm/testing/simapp/app.go | 8 ++++---- simapp/app.go | 8 ++++---- testing/simapp/app.go | 6 +++--- 7 files changed, 19 insertions(+), 21 deletions(-) diff --git a/docs/docs/01-ibc/02-integration.md b/docs/docs/01-ibc/02-integration.md index cb31b9a0805..9d6142a7e6c 100644 --- a/docs/docs/01-ibc/02-integration.md +++ b/docs/docs/01-ibc/02-integration.md @@ -246,11 +246,10 @@ import ( // app.go // after sealing the IBC router -clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) -clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) +app.IBCKeeper.ClientKeeper.AddRoute(ibctm.ModuleName, &tmLightClientModule) app.ModuleManager = module.NewManager( // ... capability.NewAppModule(appCodec, *app.CapabilityKeeper, false), diff --git a/docs/docs/03-light-clients/04-wasm/03-integration.md b/docs/docs/03-light-clients/04-wasm/03-integration.md index fac273541a7..269a80b1a5a 100644 --- a/docs/docs/03-light-clients/04-wasm/03-integration.md +++ b/docs/docs/03-light-clients/04-wasm/03-integration.md @@ -89,9 +89,8 @@ func NewSimApp( app.GRPCQueryRouter(), ) - clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() wasmLightClientModule := wasm.NewLightClientModule(app.WasmClientKeeper) - clientRouter.AddRoute(ibcwasmtypes.ModuleName, &wasmLightClientModule) + app.IBCKeeper.ClientKeeper.AddRoute(ibcwasmtypes.ModuleName, &wasmLightClientModule) app.ModuleManager = module.NewManager( // SDK app modules diff --git a/modules/apps/callbacks/testing/simapp/app.go b/modules/apps/callbacks/testing/simapp/app.go index 3def147154f..9a89526745e 100644 --- a/modules/apps/callbacks/testing/simapp/app.go +++ b/modules/apps/callbacks/testing/simapp/app.go @@ -568,14 +568,14 @@ func NewSimApp( // Seal the IBC Router app.IBCKeeper.SetRouter(ibcRouter) - clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() + clientKeeper := app.IBCKeeper.ClientKeeper storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) - clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) + clientKeeper.AddRoute(ibctm.ModuleName, &tmLightClientModule) smLightClientModule := solomachine.NewLightClientModule(appCodec, storeProvider) - clientRouter.AddRoute(solomachine.ModuleName, &smLightClientModule) + clientKeeper.AddRoute(solomachine.ModuleName, &smLightClientModule) // create evidence keeper with router evidenceKeeper := evidencekeeper.NewKeeper( diff --git a/modules/core/02-client/keeper/keeper.go b/modules/core/02-client/keeper/keeper.go index d3ee8ca4864..02bc0e9e18f 100644 --- a/modules/core/02-client/keeper/keeper.go +++ b/modules/core/02-client/keeper/keeper.go @@ -58,9 +58,9 @@ func (Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", "x/"+exported.ModuleName+"/"+types.SubModuleName) } -// GetRouter returns the light client module router. -func (k *Keeper) GetRouter() *types.Router { - return k.router +// AddRoute adds a new route to the underlying router. +func (k *Keeper) AddRoute(clientType string, module exported.LightClientModule) { + k.router.AddRoute(clientType, module) } // GetStoreProvider returns the light client store provider. diff --git a/modules/light-clients/08-wasm/testing/simapp/app.go b/modules/light-clients/08-wasm/testing/simapp/app.go index db2b6c69927..801b35a9ecc 100644 --- a/modules/light-clients/08-wasm/testing/simapp/app.go +++ b/modules/light-clients/08-wasm/testing/simapp/app.go @@ -593,17 +593,17 @@ func NewSimApp( // Seal the IBC Router app.IBCKeeper.SetRouter(ibcRouter) - clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() + clientKeeper := app.IBCKeeper.ClientKeeper storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) - clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) + clientKeeper.AddRoute(ibctm.ModuleName, &tmLightClientModule) smLightClientModule := solomachine.NewLightClientModule(appCodec, storeProvider) - clientRouter.AddRoute(solomachine.ModuleName, &smLightClientModule) + clientKeeper.AddRoute(solomachine.ModuleName, &smLightClientModule) wasmLightClientModule := wasm.NewLightClientModule(app.WasmClientKeeper, storeProvider) - clientRouter.AddRoute(wasmtypes.ModuleName, &wasmLightClientModule) + clientKeeper.AddRoute(wasmtypes.ModuleName, &wasmLightClientModule) // create evidence keeper with router evidenceKeeper := evidencekeeper.NewKeeper( diff --git a/simapp/app.go b/simapp/app.go index 821177ed9cf..89cf28c63b8 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -551,14 +551,14 @@ func NewSimApp( // Seal the IBC Router app.IBCKeeper.SetRouter(ibcRouter) - clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() - storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() + clientKeeper := app.IBCKeeper.ClientKeeper + storeProvider := clientKeeper.GetStoreProvider() tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) - clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) + clientKeeper.AddRoute(ibctm.ModuleName, &tmLightClientModule) smLightClientModule := solomachine.NewLightClientModule(appCodec, storeProvider) - clientRouter.AddRoute(solomachine.ModuleName, &smLightClientModule) + clientKeeper.AddRoute(solomachine.ModuleName, &smLightClientModule) // create evidence keeper with router evidenceKeeper := evidencekeeper.NewKeeper( diff --git a/testing/simapp/app.go b/testing/simapp/app.go index f018d3e70f6..dca117000b3 100644 --- a/testing/simapp/app.go +++ b/testing/simapp/app.go @@ -514,14 +514,14 @@ func NewSimApp( // Seal the IBC Router app.IBCKeeper.SetRouter(ibcRouter) - clientRouter := app.IBCKeeper.ClientKeeper.GetRouter() + clientKeeper := app.IBCKeeper.ClientKeeper storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() tmLightClientModule := ibctm.NewLightClientModule(appCodec, storeProvider) - clientRouter.AddRoute(ibctm.ModuleName, &tmLightClientModule) + clientKeeper.AddRoute(ibctm.ModuleName, &tmLightClientModule) smLightClientModule := solomachine.NewLightClientModule(appCodec, storeProvider) - clientRouter.AddRoute(solomachine.ModuleName, &smLightClientModule) + clientKeeper.AddRoute(solomachine.ModuleName, &smLightClientModule) // **** Module Options **** From 844024534944786f4f6bfc3739f10a1c0b7629ea Mon Sep 17 00:00:00 2001 From: Nikolas De Giorgis Date: Wed, 24 Jul 2024 16:14:00 +0100 Subject: [PATCH 26/78] (chore) disallow unknown fields29 fee ack (#6933) * (chore): disallow unknown fields in 29-fee ack * Fixed comment * Fix docstring * Use json.Unmarshal rather than direct call * Wrap the error in ibcerrors.ErrInvalidType * Use json.Unmarshal in tests --- modules/apps/29-fee/ibc_middleware.go | 6 ++-- modules/apps/29-fee/ibc_middleware_test.go | 32 ++++++++++++++++++++++ modules/apps/29-fee/types/encoding.go | 26 ++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 modules/apps/29-fee/types/encoding.go diff --git a/modules/apps/29-fee/ibc_middleware.go b/modules/apps/29-fee/ibc_middleware.go index 5239754e6dc..8869342d02e 100644 --- a/modules/apps/29-fee/ibc_middleware.go +++ b/modules/apps/29-fee/ibc_middleware.go @@ -1,6 +1,7 @@ package fee import ( + "encoding/json" "strings" errorsmod "cosmossdk.io/errors" @@ -13,6 +14,7 @@ import ( clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v9/modules/core/05-port/types" + ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" "github.com/cosmos/ibc-go/v9/modules/core/exported" ) @@ -250,8 +252,8 @@ func (im IBCMiddleware) OnAcknowledgementPacket( } var ack types.IncentivizedAcknowledgement - if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { - return errorsmod.Wrapf(err, "cannot unmarshal ICS-29 incentivized packet acknowledgement: %v", ack) + if err := json.Unmarshal(acknowledgement, &ack); err != nil { + return errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS-29 incentivized packet acknowledgement %v: %s", ack, err) } if im.keeper.IsLocked(ctx) { diff --git a/modules/apps/29-fee/ibc_middleware_test.go b/modules/apps/29-fee/ibc_middleware_test.go index 4bf51bb56b2..f73d66235d6 100644 --- a/modules/apps/29-fee/ibc_middleware_test.go +++ b/modules/apps/29-fee/ibc_middleware_test.go @@ -1,6 +1,7 @@ package fee_test import ( + "encoding/json" "fmt" errorsmod "cosmossdk.io/errors" @@ -1592,3 +1593,34 @@ func (suite *FeeTestSuite) TestPacketDataUnmarshalerInterfaceError() { expError := errorsmod.Wrapf(types.ErrUnsupportedAction, "underlying app does not implement %T", (*porttypes.PacketDataUnmarshaler)(nil)) suite.Require().ErrorIs(err, expError) } + +func (suite *FeeTestSuite) TestAckUnmarshal() { + testCases := []struct { + name string + ackBytes []byte + expPass bool + }{ + { + "success", + []byte(`{"app_acknowledgement": "eyJyZXN1bHQiOiJiVzlqYXlCaFkydHViM2RzWldsblpXMWxiblE9In0=", "forward_relayer_address": "relayer", "underlying_app_success": true}`), + true, + }, + { + "failure: unknown fields", + []byte(`{"app_acknowledgement": "eyJyZXN1bHQiOiJiVzlqYXlCaFkydHViM2RzWldsblpXMWxiblE9In0=", "forward_relayer_address": "relayer", "underlying_app_success": true, "extra_field": "foo"}`), + false, + }, + } + for _, tc := range testCases { + suite.Run(tc.name, func() { + ack := &types.IncentivizedAcknowledgement{} + err := json.Unmarshal(tc.ackBytes, ack) + + if tc.expPass { + suite.Require().NoError(err) + } else { + suite.Require().Error(err) + } + }) + } +} diff --git a/modules/apps/29-fee/types/encoding.go b/modules/apps/29-fee/types/encoding.go new file mode 100644 index 00000000000..7bf5b8a5f3b --- /dev/null +++ b/modules/apps/29-fee/types/encoding.go @@ -0,0 +1,26 @@ +package types + +import ( + "bytes" + "encoding/json" +) + +// UnmarshalJSON implements the Unmarshaller interface for IncentivizedAcknowledgement. +func (ack *IncentivizedAcknowledgement) UnmarshalJSON(bz []byte) error { + // Recursion protection. We cannot unmarshal into IncentivizedAcknowledgment directly + // else UnmarshalJSON is going to get invoked again, ad infinum. Create an alias + // and unmarshal into that, instead. + type ackAlias IncentivizedAcknowledgement + + d := json.NewDecoder(bytes.NewReader(bz)) + // Raise errors during decoding if unknown fields are encountered. + d.DisallowUnknownFields() + + var alias ackAlias + if err := d.Decode(&alias); err != nil { + return err + } + + *ack = IncentivizedAcknowledgement(alias) + return nil +} From 428118e2e622983c6fefc234be9c357edf867dc6 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Thu, 25 Jul 2024 09:09:30 +0200 Subject: [PATCH 27/78] docs: polishing and adding more API breaking changes to changelog and v9 migration (#6925) * docs: polishing and adding more API breaking changes to changelog and migration * lint * add links to MerklePath types * Apply suggestions from code review Co-authored-by: DimitrisJim * add snippet for UnmarshalPacketData --------- Co-authored-by: DimitrisJim --- CHANGELOG.md | 7 + docs/docs/05-migrations/13-v8-to-v9.md | 232 +++++++++++++++++-------- 2 files changed, 167 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee56fa3031e..90e91dd3039 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,9 +45,16 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking +* (apps/27-interchain-accounts) [\#4977](https://github.com/cosmos/ibc-go/pull/4977) The `InitModule` function has been removed. +* (core/02-client) [\#5110](https://github.com/cosmos/ibc-go/pull/5110) The `header` attribute has been removed from the `update_client` event. +* (apps/27-interchain-accounts) [\#5396](https://github.com/cosmos/ibc-go/pull/5396) Remove `GetBytes` function of `CosmosTx` type. +* (core/04-channel) [\#5691](https://github.com/cosmos/ibc-go/pull/5691) Remove functions `IsOpen` and `IsClosed` of `Channel` type. +* (core/04-channel) [\#5705](https://github.com/cosmos/ibc-go/pull/5705) Remove functions `GetState`, `GetOrdering`, `GetCounterparty`, `GetConnectionHops`, `GetVersion` of the `Channel` type. +* (core/04-channel) [\#5603](https://github.com/cosmos/ibc-go/pull/5603) Rename attribute names and constants for channel upgrades events. * (core/02-client, light-clients) [\#5806](https://github.com/cosmos/ibc-go/pull/5806) Decouple light client routing from their encoding structure. * (core/04-channel) [\#5991](https://github.com/cosmos/ibc-go/pull/5991) The client CLI `QueryLatestConsensusState` has been removed. * (light-clients/06-solomachine) [\#6037](https://github.com/cosmos/ibc-go/pull/6037) Remove `Initialize` function from `ClientState` and move logic to `Initialize` function of `LightClientModule`. +- (core/04-channel) [\#6063](https://github.com/cosmos/ibc-go/pull/6063) Remove attributes `version`, `ordering` and `connection_hops` from the `channel_upgrade_init`, `channel_upgrade_try`, `channel_upgrade_ack`, `channel_upgrade_open`, `channel_upgrade_timeout` and `channel_upgrade_cancelled` events. * (light-clients/06-solomachine) [\#6230](https://github.com/cosmos/ibc-go/pull/6230) Remove `GetTimestampAtHeight`, `Status` and `UpdateStateOnMisbehaviour` functions from `ClientState` and move logic to functions of `LightClientModule`. * (core/02-client) [\#6084](https://github.com/cosmos/ibc-go/pull/6084) Removed `stakingKeeper` as an argument to `NewKeeper` and replaced with a `ConsensusHost` implementation. * (testing) [\#6070](https://github.com/cosmos/ibc-go/pull/6070) Remove `AssertEventsLegacy` function. diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index ff42acaf175..73013c092bf 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -11,29 +11,127 @@ This guide provides instructions for migrating to a new version of ibc-go. There are four sections based on the four potential user groups of this document: -- [Chains](#chains) -- [IBC Apps](#ibc-apps) -- [Relayers](#relayers) -- [IBC Light Clients](#ibc-light-clients) +- [Migrating from v8 to v9](#migrating-from-v8-to-v9) + - [Chains](#chains) + - [IBC core](#ibc-core) + - [API removals](#api-removals) + - [02-client](#02-client) + - [03-connection](#03-connection) + - [04-channel](#04-channel) + - [05-port](#05-port) + - [23-commitment](#23-commitment) + - [IBC Apps](#ibc-apps) + - [ICS20 - Transfer](#ics20---transfer) + - [ICS20 v2](#ics20-v2) + - [`DenomTrace` type refactoring](#denomtrace-type-refactoring) + - [ICS27 - Interchain Accounts](#ics27---interchain-accounts) + - [IBC testing package](#ibc-testing-package) + - [API deprecation notice](#api-deprecation-notice) + - [Relayers](#relayers) + - [Events](#events) + - [02-client](#02-client-1) + - [04-channel](#04-channel-1) + - [Channel upgrades](#channel-upgrades) + - [IBC Light Clients](#ibc-light-clients) + - [API removals](#api-removals-1) + - [06-solomachine](#06-solomachine) + - [07-tendermint](#07-tendermint) + - [08-wasm](#08-wasm) + - [09-localhost](#09-localhost) **Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated on major version releases. ## Chains -Chains will need to remove the route for the legacy proposal handler for `02-client` from their `app/app.go`: +Chains will need to remove the route for the legacy proposal handler for 02-client from their `app/app.go`: ```diff // app.go govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). -- AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). -- AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)) -+ AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)) +- AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). +- AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)) ++ AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)) ``` +## IBC core + +### API removals + +- The [`exported.ChannelI`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/channel.go#L3-L11) and [`exported.CounterpartyChannelI`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/channel.go#L13-L19) interfaces have been removed. Please use the concrete types. +- The [`exported.ConnectionI`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/connection.go#L6-L13) and [`exported.CounterpartyConnectionI`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/connection.go#L15-L21) interfaces have been removed. Please use the concrete types. +- The [`Router` reference](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/keeper/keeper.go#L35) has been removed from the IBC core keeper in [#6138](https://github.com/cosmos/ibc-go/pull/6138). Please use `PortKeeper.Router` instead. +- The [composite interface `QueryServer`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/types/query.go#L14-L19) has been removed from package `core/types`. Please use the granular `QueryServer` interfaces for IBC submodules directly. +- The [`TypeClientMisbehaviour` constant](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/client.go#L17) has been removed. + +### 02-client + +- The `QueryVerifyMembershipRequest` protobuf message has been modified to include `commitment.v2.MerklePath`. The deprecated `commitment.v1.MerklePath` field has been `reserved`. [See 23-commitment](#23-commitment). +- The function [`CreateLocalhostClient`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/02-client/keeper/keeper.go#L56) has been removed. The localhost client is now stateless. +- The function [`NewClientProposalHandler`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/02-client/proposal_handler.go#L18) has been removed in [#6777](https://github.com/cosmos/ibc-go/pull/6777). +- The deprecated [`ClientUpdateProposal` and `UpgradeProposal` messages](https://github.com/cosmos/ibc-go/blob/v8.0.0/proto/ibc/core/client/v1/client.proto#L67-L113) have been removed in [\#6782](https://github.com/cosmos/ibc-go/pull/6782). Please use [`MsgRecoverClient`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/proto/ibc/core/client/v1/tx.proto#L125-L138) and [`MsgIBCSoftwareUpgrade`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/proto/ibc/core/client/v1/tx.proto#L143-L158) respectively instead. + +### 03-connection + +- The [functions `GetState()`, `GetClientID()`, `GetCounterparty()`, `GetVersions()`, and `GetDelayPeriod()`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/03-connection/types/connection.go#L25-L48) of the `Connection` type have been removed. +- The [functions `GetClientID()`, `GetConnectionID()`, and `GetPrefix()`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/03-connection/types/connection.go#L79-L92) of the `Counterparty` type have been removed. + +### 04-channel + +- The utility function [`QueryLatestConsensusState`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/04-channel/client/utils/utils.go#L130) of the CLI has been removed. +- The [functions `GetState()`, `GetOrdering()`, `GetCounterparty()`, `GetConnectionHops()`, `GetVersion()`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/04-channel/types/channel.go#L29-L52) of the `Channel` type have been removed. +- The [functions `IsOpen()` and `IsClosed()`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/04-channel/types/channel.go#L54-L62) of the `Channel` type have been removed. +- The [functions `GetPortID()`, `GetChannelID()`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/04-channel/types/channel.go#L92-L100) of the `CounterpartyChannel` type have been removed. +- Functions [`ChanCloseConfirmWithCounterpartyUpgradeSequence`](https://github.com/cosmos/ibc-go/blob/v8.1.0/modules/core/04-channel/keeper/handshake.go#L446) and [`TimeoutOnCloseWithCounterpartyUpgradeSequence`](https://github.com/cosmos/ibc-go/blob/v8.1.0/modules/core/04-channel/keeper/timeout.go#L226) have been removed. Please use `ChanCloseConfirm` and `TimeoutOnClose` with the updated signature that takes the counterparty upgrade sequence as extra argument: + +```diff +func (k *Keeper) ChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + initProof []byte, + proofHeight exported.Height, ++ counterpartyUpgradeSequence uint64, +) + +func (k *Keeper) TimeoutOnClose( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet types.Packet, + proof, + closedProof []byte, + proofHeight exported.Height, + nextSequenceRecv uint64, ++ counterpartyUpgradeSequence uint64, +) +``` + +### 05-port + +- The signature of the `UnmarshalPacketData` function of the `PacketDataUnmarshaler` interface takes now extra arguments for the context and the port and channel identifiers. These parameters have been added so that implementations of the interface function can retrieve the channel version, which allows the provided packet data to be unmarshaled based on the channel version: + +```diff +type PacketDataUnmarshaler interface { + UnmarshalPacketData( ++ ctx sdk.Context, ++ portID, ++ channelID string, + bz []byte, + ) (interface{}, error) +} +``` + +### 23-commitment + +- The [`exported.Proof`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/commitment.go#L34-L44) interface has been removed. Please use the [`MerkleProof`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/23-commitment/types/commitment.pb.go#L161-L168) concrete type. +- The [`MerklePath` type](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/23-commitment/types/commitment.pb.go#L113-L119) has been deprecated and a new [`commitment.v2.MerklePath` type](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/23-commitment/types/v2/commitment.pb.go#L25-L30) has been introduced in [#6644](https://github.com/cosmos/ibc-go/pull/6644). The new `commitment.v2.MerklePath` contains `repeated bytes` in favour of `repeated string`. This allows users to prove values stored under keys which contain non-utf8 encoded symbols. As a result, changes have been made to the 02-client `Query` service and 08-wasm contract API messages for JSON blobs. See [02-client](#02-client) and [08-wasm](#08-wasm), respectively. + ## IBC Apps ### ICS20 - Transfer +#### ICS20 v2 + - With support for multidenom transfer packets and path forwarding, the `NewMsgTransfer` constructor function to create a new `MsgTransfer` instance now accepts multiple coins instead of just one, and an argument with forwarding information: ```diff @@ -48,22 +146,30 @@ func NewMsgTransfer( ) ``` -- The `ibc_transfer` and `fungible_token_packet` events do not include the attributes `denom` and `amount` anymore; instead they include the attribute `tokens` with the list of coins transferred in the packet. -- The helper function [`GetTransferCoin`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L46) has been removed. -- The helper function [`GetDenomPrefix`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L35) has been removed. -- The helper function [`GetPrefixedDenom`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L40) has been removed. Please construct the denom using the new [`Denom` type](https://github.com/cosmos/ibc-go/blob/7068760f7277cab75b760a0d6ca95ccbfe2f78ae/modules/apps/transfer/types/token.pb.go#L82). +- The `ibc_transfer` and `fungible_token_packet` events do not include the attributes `denom` and `amount` anymore; instead they include the attribute `tokens` with the list of coins transferred in the packet. +- A new type for the packet payload has been introduced: [`FungibleTokenPacketDataV2`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/proto/ibc/applications/transfer/v2/packet.proto#L27-L41). Transfer channels with version `ics20-2` will use this new type for the payload and it will be encoded using Protobuf (instead of JSON). Middleware that wraps the transfer application and unmarshals the packet data MUST take this into account when upgrading: depending on the channel version, packet data should unmarshal either as JSON (v1) or Protobuf (v2). The helper function [`UnmarshalPacketData`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/apps/transfer/types/packet.go#L212) encapsulates this logic and can be used by middleware or other applications to correctly unmarshal the packet data: -#### `DenomTrace` type +```go +packetData, err := transfertypes.UnmarshalPacketData(packet.Data, version) +if err != nil { + return err +} +``` + +#### `DenomTrace` type refactoring -- The [`DenomTrace`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/transfer.pb.go#L25-L33) type has been made private and will be completely removed in a later release. -- The [`DenomTrace` and `DenomTraces` gRPCs](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/keeper/grpc_query.go#L22-L75) have therefore been removed as well. Please use the [`Denom` type](https://github.com/cosmos/ibc-go/blob/14fedae884e541779eefd01fc4aab5fe194856bc/modules/apps/transfer/types/token.pb.go#L81-L87) instead, and the [`Denom` and `Denoms` gRPCs](https://github.com/cosmos/ibc-go/blob/14fedae884e541779eefd01fc4aab5fe194856bc/modules/apps/transfer/keeper/grpc_query.go#L27-L80). -- An [automatic migration handler](https://github.com/cosmos/ibc-go/blob/14fedae884e541779eefd01fc4aab5fe194856bc/modules/apps/transfer/keeper/migrations.go#L75-L113) is also configured to migrate the storage from using `DenomTrace` to `Denom`. -- The [`denomination_trace` event emitted in the `OnRecvPacket` callback](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/keeper/relay.go#L268-L274) has been replaced with the [`denom` event](https://github.com/cosmos/ibc-go/blob/18121380dec5cff5ec803f1088fd409e069c2c9e/modules/apps/transfer/keeper/relay.go#L247). +- The [`DenomTrace`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/transfer.pb.go#L25-L33) type has been made private and will be completely removed in a later release. Please use the [`Denom` type](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/apps/transfer/types/token.pb.go#L81-L87) instead. +- The [`DenomTrace` and `DenomTraces` gRPCs](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/keeper/grpc_query.go#L22-L75) have been removed as well (together with the and `QueryDenomTraceResponse` and `QueryDenomTracesResponse` types). Please use the [`Denom` and `Denoms` gRPCs](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/apps/transfer/keeper/grpc_query.go#L27-L80) instead. +- An [automatic migration handler](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/apps/transfer/keeper/migrations.go#L75-L113) is also configured to migrate the storage from using `DenomTrace` to `Denom`. +- The [`denomination_trace` event emitted in the `OnRecvPacket` callback](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/keeper/relay.go#L268-L274) has been replaced with the [`denom` event](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/apps/transfer/keeper/relay.go#L230). - The functions [`SenderChainIsSource` and `ReceiverChainIsSource`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L12-L32) have been replaced with the function `HasPrefix` of the newly added `Denom` type. +- The helper function [`GetTransferCoin`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L46) has been removed. +- The helper function [`GetDenomPrefix`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L35) has been removed. +- The helper function [`GetPrefixedDenom`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/transfer/types/coin.go#L40) has been removed. Please construct the denom using the new [`Denom` type](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/apps/transfer/types/token.pb.go#L82). ### ICS27 - Interchain Accounts -In [#5785](https://github.com/cosmos/ibc-go/pull/5785) the list of arguments of the `NewKeeper` constructor function of the host submodule was extended with an extra argument for the gRPC query router that the submodule uses when executing a [`MsgModuleQuerySafe`](https://github.com/cosmos/ibc-go/blob/eecfa5c09a4c38a5c9f2cc2a322d2286f45911da/proto/ibc/applications/interchain_accounts/host/v1/tx.proto#L41-L51) to perform queries that are module safe: +- In [#5785](https://github.com/cosmos/ibc-go/pull/5785) the list of arguments of the `NewKeeper` constructor function of the host submodule was extended with an extra argument for the gRPC query router that the submodule uses when executing a [`MsgModuleQuerySafe`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/proto/ibc/applications/interchain_accounts/host/v1/tx.proto#L40-L51) to perform queries that are module safe: ```diff func NewKeeper( @@ -76,7 +182,7 @@ func NewKeeper( ) Keeper ``` -The legacy function `RegisterInterchainAccount` now takes an extra parameter to specify the ordering of new ICA channels: +- The function [`RegisterInterchainAccountWithOrdering`](https://github.com/cosmos/ibc-go/blob/v8.3.0/modules/apps/27-interchain-accounts/controller/keeper/account.go#L68) has been removed. The legacy function `RegisterInterchainAccount` now takes an extra parameter to specify the ordering of new ICA channels: ```diff func (k Keeper) RegisterInterchainAccount( @@ -87,7 +193,7 @@ func (k Keeper) RegisterInterchainAccount( ) error { ``` -The `requests` repeated field of `MsgModuleQuerySafe` has been marked non-nullable, and therefore the signature of the constructor function `NewMsgModuleQuerySafe` has been updated: +- The `requests` repeated field of `MsgModuleQuerySafe` has been marked non-nullable, and therefore the signature of the constructor function `NewMsgModuleQuerySafe` has been updated: ```diff func NewMsgModuleQuerySafe( @@ -97,7 +203,7 @@ func NewMsgModuleQuerySafe( ) *MsgModuleQuerySafe { ``` -The signature of the [`NewIBCMiddleware` constructor function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/27-interchain-accounts/controller/ibc_middleware.go#L35) in the controller submodule now only takes the controller keeper as an argument: +- The signature of the [`NewIBCMiddleware` constructor function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/27-interchain-accounts/controller/ibc_middleware.go#L35) in the controller submodule now only takes the controller keeper as an argument. The base application is then set by default to nil and thus authentication is assumed to be done by a Cosmos SDK module, such as the `x/gov`, `x/group` or `x/auth`, that sends messages to the controller submodule's message server. An authentication module can be set using the newly added [`NewIBCMiddlewareWithAuth` constructor function](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/apps/27-interchain-accounts/controller/ibc_middleware.go#L46). ```diff func NewIBCMiddleware( @@ -106,41 +212,15 @@ func NewIBCMiddleware( ) IBCMiddleware { ``` -The base application is then set by default to nil and thus authentication is assumed to be done by a Cosmos SDK module, such as the `x/gov`, `x/group` or `x/auth`, that sends messages to the controller submodule's message server. An authentication module can be set using the newly added [`NewIBCMiddlewareWithAuth` constructor function](https://github.com/cosmos/ibc-go/blob/82b5fb668b6f1c918023fb7be72a8606d2329d81/modules/apps/27-interchain-accounts/controller/ibc_middleware.go#L46). - -### IBC core - -### API removals - -- The `exported.ChannelI` and `exported.CounterpartyChannelI` interfaces have been removed. Please use the concrete types. -- The `exported.ConnectionI` and `exported.CounterpartyConnectionI` interfaces have been removed. Please use the concrete types. -- The `exported.Proof` interface has been removed. Please use the `MerkleProof` concrete type. -- The functions `GetState()`, `GetOrdering()`, `GetCounterparty()`, `GetConnectionHops()`, `GetVersion()` of the `Channel` type have been removed. -- The functions `GetPortID()`, `GetChannelID()` of the `CounterpartyChannel` type have been removed. -- The functions `GetClientID()`, `GetState()`, `GetCounterparty()`, `GetVersions()`, and `GetDelayPeriod` of the `Connection` type have been removed. -- The functions `GetClientID()`, `GetConnectionID()`, and `GetPrefix()` of the `CounterpartyConnection` type have been removed. -- The utility function `QueryLatestConsensusState` of `04-channel` CLI has been removed. -- `UnmarshalPacketData` now takes in the context, portID, and channelID. This allows the packet data to be unmarshaled based on the channel version. -- `Router` reference has been removed from IBC core keeper: [#6138](https://github.com/cosmos/ibc-go/pull/6138). Please use `PortKeeper.Router` instead. -- The function `CreateLocalhostClient` has been removed. The localhost client is now stateless. -- The function `NewClientProposalHandler` has been removed. [#6777](https://github.com/cosmos/ibc-go/pull/6777). -- The composite interface `QueryServer` has been removed from package `core/types`. Please use the granular `QueryServer` interfaces for ibc submodules directly. -- The `TypeClientMisbehaviour` constant has been removed. - -### 02-client - -- The `QueryVerifyMembershipRequest` protobuf message has been modified to include `commitment.v2.MerklePath`. The deprecated `commitment.v1.MerklePath` field has been `reserved`. [See 23-commitment](#23-commitment) - -### 23-commitment - -- The `MerklePath` type has been deprecated and a new `commitment.v2.MerklePath` type has been introduced (ref: [#6644](https://github.com/cosmos/ibc-go/pull/6644)). The new `commitment.v2.MerklePath` contains `repeated bytes` in favour of `repeated string`. This allows users to prove values stored under keys which contain non-utf8 encoded symbols. As a result, changes have been made to the 02-client `Query` service and 08-wasm contract API messages for JSON blobs. See [02-client](#02-client) and [08-wasm](#08-wasm), respectively. +- The [`InitModule` function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/27-interchain-accounts/module.go#L124-L143) has been removed. When adding the interchain accounts module to the chain, please set the desired params for controller and host submodules directly after calling `RunMigrations` in the upgrade handler. +- The [`GetBytes()` function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/27-interchain-accounts/types/packet.go#L65-L68) of the `CosmosTx` type has been removed. ### IBC testing package -- The `mock.PV` type has been removed in favour of [`cmttypes.MockPV`](https://github.com/cometbft/cometbft/blob/v0.38.5/types/priv_validator.go#L50) ([#5709](https://github.com/cosmos/ibc-go/pull/5709)). -- Functions `ConstructUpdateTMClientHeader` and `ConstructUpdateTMClientHeaderWithTrustedHeight` of `TestChain` type have been replaced with `IBCClientHeader`. This function will construct a `07-tendermint` header to update the light client on the counterparty chain. The trusted height must be passed in as a non-zero height. -- `GetValsAtHeight` has been renamed to `GetTrustedValidators` -- `AssertEventsLegacy` function of `ibctesting` package (alias for `"github.com/cosmos/ibc-go/v9/testing"`) has been removed and `AssertEvents` function should be used instead (ref: [#6070](https://github.com/cosmos/ibc-go/pull/6070)). +- The `mock.PV` type has been removed in favour of [`cmttypes.MockPV`](https://github.com/cometbft/cometbft/blob/v0.38.5/types/priv_validator.go#L50) in [#5709](https://github.com/cosmos/ibc-go/pull/5709). +- [Functions `ConstructUpdateTMClientHeader` and `ConstructUpdateTMClientHeaderWithTrustedHeight`](https://github.com/cosmos/ibc-go/blob/v8.0.0/testing/chain.go#L446-L481) of `TestChain` type have been replaced with `IBCClientHeader` function. This function will construct a 07-tendermint header to update the light client on the counterparty chain. The trusted height must be passed in as a non-zero height. +- [`GetValsAtHeight`](https://github.com/cosmos/ibc-go/blob/v8.0.0/testing/chain.go#L401) has been renamed to [`GetTrustedValidators`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/testing/chain.go#L403). +- [`AssertEventsLegacy` function](https://github.com/cosmos/ibc-go/blob/v8.0.0/testing/events.go#L140) of `ibctesting` package (alias for `"github.com/cosmos/ibc-go/v9/testing"`) has been removed in [#6070](https://github.com/cosmos/ibc-go/pull/6070), and [`AssertEvents` function](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/testing/events.go#L187) should be used instead. ```diff // testing/events.go @@ -157,31 +237,40 @@ func AssertEvents( ) ``` -- The `QueryServer` interface has been removed from the `TestChain` struct. Submodule query servers can be constructed directly by passing their associated keeper to the appropriate constructor function. For example: +- The [`QueryServer` interface has been removed from the `TestChain` struct](https://github.com/cosmos/ibc-go/blob/v8.0.0/testing/chain.go#L61). Submodule query servers can be constructed directly by passing their associated keeper to the appropriate constructor function. For example: ```golang clientQueryServer := clientkeeper.NewQueryServer(app.IBCKeeper.ClientKeeper) ``` -#### API deprecation notice +### API deprecation notice -The testing package functions `coordinator.Setup`, `coordinator.SetupClients`, `coordinator.SetupConnections`, `coordinator.CreateConnections`, and `coordinator.CreateChannels` have been deprecated and will be removed in v10. -Please use the new functions `path.Setup`, `path.SetupClients`, `path.SetupConnections`, `path.CreateConnections`, `path.CreateChannels`. +- The testing package functions `Setup`, `SetupClients`, `SetupConnections`, `CreateConnections`, and `CreateChannels` of the `Coordinator` type have been deprecated and will be removed in v10. Please use the new functions `Setup`, `SetupClients`, `SetupConnections`, `CreateConnections`, `CreateChannels` of the `Path` type. ## Relayers -- Renaming of event attribute keys in [#5603](https://github.com/cosmos/ibc-go/pull/5603). -- Removal of duplicate non-hexlified event attributes in [#6023](https://github.com/cosmos/ibc-go/pull/6023). +### Events -## IBC Light Clients +#### 02-client -### API removals +- The [`header` attribute](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/02-client/keeper/events.go#L60) has been removed from the `update_client` event in [\#5110](https://github.com/cosmos/ibc-go/pull/5110). + +#### 04-channel + +- The constant [`AttributeVersion`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/04-channel/types/events.go#L14) has been renamed to `AttributeKeyVersion`. +- The `packet_data` and the `packet_ack` attributes of the `send_packet`, `recv_packet` and `write_acknowledgement` events have been removed in [#6023](https://github.com/cosmos/ibc-go/pull/6023). The attributes `packet_data_hex` and `packet_ack_hex` should be used instead. The [constants `AttributeKeyData` and `AttributeKeyAck`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/04-channel/types/events.go#L24-L27) have also been removed. -The `ExportMetadata` interface function has been removed from the `ClientState` interface. Core IBC will export all key/value's within the 02-client store. +##### Channel upgrades + +- The attributes `version`, `ordering` and `connection_hops` from the `channel_upgrade_init`, `channel_upgrade_try`, `channel_upgrade_ack`, `channel_upgrade_open`, `channel_upgrade_timeout` and `channel_upgrade_cancelled` events have been removed in [\#6063](https://github.com/cosmos/ibc-go/pull/6063). -The `ZeroCustomFields` interface function has been removed from the `ClientState` interface. +## IBC Light Clients + +### API removals -The following functions have also been removed from the `ClientState` interface: `Initialize`, `Status`, `GetLatestHeight`, `GetTimestampAtHeight`, `VerifyClientMessage`, `VerifyMembership`, `VerifyNonMembership`, `CheckForMisbehaviour`, `UpdateState`, `UpdateStateOnMisbehaviour`, `CheckSubstituteAndUpdateState` and `VerifyUpgradeAndUpdateState`. ibc-go v9 decouples routing at the `02-client` layer from the light clients' encoding structure (i.e. every light client implementation of the `ClientState` interface is not used anymore to route the requests to the right light client at the `02-client` layer, instead a *light client module* is registered for every light client type and `02-client` routes the requests to the right light client module based on the client ID). Light client developers must implement the newly introduced `LightClientModule` interface and are encouraged to move the logic implemented in the functions of their light client's implementation of the `ClientState` interface to the equivalent function in the `LightClientModule` interface. The table below shows the equivalence between the `ClientState` interface functions that have been removed and the functions in the `LightClientModule` interface: +- The [`ExportMetadata` interface function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/client.go#L59) has been removed from the `ClientState` interface. Core IBC will export all key/value's within the 02-client store. +- The [`ZeroCustomFields` interface function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/client.go#L64) has been removed from the `ClientState` interface. +- The following functions have also been removed from the `ClientState` interface: `Initialize`, `Status`, `GetLatestHeight`, `GetTimestampAtHeight`, `VerifyClientMessage`, `VerifyMembership`, `VerifyNonMembership`, `CheckForMisbehaviour`, `UpdateState`, `UpdateStateOnMisbehaviour`, `CheckSubstituteAndUpdateState` and `VerifyUpgradeAndUpdateState`. ibc-go v9 decouples routing at the 02-client layer from the light clients' encoding structure (i.e. every light client implementation of the `ClientState` interface is not used anymore to route the requests to the right light client at the `02-client` layer, instead a *light client module* is registered for every light client type and 02-client routes the requests to the right light client module based on the client ID). Light client developers must implement the newly introduced `LightClientModule` interface and are encouraged to move the logic implemented in the functions of their light client's implementation of the `ClientState` interface to the equivalent function in the `LightClientModule` interface. The table below shows the equivalence between the `ClientState` interface functions that have been removed and the functions in the `LightClientModule` interface: |`ClientState` interface|`LightClientModule` interface| |-----------------------|-----------------------------| @@ -200,24 +289,23 @@ The following functions have also been removed from the `ClientState` interface: |`ExportMetadata` | | |`ZeroCustomFields` | | -Please check also the [Light client developer guide](../03-light-clients/01-developer-guide/01-overview.md) for more information. The light client module implementation for `07-tendermint` may also be useful as reference. +Please check also the [Light client developer guide](../03-light-clients/01-developer-guide/01-overview.md) for more information. The light client module implementation for 07-tendermint may also be useful as reference. ### 06-solomachine -- The `Initialize`, `Status`, `GetTimestampAtHeight` and `UpdateStateOnMisbehaviour` functions in `ClientState` have been removed and all their logic has been moved to functions of the `LightClientModule`. The `VerifyMembership` and `VerifyNonMembership` functions have been made private. -- The `Type` method on `Misbehaviour` has been removed. +- The [`Initialize`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/06-solomachine/client_state.go#L85), [`Status`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/06-solomachine/client_state.go#L59), [`GetTimestampAtHeight`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/06-solomachine/client_state.go#L46) and [`UpdateStateOnMisbehaviour`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/06-solomachine/update.go#L105) functions in `ClientState` have been removed and all their logic has been moved to functions of the `LightClientModule`. The [`VerifyMembership`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/06-solomachine/client_state.go#L111) and [`VerifyNonMembership`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/06-solomachine/client_state.go#L168) functions have been made private. +- The [`Type` method](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/06-solomachine/misbehaviour.go#L20) on `Misbehaviour` has been removed. ### 07-tendermint -The `IterateConsensusMetadata` function has been removed. The `VerifyMembership`, `VerifyNonMembership`, `GetTimestampAtHeight`, `Status` and `Initialize` functions have been made private. +- The [`IterateConsensusMetadata` function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/07-tendermint/store.go#L81) has been removed. The [`Initialize`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/07-tendermint/client_state.go#L192), [`Status`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/07-tendermint/client_state.go#L84), [`GetTimestampAtHeight`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/07-tendermint/client_state.go#L62), [`VerifyMembership`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/07-tendermint/client_state.go#L209), [`VerifyNonMembership`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/light-clients/07-tendermint/client_state.go#L252) functions have been made private. ### 08-wasm -Refer to the [08-wasm migrations](../03-light-clients/04-wasm/09-migrations.md) for more information. +Refer to the [08-wasm migration documentation](../03-light-clients/04-wasm/09-migrations.md) for more information. ### 09-localhost -The `09-localhost` light client has been made stateless and will no longer update the client on every block. The `ClientState` is constructed on demand when required. -The `ClientState` itself is therefore no longer provable directly with `VerifyMembership` or `VerifyNonMembership`. +The 09-localhost light client has been made stateless and will no longer update the client on every block. The `ClientState` is constructed on demand when required. The `ClientState` itself is therefore no longer provable directly with `VerifyMembership` or `VerifyNonMembership`. -Previously stored client state data is pruned automatically on IBC module store migration from `ConsensusVersion` 6 to 7. +An [automatic migration handler](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/02-client/keeper/migrations.go#L49) is configured to prune all previously stored client state data on IBC module store migration from `ConsensusVersion` 6 to 7. From 3a192bed40d2fc7b5e45fada0eedd8f5863b9fd7 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Thu, 25 Jul 2024 09:45:40 +0200 Subject: [PATCH 28/78] fix(state!): check upgrade compatibility in channel upgrade confirm (#6935) --- CHANGELOG.md | 1 + modules/core/04-channel/keeper/upgrade.go | 15 +++++++++++++ .../core/04-channel/keeper/upgrade_test.go | 21 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90e91dd3039..a6fda2ae855 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes * (apps/27-interchain-accounts) [\#6377](https://github.com/cosmos/ibc-go/pull/6377) Generate ICA simtest proposals only for provided keepers. +* (core/04-channel) [\#6935](https://github.com/cosmos/ibc-go/pull/6935) Check upgrade compatibility in `ChanUpgradeConfirm`. ## [v8.3.2](https://github.com/cosmos/ibc-go/releases/tag/v8.3.2) - 2024-06-20 diff --git a/modules/core/04-channel/keeper/upgrade.go b/modules/core/04-channel/keeper/upgrade.go index 5c1848f223b..2fd44ca10b5 100644 --- a/modules/core/04-channel/keeper/upgrade.go +++ b/modules/core/04-channel/keeper/upgrade.go @@ -446,6 +446,21 @@ func (k *Keeper) ChanUpgradeConfirm( return errorsmod.Wrap(err, "failed to verify counterparty upgrade") } + // if we have cancelled our upgrade after performing UpgradeInit, + // UpgradeTry or UpgradeAck, the lack of a stored upgrade will prevent + // us from continuing the upgrade handshake + upgrade, found := k.GetUpgrade(ctx, portID, channelID) + if !found { + return errorsmod.Wrapf(types.ErrUpgradeNotFound, "failed to retrieve channel upgrade: port ID (%s) channel ID (%s)", portID, channelID) + } + + // in the crossing-hello case it is possible that both chains execute the + // INIT, TRY and CONFIRM steps without any of them executing ACK, therefore + // we also need to check that the upgrades are compatible on this step + if err := k.checkForUpgradeCompatibility(ctx, upgrade.Fields, counterpartyUpgrade.Fields); err != nil { + return types.NewUpgradeError(channel.UpgradeSequence, err) + } + timeout := counterpartyUpgrade.Timeout selfHeight, selfTimestamp := clienttypes.GetSelfHeight(ctx), uint64(ctx.BlockTime().UnixNano()) diff --git a/modules/core/04-channel/keeper/upgrade_test.go b/modules/core/04-channel/keeper/upgrade_test.go index 0f75a7df868..8189e2d9bd8 100644 --- a/modules/core/04-channel/keeper/upgrade_test.go +++ b/modules/core/04-channel/keeper/upgrade_test.go @@ -1073,6 +1073,27 @@ func (suite *KeeperTestSuite) TestChanUpgradeConfirm() { }, types.NewUpgradeError(1, types.ErrTimeoutElapsed), }, + { + "upgrade not found", + func() { + path.EndpointB.Chain.DeleteKey(host.ChannelUpgradeKey(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID)) + }, + types.ErrUpgradeNotFound, + }, + { + "upgrades are not compatible", + func() { + // the expected upgrade version is mock-version-v2 + counterpartyUpgrade.Fields.Version = fmt.Sprintf("%s-v3", mock.Version) + path.EndpointA.SetChannelUpgrade(counterpartyUpgrade) + + suite.coordinator.CommitBlock(suite.chainA) + + err := path.EndpointB.UpdateClient() + suite.Require().NoError(err) + }, + types.NewUpgradeError(1, types.ErrIncompatibleCounterpartyUpgrade), + }, } for _, tc := range testCases { From 5305ceefd45100acc6fb214d4ed21cddbf08d4eb Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Thu, 25 Jul 2024 12:59:15 +0200 Subject: [PATCH 29/78] e2e: compatibility tests for v7.7.x and 8.4.x (#6940) --- .../release-v7.7.x/client-chain-a.json | 18 +++++++++++ .../release-v7.7.x/connection-chain-a.json | 17 ++++++++++ .../release-v7.7.x/ica-chain-a.json | 26 +++++++++++++++ .../release-v7.7.x/ica-chain-b.json | 26 +++++++++++++++ .../release-v7.7.x/ica-gov-chain-a.json | 23 +++++++++++++ .../release-v7.7.x/ica-gov-chain-b.json | 23 +++++++++++++ .../release-v7.7.x/ica-groups-chain-a.json | 23 +++++++++++++ .../release-v7.7.x/ica-groups-chain-b.json | 23 +++++++++++++ .../release-v7.7.x/ica-queries-chain-a.json | 19 +++++++++++ .../release-v7.7.x/ica-queries-chain-b.json | 19 +++++++++++ .../ica-unordered-channel-chain-a.json | 19 +++++++++++ .../ica-unordered-channel-chain-b.json | 19 +++++++++++ .../incentivized-ica-chain-a.json | 24 ++++++++++++++ .../incentivized-ica-chain-b.json | 24 ++++++++++++++ .../incentivized-transfer-chain-a.json | 30 +++++++++++++++++ .../incentivized-transfer-chain-b.json | 30 +++++++++++++++++ .../release-v7.7.x/localhost-ica-chain-a.json | 23 +++++++++++++ .../localhost-transfer-chain-a.json | 22 +++++++++++++ .../transfer-authz-chain-a.json | 23 +++++++++++++ .../transfer-authz-chain-b.json | 23 +++++++++++++ .../release-v7.7.x/transfer-chain-a.json | 32 +++++++++++++++++++ .../release-v7.7.x/transfer-chain-b.json | 30 +++++++++++++++++ .../release-v8.4.x/client-chain-a.json | 20 ++++++++++++ .../release-v8.4.x/connection-chain-a.json | 17 ++++++++++ .../release-v8.4.x/genesis-chain-a.json | 17 ++++++++++ .../release-v8.4.x/ica-chain-a.json | 26 +++++++++++++++ .../release-v8.4.x/ica-chain-b.json | 26 +++++++++++++++ .../ica-channel-upgrade-chain-a.json | 20 ++++++++++++ .../ica-channel-upgrade-chain-b.json | 20 ++++++++++++ .../release-v8.4.x/ica-gov-chain-a.json | 23 +++++++++++++ .../release-v8.4.x/ica-gov-chain-b.json | 23 +++++++++++++ .../release-v8.4.x/ica-groups-chain-a.json | 23 +++++++++++++ .../release-v8.4.x/ica-groups-chain-b.json | 23 +++++++++++++ .../release-v8.4.x/ica-queries-chain-a.json | 20 ++++++++++++ .../release-v8.4.x/ica-queries-chain-b.json | 20 ++++++++++++ .../ica-unordered-channel-chain-a.json | 21 ++++++++++++ .../ica-unordered-channel-chain-b.json | 21 ++++++++++++ .../incentivized-ica-chain-a.json | 24 ++++++++++++++ .../incentivized-ica-chain-b.json | 24 ++++++++++++++ .../incentivized-transfer-chain-a.json | 30 +++++++++++++++++ .../incentivized-transfer-chain-b.json | 30 +++++++++++++++++ .../release-v8.4.x/localhost-ica-chain-a.json | 23 +++++++++++++ .../localhost-transfer-chain-a.json | 22 +++++++++++++ .../transfer-authz-chain-a.json | 23 +++++++++++++ .../transfer-authz-chain-b.json | 23 +++++++++++++ .../release-v8.4.x/transfer-chain-a.json | 32 +++++++++++++++++++ .../release-v8.4.x/transfer-chain-b.json | 30 +++++++++++++++++ .../transfer-channel-upgrade-chain-a.json | 21 ++++++++++++ .../transfer-channel-upgrade-chain-b.json | 21 ++++++++++++ .../unreleased/client-1.json | 2 ++ .../unreleased/client-2.json | 2 ++ .../unreleased/connection.json | 4 +++ .../ica-channel-upgrade-chain-a.json | 2 ++ .../ica-channel-upgrade-chain-b.json | 2 ++ .../unreleased/ica-gov.json | 4 +++ .../unreleased/ica-groups.json | 4 +++ .../unreleased/ica-queries.json | 4 +++ .../unreleased/ica-unordered-channel.json | 4 +++ .../unreleased/ica.json | 4 +++ .../unreleased/incentivized-ica.json | 4 +++ .../unreleased/incentivized-transfer-1.json | 4 +++ .../unreleased/incentivized-transfer-2.json | 4 +++ .../unreleased/incentivized-transfer-3.json | 4 +++ .../unreleased/localhost-ica.json | 4 +++ .../unreleased/localhost-transfer.json | 4 +++ .../unreleased/transfer-1.json | 4 +++ .../unreleased/transfer-2.json | 4 +++ .../unreleased/transfer-3.json | 4 +++ .../unreleased/transfer-authz.json | 4 +++ .../transfer-channel-upgrade-chain-a.json | 2 ++ .../transfer-channel-upgrade-chain-b.json | 2 ++ .../e2e-compatibility-unreleased.yaml | 2 ++ .github/workflows/e2e-compatibility.yaml | 4 +++ 73 files changed, 1221 insertions(+) create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/client-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/connection-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/localhost-ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/localhost-transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/client-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/connection-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/genesis-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/localhost-ica-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/localhost-transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/transfer-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-a.json create mode 100644 .github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-b.json diff --git a/.github/compatibility-test-matrices/release-v7.7.x/client-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/client-chain-a.json new file mode 100644 index 00000000000..fb695b1aaca --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/client-chain-a.json @@ -0,0 +1,18 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestClientTestSuite" + ], + "test": [ + "TestClient_Update_Misbehaviour", + "TestAllowedClientsParam" + ], + "relayer-type": [ + "hermes" + ] +} diff --git a/.github/compatibility-test-matrices/release-v7.7.x/connection-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/connection-chain-a.json new file mode 100644 index 00000000000..eb07f12daed --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/connection-chain-a.json @@ -0,0 +1,17 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestConnectionTestSuite" + ], + "test": [ + "TestMaxExpectedTimePerBlockParam" + ], + "relayer-type": [ + "hermes" + ] +} diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-a.json new file mode 100644 index 00000000000..87c09699b9c --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-a.json @@ -0,0 +1,26 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer", + "TestMsgSendTx_FailedTransfer_InsufficientFunds", + "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", + "TestControllerEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-b.json new file mode 100644 index 00000000000..44fcaf172c9 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-b.json @@ -0,0 +1,26 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer", + "TestMsgSendTx_FailedTransfer_InsufficientFunds", + "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", + "TestHostEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-a.json new file mode 100644 index 00000000000..c63fbeddca1 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsGovTestSuite" + ], + "test": [ + "TestInterchainAccountsGovIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-b.json new file mode 100644 index 00000000000..c277ecdcdf2 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsGovTestSuite" + ], + "test": [ + "TestInterchainAccountsGovIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-a.json new file mode 100644 index 00000000000..013673b1b0b --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsGroupsTestSuite" + ], + "test": [ + "TestInterchainAccountsGroupsIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-b.json new file mode 100644 index 00000000000..3d18035d861 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsGroupsTestSuite" + ], + "test": [ + "TestInterchainAccountsGroupsIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-a.json new file mode 100644 index 00000000000..acb7a91222e --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-a.json @@ -0,0 +1,19 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v7.6.0", + "v7.5.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsQueryTestSuite" + ], + "test": [ + "TestInterchainAccountsQuery" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-b.json new file mode 100644 index 00000000000..a4655b231b5 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-b.json @@ -0,0 +1,19 @@ +{ + "chain-a": [ + "v7.6.0", + "v7.5.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsQueryTestSuite" + ], + "test": [ + "TestInterchainAccountsQuery" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-a.json new file mode 100644 index 00000000000..610cf77fdc7 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-a.json @@ -0,0 +1,19 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-b.json new file mode 100644 index 00000000000..62144562908 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-b.json @@ -0,0 +1,19 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-a.json new file mode 100644 index 00000000000..aa9fd58edb6 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-a.json @@ -0,0 +1,24 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestIncentivizedInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulBankSend_Incentivized", + "TestMsgSendTx_FailedBankSend_Incentivized" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-b.json new file mode 100644 index 00000000000..f11099a7d94 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-b.json @@ -0,0 +1,24 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestIncentivizedInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulBankSend_Incentivized", + "TestMsgSendTx_FailedBankSend_Incentivized" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-a.json new file mode 100644 index 00000000000..131479dccca --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-a.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestIncentivizedTransferTestSuite" + ], + "test": [ + "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", + "TestMsgPayPacketFee_InvalidReceiverAccount", + "TestMultiMsg_MsgPayPacketFeeSingleSender", + "TestMsgPayPacketFee_SingleSender_TimesOut", + "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", + "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-b.json new file mode 100644 index 00000000000..02f9a827bdb --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-b.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestIncentivizedTransferTestSuite" + ], + "test": [ + "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", + "TestMsgPayPacketFee_InvalidReceiverAccount", + "TestMultiMsg_MsgPayPacketFeeSingleSender", + "TestMsgPayPacketFee_SingleSender_TimesOut", + "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", + "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/localhost-ica-chain-a.json new file mode 100644 index 00000000000..d1c298e0653 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/localhost-ica-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v7.7.x" + ], + "entrypoint": [ + "LocalhostInterchainAccountsTestSuite" + ], + "test": [ + "TestInterchainAccounts_Localhost", + "TestInterchainAccounts_ReopenChannel_Localhost" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/localhost-transfer-chain-a.json new file mode 100644 index 00000000000..b4d3b65ce14 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/localhost-transfer-chain-a.json @@ -0,0 +1,22 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v7.7.x" + ], + "entrypoint": [ + "LocalhostTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Localhost" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-a.json new file mode 100644 index 00000000000..cfbe81f02d0 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestAuthzTransferTestSuite" + ], + "test": [ + "TestAuthz_MsgTransfer_Succeeds", + "TestAuthz_InvalidTransferAuthorizations" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-b.json new file mode 100644 index 00000000000..e86db0f3a17 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestAuthzTransferTestSuite" + ], + "test": [ + "TestAuthz_MsgTransfer_Succeeds", + "TestAuthz_InvalidTransferAuthorizations" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-a.json new file mode 100644 index 00000000000..2b77b52df0a --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-a.json @@ -0,0 +1,32 @@ +{ + "chain-a": [ + "release-v7.7.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "v3.4.0", + "v2.5.0", + "release-v7.7.x" + ], + "entrypoint": [ + "TestTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Succeeds_Nonincentivized", + "TestMsgTransfer_Fails_InvalidAddress", + "TestMsgTransfer_Timeout_Nonincentivized", + "TestMsgTransfer_WithMemo", + "TestSendEnabledParam", + "TestReceiveEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json new file mode 100644 index 00000000000..dc70af2ed74 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "v3.4.0", + "v2.5.0", + "release-v7.7.x" + ], + "chain-b": [ + "release-v7.7.x" + ], + "entrypoint": [ + "TestTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Succeeds_Nonincentivized", + "TestMsgTransfer_Fails_InvalidAddress", + "TestMsgTransfer_Timeout_Nonincentivized", + "TestMsgTransfer_WithMemo" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/client-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/client-chain-a.json new file mode 100644 index 00000000000..f838479fa0c --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/client-chain-a.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestClientTestSuite" + ], + "test": [ + "TestRecoverClient_Succeeds", + "TestScheduleIBCUpgrade_Succeeds", + "TestClient_Update_Misbehaviour", + "TestAllowedClientsParam" + ], + "relayer-type": [ + "hermes" + ] +} diff --git a/.github/compatibility-test-matrices/release-v8.4.x/connection-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/connection-chain-a.json new file mode 100644 index 00000000000..a26255f90bb --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/connection-chain-a.json @@ -0,0 +1,17 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestConnectionTestSuite" + ], + "test": [ + "TestMaxExpectedTimePerBlockParam" + ], + "relayer-type": [ + "hermes" + ] +} diff --git a/.github/compatibility-test-matrices/release-v8.4.x/genesis-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/genesis-chain-a.json new file mode 100644 index 00000000000..3b7d88a090f --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/genesis-chain-a.json @@ -0,0 +1,17 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestGenesisTestSuite" + ], + "test": [ + "TestIBCGenesis" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-a.json new file mode 100644 index 00000000000..cd9bdf4e1ee --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-a.json @@ -0,0 +1,26 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer", + "TestMsgSendTx_FailedTransfer_InsufficientFunds", + "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", + "TestControllerEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-b.json new file mode 100644 index 00000000000..808aff7be7a --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-b.json @@ -0,0 +1,26 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer", + "TestMsgSendTx_FailedTransfer_InsufficientFunds", + "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", + "TestHostEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-a.json new file mode 100644 index 00000000000..95d6c0d0c5c --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-a.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsChannelUpgradesTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_AfterUpgradingOrdertoUnordered", + "TestChannelUpgrade_ICAChannelClosesAfterTimeout_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-b.json new file mode 100644 index 00000000000..338cb5131f5 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-b.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsChannelUpgradesTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_AfterUpgradingOrdertoUnordered", + "TestChannelUpgrade_ICAChannelClosesAfterTimeout_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-a.json new file mode 100644 index 00000000000..5b5af16579f --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsGovTestSuite" + ], + "test": [ + "TestInterchainAccountsGovIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-b.json new file mode 100644 index 00000000000..f975b83df95 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsGovTestSuite" + ], + "test": [ + "TestInterchainAccountsGovIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-a.json new file mode 100644 index 00000000000..2b1ae3d2212 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsGroupsTestSuite" + ], + "test": [ + "TestInterchainAccountsGroupsIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-b.json new file mode 100644 index 00000000000..c78160f6e70 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsGroupsTestSuite" + ], + "test": [ + "TestInterchainAccountsGroupsIntegration" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-a.json new file mode 100644 index 00000000000..462c7c79261 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-a.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v7.6.0", + "v7.5.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsQueryTestSuite" + ], + "test": [ + "TestInterchainAccountsQuery" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-b.json new file mode 100644 index 00000000000..328b2891d9d --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-b.json @@ -0,0 +1,20 @@ +{ + "chain-a": [ + "v7.6.0", + "v7.5.0", + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsQueryTestSuite" + ], + "test": [ + "TestInterchainAccountsQuery" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-a.json new file mode 100644 index 00000000000..e62302c9f73 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-a.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-b.json new file mode 100644 index 00000000000..1f0b2895bac --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-b.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-a.json new file mode 100644 index 00000000000..006efc39495 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-a.json @@ -0,0 +1,24 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestIncentivizedInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulBankSend_Incentivized", + "TestMsgSendTx_FailedBankSend_Incentivized" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-b.json new file mode 100644 index 00000000000..12f2091d9b6 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-b.json @@ -0,0 +1,24 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestIncentivizedInterchainAccountsTestSuite" + ], + "test": [ + "TestMsgSendTx_SuccessfulBankSend_Incentivized", + "TestMsgSendTx_FailedBankSend_Incentivized" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-a.json new file mode 100644 index 00000000000..5b972d6789b --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-a.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestIncentivizedTransferTestSuite" + ], + "test": [ + "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", + "TestMsgPayPacketFee_InvalidReceiverAccount", + "TestMultiMsg_MsgPayPacketFeeSingleSender", + "TestMsgPayPacketFee_SingleSender_TimesOut", + "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", + "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-b.json new file mode 100644 index 00000000000..bdf1c8e9c92 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-b.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestIncentivizedTransferTestSuite" + ], + "test": [ + "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", + "TestMsgPayPacketFee_InvalidReceiverAccount", + "TestMultiMsg_MsgPayPacketFeeSingleSender", + "TestMsgPayPacketFee_SingleSender_TimesOut", + "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", + "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/localhost-ica-chain-a.json new file mode 100644 index 00000000000..daec8ba1521 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/localhost-ica-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v8.4.x" + ], + "entrypoint": [ + "LocalhostInterchainAccountsTestSuite" + ], + "test": [ + "TestInterchainAccounts_Localhost", + "TestInterchainAccounts_ReopenChannel_Localhost" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/localhost-transfer-chain-a.json new file mode 100644 index 00000000000..925c1b2d14b --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/localhost-transfer-chain-a.json @@ -0,0 +1,22 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v8.4.x" + ], + "entrypoint": [ + "LocalhostTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Localhost" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-a.json new file mode 100644 index 00000000000..7de2827921e --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-a.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestAuthzTransferTestSuite" + ], + "test": [ + "TestAuthz_MsgTransfer_Succeeds", + "TestAuthz_InvalidTransferAuthorizations" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-b.json new file mode 100644 index 00000000000..a5c2bca28a4 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-b.json @@ -0,0 +1,23 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestAuthzTransferTestSuite" + ], + "test": [ + "TestAuthz_MsgTransfer_Succeeds", + "TestAuthz_InvalidTransferAuthorizations" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-a.json new file mode 100644 index 00000000000..9a7c0ca5618 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-a.json @@ -0,0 +1,32 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "v3.4.0", + "v2.5.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Succeeds_Nonincentivized", + "TestMsgTransfer_Fails_InvalidAddress", + "TestMsgTransfer_Timeout_Nonincentivized", + "TestMsgTransfer_WithMemo", + "TestSendEnabledParam", + "TestReceiveEnabledParam" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json new file mode 100644 index 00000000000..ebaddf363c8 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json @@ -0,0 +1,30 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "v7.6.0", + "v7.5.0", + "v7.4.0", + "v6.3.0", + "v5.4.0", + "v4.6.0", + "v3.4.0", + "v2.5.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestTransferTestSuite" + ], + "test": [ + "TestMsgTransfer_Succeeds_Nonincentivized", + "TestMsgTransfer_Fails_InvalidAddress", + "TestMsgTransfer_Timeout_Nonincentivized", + "TestMsgTransfer_WithMemo" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-a.json new file mode 100644 index 00000000000..36a92661bd7 --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-a.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "release-v8.4.x" + ], + "chain-b": [ + "v8.3.0", + "v8.2.0", + "release-v8.4.x" + ], + "entrypoint": [ + "TestTransferChannelUpgradesTestSuite" + ], + "test": [ + "TestChannelUpgrade_WithFeeMiddleware_Succeeds", + "TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds", + "TestChannelUpgrade_WithFeeMiddleware_FailsWithTimeoutOnAck" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-b.json new file mode 100644 index 00000000000..311fa2bf2fe --- /dev/null +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-b.json @@ -0,0 +1,21 @@ +{ + "chain-a": [ + "v8.3.0", + "v8.2.0", + "release-v8.4.x" + ], + "chain-b": [ + "release-v8.4.x" + ], + "entrypoint": [ + "TestTransferChannelUpgradesTestSuite" + ], + "test": [ + "TestChannelUpgrade_WithFeeMiddleware_Succeeds", + "TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds", + "TestChannelUpgrade_WithFeeMiddleware_FailsWithTimeoutOnAck" + ], + "relayer-type": [ + "hermes" + ] +} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/unreleased/client-1.json b/.github/compatibility-test-matrices/unreleased/client-1.json index 385dd1cd16a..63b3ea6903a 100644 --- a/.github/compatibility-test-matrices/unreleased/client-1.json +++ b/.github/compatibility-test-matrices/unreleased/client-1.json @@ -1,12 +1,14 @@ { "chain-a": [ "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" diff --git a/.github/compatibility-test-matrices/unreleased/client-2.json b/.github/compatibility-test-matrices/unreleased/client-2.json index 5d0dbd62375..d2fb086e90e 100644 --- a/.github/compatibility-test-matrices/unreleased/client-2.json +++ b/.github/compatibility-test-matrices/unreleased/client-2.json @@ -1,9 +1,11 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], diff --git a/.github/compatibility-test-matrices/unreleased/connection.json b/.github/compatibility-test-matrices/unreleased/connection.json index 551cb942481..82cae4afd0d 100644 --- a/.github/compatibility-test-matrices/unreleased/connection.json +++ b/.github/compatibility-test-matrices/unreleased/connection.json @@ -1,14 +1,18 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" diff --git a/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-a.json index 1b030f6861f..1b975ef89fe 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-a.json @@ -1,9 +1,11 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], diff --git a/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-b.json index 1b030f6861f..1b975ef89fe 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-b.json @@ -1,9 +1,11 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], diff --git a/.github/compatibility-test-matrices/unreleased/ica-gov.json b/.github/compatibility-test-matrices/unreleased/ica-gov.json index a2b90d46d5a..8b5fbe95ac5 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-gov.json +++ b/.github/compatibility-test-matrices/unreleased/ica-gov.json @@ -1,15 +1,19 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", "release-v6.3.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/ica-groups.json b/.github/compatibility-test-matrices/unreleased/ica-groups.json index fedd1523e24..be81c7e2989 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-groups.json +++ b/.github/compatibility-test-matrices/unreleased/ica-groups.json @@ -1,15 +1,19 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", "release-v6.3.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/ica-queries.json b/.github/compatibility-test-matrices/unreleased/ica-queries.json index 4dabd49fb5b..0de8ff881d2 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-queries.json +++ b/.github/compatibility-test-matrices/unreleased/ica-queries.json @@ -1,11 +1,15 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x" ], diff --git a/.github/compatibility-test-matrices/unreleased/ica-unordered-channel.json b/.github/compatibility-test-matrices/unreleased/ica-unordered-channel.json index 37a3da3f8f8..673ebd9de69 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-unordered-channel.json +++ b/.github/compatibility-test-matrices/unreleased/ica-unordered-channel.json @@ -1,13 +1,17 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x" ], diff --git a/.github/compatibility-test-matrices/unreleased/ica.json b/.github/compatibility-test-matrices/unreleased/ica.json index 3d741b776d6..3990b8f3fb7 100644 --- a/.github/compatibility-test-matrices/unreleased/ica.json +++ b/.github/compatibility-test-matrices/unreleased/ica.json @@ -1,7 +1,9 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", @@ -10,8 +12,10 @@ "release-v4.6.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/incentivized-ica.json b/.github/compatibility-test-matrices/unreleased/incentivized-ica.json index 603726089a9..685318a58dd 100644 --- a/.github/compatibility-test-matrices/unreleased/incentivized-ica.json +++ b/.github/compatibility-test-matrices/unreleased/incentivized-ica.json @@ -1,15 +1,19 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", "release-v6.3.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-1.json b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-1.json index 08d059451dd..3268aed33d5 100644 --- a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-1.json +++ b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-1.json @@ -1,7 +1,9 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", @@ -10,8 +12,10 @@ "release-v4.6.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-2.json b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-2.json index 6f9a98cc996..b9336a8d807 100644 --- a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-2.json +++ b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-2.json @@ -1,7 +1,9 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", @@ -10,8 +12,10 @@ "release-v4.6.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-3.json b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-3.json index 57303a3621f..21a66b7db1a 100644 --- a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-3.json +++ b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-3.json @@ -1,7 +1,9 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", @@ -10,8 +12,10 @@ "release-v4.6.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/localhost-ica.json b/.github/compatibility-test-matrices/unreleased/localhost-ica.json index 91089c87eaa..05fbfe894ee 100644 --- a/.github/compatibility-test-matrices/unreleased/localhost-ica.json +++ b/.github/compatibility-test-matrices/unreleased/localhost-ica.json @@ -1,14 +1,18 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" diff --git a/.github/compatibility-test-matrices/unreleased/localhost-transfer.json b/.github/compatibility-test-matrices/unreleased/localhost-transfer.json index 059113dae8c..153ca4a43da 100644 --- a/.github/compatibility-test-matrices/unreleased/localhost-transfer.json +++ b/.github/compatibility-test-matrices/unreleased/localhost-transfer.json @@ -1,14 +1,18 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" diff --git a/.github/compatibility-test-matrices/unreleased/transfer-1.json b/.github/compatibility-test-matrices/unreleased/transfer-1.json index 7f0f868bb9c..4c63ab62717 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-1.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-1.json @@ -1,7 +1,9 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", @@ -10,8 +12,10 @@ "release-v4.6.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/transfer-2.json b/.github/compatibility-test-matrices/unreleased/transfer-2.json index cd82e851cbc..a63a9512151 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-2.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-2.json @@ -1,7 +1,9 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", @@ -10,8 +12,10 @@ "release-v4.6.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/transfer-3.json b/.github/compatibility-test-matrices/unreleased/transfer-3.json index 9bd23143164..a075f8fd93b 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-3.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-3.json @@ -1,7 +1,9 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", @@ -10,8 +12,10 @@ "release-v4.6.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x", diff --git a/.github/compatibility-test-matrices/unreleased/transfer-authz.json b/.github/compatibility-test-matrices/unreleased/transfer-authz.json index 41434e19b95..9ec7ab6c857 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-authz.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-authz.json @@ -1,14 +1,18 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x", + "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" diff --git a/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-a.json index 0b934bfe86e..41ea4f9172f 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-a.json @@ -1,9 +1,11 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], diff --git a/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-b.json index 0b934bfe86e..41ea4f9172f 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-b.json @@ -1,9 +1,11 @@ { "chain-a": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], "chain-b": [ + "release-v8.4.x", "release-v8.3.x", "release-v8.2.x" ], diff --git a/.github/workflows/e2e-compatibility-unreleased.yaml b/.github/workflows/e2e-compatibility-unreleased.yaml index 68a0601ff39..db749502911 100644 --- a/.github/workflows/e2e-compatibility-unreleased.yaml +++ b/.github/workflows/e2e-compatibility-unreleased.yaml @@ -18,8 +18,10 @@ jobs: - release/v7.4.x - release/v7.5.x - release/v7.6.x + - release/v7.7.x - release/v8.2.x - release/v8.3.x + - release/v8.4.x - release/v9.0.x steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/e2e-compatibility.yaml b/.github/workflows/e2e-compatibility.yaml index 38069ac0b97..b22597b4a7e 100644 --- a/.github/workflows/e2e-compatibility.yaml +++ b/.github/workflows/e2e-compatibility.yaml @@ -16,8 +16,10 @@ on: - release/v7.4.x - release/v7.5.x - release/v7.6.x + - release/v7.7.x - release/v8.2.x - release/v8.3.x + - release/v8.4.x - release/v9.0.x - main ibc-go-version: @@ -55,8 +57,10 @@ jobs: - release/v7.4.x - release/v7.5.x - release/v7.6.x + - release/v7.7.x - release/v8.2.x - release/v8.3.x + - release/v8.4.x - release/v9.0.x - main steps: From bfe775104f41a9d62d27eab5cf0f1ffaffda07a0 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Thu, 25 Jul 2024 12:59:29 +0200 Subject: [PATCH 30/78] e2e: send entire balance of single denom in v1 channels (#6939) --- e2e/tests/transfer/base_test.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/e2e/tests/transfer/base_test.go b/e2e/tests/transfer/base_test.go index 745a0d57f07..622c2c45afc 100644 --- a/e2e/tests/transfer/base_test.go +++ b/e2e/tests/transfer/base_test.go @@ -610,7 +610,11 @@ func (s *TransferTestSuite) TestMsgTransfer_EntireBalance() { }) t.Run("send entire balance from B to A", func(t *testing.T) { - transferCoins := sdk.NewCoins((sdk.NewCoin(chainBIBCToken.IBCDenom(), transfertypes.UnboundedSpendLimit())), sdk.NewCoin(chainB.Config().Denom, transfertypes.UnboundedSpendLimit())) + transferCoins := sdk.NewCoins(sdk.NewCoin(chainBIBCToken.IBCDenom(), transfertypes.UnboundedSpendLimit())) + if channelA.Version == transfertypes.V2 { + transferCoins.Add(sdk.NewCoin(chainB.Config().Denom, transfertypes.UnboundedSpendLimit())) + } + transferTxResp := s.Transfer(ctx, chainB, chainBWallet, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID, transferCoins, chainBAddress, chainAAddress, s.GetTimeoutHeight(ctx, chainB), 0, "", nil) s.AssertTxSuccess(transferTxResp) }) @@ -624,11 +628,13 @@ func (s *TransferTestSuite) TestMsgTransfer_EntireBalance() { s.Require().NoError(err) s.Require().Equal(testvalues.StartingTokenAmount, actualBalance.Int64()) - // test that chainA has the entirety of chainB's token IBC denom. - actualBalance, err = query.Balance(ctx, chainA, chainAAddress, chainAIBCToken.IBCDenom()) + if channelA.Version == transfertypes.V2 { + // test that chainA has the entirety of chainB's token IBC denom. + actualBalance, err = query.Balance(ctx, chainA, chainAAddress, chainAIBCToken.IBCDenom()) - s.Require().NoError(err) - s.Require().Equal(testvalues.StartingTokenAmount, actualBalance.Int64()) + s.Require().NoError(err) + s.Require().Equal(testvalues.StartingTokenAmount, actualBalance.Int64()) + } // Tests that chainB has a zero balance for both. actualBalance, err = query.Balance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom()) From f089b7b36adb8a8ab487685e00549522e8988aa0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 17:28:43 +0200 Subject: [PATCH 31/78] chore(deps): bump bufbuild/buf-setup-action from 1.35.0 to 1.35.1 (#6946) Bumps [bufbuild/buf-setup-action](https://github.com/bufbuild/buf-setup-action) from 1.35.0 to 1.35.1. - [Release notes](https://github.com/bufbuild/buf-setup-action/releases) - [Commits](https://github.com/bufbuild/buf-setup-action/compare/v1.35.0...v1.35.1) --- updated-dependencies: - dependency-name: bufbuild/buf-setup-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/proto-registry.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/proto-registry.yml b/.github/workflows/proto-registry.yml index 4666173537b..0e37bb53c96 100644 --- a/.github/workflows/proto-registry.yml +++ b/.github/workflows/proto-registry.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: bufbuild/buf-setup-action@v1.35.0 + - uses: bufbuild/buf-setup-action@v1.35.1 - uses: bufbuild/buf-push-action@v1 with: input: "proto" From 43ea8e13e6ee79a8775a40d34790f8d516230290 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Thu, 25 Jul 2024 23:13:28 +0200 Subject: [PATCH 32/78] docs: update migration docs for 08-wasm --- modules/light-clients/08-wasm/CHANGELOG.md | 46 ++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/modules/light-clients/08-wasm/CHANGELOG.md b/modules/light-clients/08-wasm/CHANGELOG.md index 5a9da678180..fcc8961a0ed 100644 --- a/modules/light-clients/08-wasm/CHANGELOG.md +++ b/modules/light-clients/08-wasm/CHANGELOG.md @@ -38,17 +38,31 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Dependencies -* [\#6807](https://github.com/cosmos/ibc-go/pull/6807) Update wasmvm to v2.1.0. * [\#6848](https://github.com/cosmos/ibc-go/pull/6848) Bump CometBFT to v0.38.10. ### API Breaking -* [\#6644](https://github.com/cosmos/ibc-go/pull/6644) api!: add `v2.MerklePath` for contract api `VerifyMembershipMsg` and `VerifyNonMembershipMsg` structs. Note, this requires a migration for existing client contracts to correctly handle deserialization of `MerklePath.KeyPath` which has changed from `repeated string` to `repeated bytes`. In JSON message structures this change is reflected as the `KeyPath` being a marshalled as a list of base64 encoded byte strings. - ### State Machine Breaking ### Improvements +### Features + +### Bug Fixes + + +## [v0.3.0+ibc-go-v8.3-wasmvm-v2.0](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.3.0%2Bibc-go-v8.3-wasmvm-v2.0) - 2024-07-17 + +### Dependencies + +* [\#6807](https://github.com/cosmos/ibc-go/pull/6807) Update wasmvm to v2.1.0. + +### API Breaking + +* [\#6644](https://github.com/cosmos/ibc-go/pull/6644) Add `v2.MerklePath` for contract api `VerifyMembershipMsg` and `VerifyNonMembershipMsg` structs. Note, this requires a migration for existing client contracts to correctly handle deserialization of `MerklePath.KeyPath` which has changed from `[]string` to `[][]bytes`. In JSON message structures this change is reflected as the `KeyPath` being a marshalled as a list of base64 encoded byte strings. This change supports proving values stored under keys which contain non-utf8 encoded symbols. See migration docs for more details. + +### Improvements + * [\#5923](https://github.com/cosmos/ibc-go/pull/5923) imp: add 08-wasm build opts for libwasmvm linking disabled ### Features @@ -59,6 +73,21 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [\#6815](https://github.com/cosmos/ibc-go/pull/6815) Decode to bytes the hex-encoded checksum argument of the `migrate-contract` CLI. + +## [v0.2.0+ibc-go-v7.3-wasmvm-v1.5](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.2.0%2Bibc-go-v7.3-wasmvm-v1.5) - 2024-07-17 + +### API Breaking + +* [\#6644](https://github.com/cosmos/ibc-go/pull/6644) Add `v2.MerklePath` for contract api `VerifyMembershipMsg` and `VerifyNonMembershipMsg` structs. Note, this requires a migration for existing client contracts to correctly handle deserialization of `MerklePath.KeyPath` which has changed from `[]string` to `[][]byte`. In JSON message structures this change is reflected as the `KeyPath` being a marshalled as a list of base64 encoded byte strings. This change supports proving values stored under keys which contain non-utf8 encoded symbols. See migration docs for more details. + +### Features + +* [#\6231](https://github.com/cosmos/ibc-go/pull/6231) feat: add CLI to broadcast transaction with `MsgMigrateContract`. + +### Bug Fixes + +* [\#6815](https://github.com/cosmos/ibc-go/pull/6815) Decode to bytes the hex-encoded checksum argument of the `migrate-contract` CLI. + ## [v0.2.0+ibc-go-v8.3-wasmvm-v2.0](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.2.0%2Bibc-go-v8.3-wasmvm-v2.0) - 2024-05-23 @@ -73,6 +102,17 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [\#5821](https://github.com/cosmos/ibc-go/pull/5821) feat: add `VerifyMembershipProof` RPC query (querier approach for conditional clients). * [\#6231](https://github.com/cosmos/ibc-go/pull/6231) feat: add CLI to broadcast transaction with `MsgMigrateContract`. + +## [v0.1.1+ibc-go-v7.3-wasmvm-v1.5](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.1.1%2Bibc-go-v7.3-wasmvm-v1.5) - 2024-04-12 + +### Dependencies + +* [\#6149](https://github.com/cosmos/ibc-go/pull/6149) Bump wasmvm to v1.5.2. + +### Bug Fixes + +* (cli) [\#5610](https://github.com/cosmos/ibc-go/pull/5610) Register wasm tx cli. + ## [v0.1.0+ibc-go-v8.0-wasmvm-v1.5](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.1.0%2Bibc-go-v7.3-wasmvm-v1.5) - 2023-12-18 From 4e0abfb28b0cda4c2a172c3c7d1b7a1f5aaee5dd Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Fri, 26 Jul 2024 09:25:51 +0200 Subject: [PATCH 33/78] fix typo --- docs/docs/02-apps/01-transfer/04-messages.md | 2 +- docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/02-apps/01-transfer/04-messages.md b/docs/docs/02-apps/01-transfer/04-messages.md index 4d121985fdc..0118b3e8166 100644 --- a/docs/docs/02-apps/01-transfer/04-messages.md +++ b/docs/docs/02-apps/01-transfer/04-messages.md @@ -63,7 +63,7 @@ Please note that the `Token` field is deprecated and users should now use `Token The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain. -If the `Amount` is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corrsponding denomination will be transferred. The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. +If the `Amount` is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corresponding denomination will be transferred. The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. ### Memo diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md index 08fc05e88c3..c2826f54426 100644 --- a/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md @@ -44,7 +44,7 @@ This message will send a fungible token to the counterparty chain represented by The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain. -If the `Amount` is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corrsponding denomination will be transferred. The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. +If the `Amount` is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corresponding denomination will be transferred. The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. ### Memo From 87ebe18db1c61c074141c4dca27e2ed07afd94e1 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Fri, 26 Jul 2024 10:20:18 +0200 Subject: [PATCH 34/78] imp: emit defaults when marshalling clienttypes.Height to json (#6640) Co-authored-by: Carlos Rodriguez --- modules/core/02-client/types/client.pb.go | 66 ++++++++++++----------- proto/ibc/core/client/v1/client.proto | 7 ++- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/modules/core/02-client/types/client.pb.go b/modules/core/02-client/types/client.pb.go index 63653c7590a..0a61762a377 100644 --- a/modules/core/02-client/types/client.pb.go +++ b/modules/core/02-client/types/client.pb.go @@ -202,11 +202,14 @@ func (m *ClientConsensusStates) GetConsensusStates() []ConsensusStateWithHeight // breaking changes In these cases, the RevisionNumber is incremented so that // height continues to be monitonically increasing even as the RevisionHeight // gets reset +// +// Please note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag. +// This enforces the Go json marshaller to always emit zero values for both revision_number and revision_height. type Height struct { // the revision that the client is currently on - RevisionNumber uint64 `protobuf:"varint,1,opt,name=revision_number,json=revisionNumber,proto3" json:"revision_number,omitempty"` + RevisionNumber uint64 `protobuf:"varint,1,opt,name=revision_number,json=revisionNumber,proto3" json:"revision_number"` // the height within the given revision - RevisionHeight uint64 `protobuf:"varint,2,opt,name=revision_height,json=revisionHeight,proto3" json:"revision_height,omitempty"` + RevisionHeight uint64 `protobuf:"varint,2,opt,name=revision_height,json=revisionHeight,proto3" json:"revision_height"` } func (m *Height) Reset() { *m = Height{} } @@ -300,35 +303,36 @@ func init() { func init() { proto.RegisterFile("ibc/core/client/v1/client.proto", fileDescriptor_b6bc4c8185546947) } var fileDescriptor_b6bc4c8185546947 = []byte{ - // 439 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcf, 0x8b, 0xd3, 0x40, - 0x14, 0xce, 0x74, 0x97, 0xb2, 0x9d, 0x4a, 0x2b, 0x61, 0x17, 0x62, 0x85, 0xb4, 0xe4, 0x62, 0x0e, - 0xee, 0x8c, 0x8d, 0x07, 0x57, 0xc1, 0x83, 0xbb, 0x17, 0xf7, 0x22, 0x12, 0x0f, 0x82, 0x20, 0x25, - 0x99, 0xcc, 0x26, 0x03, 0xc9, 0xcc, 0x92, 0x99, 0x44, 0xfa, 0x1f, 0x78, 0x14, 0xbc, 0x78, 0xdc, - 0x3f, 0x67, 0x8f, 0x3d, 0x7a, 0x12, 0x69, 0xff, 0x11, 0xc9, 0xcc, 0x14, 0x89, 0xbf, 0xf0, 0xf6, - 0xf2, 0xbd, 0x2f, 0xdf, 0xfb, 0xde, 0x37, 0x0f, 0xce, 0x59, 0x4a, 0x30, 0x11, 0x35, 0xc5, 0xa4, - 0x64, 0x94, 0x2b, 0xdc, 0x2e, 0x6d, 0x85, 0xae, 0x6b, 0xa1, 0x84, 0xeb, 0xb2, 0x94, 0xa0, 0x8e, - 0x80, 0x2c, 0xdc, 0x2e, 0x67, 0xc7, 0xb9, 0xc8, 0x85, 0x6e, 0xe3, 0xae, 0x32, 0xcc, 0xd9, 0xbd, - 0x5c, 0x88, 0xbc, 0xa4, 0x58, 0x7f, 0xa5, 0xcd, 0x15, 0x4e, 0xf8, 0xda, 0xb4, 0x82, 0x0a, 0x9e, - 0x5c, 0x66, 0x94, 0x2b, 0x76, 0xc5, 0x68, 0x76, 0xa1, 0x75, 0xde, 0xa8, 0x44, 0x51, 0xf7, 0x3e, - 0x1c, 0x19, 0xd9, 0x15, 0xcb, 0x3c, 0xb0, 0x00, 0xe1, 0x28, 0x3e, 0x32, 0xc0, 0x65, 0xe6, 0x3e, - 0x81, 0x77, 0x6c, 0x53, 0x76, 0x64, 0x6f, 0xb0, 0x00, 0xe1, 0x38, 0x3a, 0x46, 0x66, 0x0e, 0xda, - 0xcf, 0x41, 0x2f, 0xf8, 0x3a, 0x1e, 0x93, 0x9f, 0xaa, 0xc1, 0x67, 0x00, 0xbd, 0x0b, 0xc1, 0x25, - 0xe5, 0xb2, 0x91, 0x1a, 0x7a, 0xcb, 0x54, 0xf1, 0x92, 0xb2, 0xbc, 0x50, 0xee, 0x19, 0x1c, 0x16, - 0xba, 0xd2, 0xf3, 0xc6, 0xd1, 0x0c, 0xfd, 0xbe, 0x21, 0x32, 0xdc, 0xf3, 0xc3, 0xdb, 0x6f, 0x73, - 0x27, 0xb6, 0x7c, 0xf7, 0x39, 0x9c, 0x92, 0xbd, 0xea, 0x7f, 0x58, 0x9a, 0x90, 0x9e, 0x85, 0xce, - 0xd5, 0x89, 0xd9, 0xbd, 0xef, 0x4d, 0xfe, 0x3b, 0x85, 0xf7, 0xf0, 0xee, 0x2f, 0x53, 0xa5, 0x37, - 0x58, 0x1c, 0x84, 0xe3, 0xe8, 0xe1, 0x9f, 0x9c, 0xff, 0x6d, 0x6f, 0xbb, 0xcb, 0xb4, 0x6f, 0x4a, - 0x06, 0x19, 0x1c, 0xda, 0x60, 0x1e, 0xc0, 0x69, 0x4d, 0x5b, 0x26, 0x99, 0xe0, 0x2b, 0xde, 0x54, - 0x29, 0xad, 0xb5, 0x97, 0xc3, 0x78, 0xb2, 0x87, 0x5f, 0x69, 0xb4, 0x47, 0xb4, 0x51, 0x0e, 0xfa, - 0x44, 0xa3, 0xf8, 0xec, 0xe8, 0xe3, 0xcd, 0xdc, 0xf9, 0x72, 0x33, 0x77, 0x82, 0x25, 0x1c, 0xbe, - 0x4e, 0xea, 0xa4, 0x92, 0xdd, 0xcf, 0x49, 0x59, 0x8a, 0x0f, 0x34, 0x5b, 0x19, 0xd3, 0xd2, 0x03, - 0x8b, 0x83, 0x70, 0x14, 0x4f, 0x2c, 0x6c, 0x22, 0x92, 0xe7, 0xf1, 0xed, 0xd6, 0x07, 0x9b, 0xad, - 0x0f, 0xbe, 0x6f, 0x7d, 0xf0, 0x69, 0xe7, 0x3b, 0x9b, 0x9d, 0xef, 0x7c, 0xdd, 0xf9, 0xce, 0xbb, - 0xb3, 0x9c, 0xa9, 0xa2, 0x49, 0x11, 0x11, 0x15, 0x26, 0x42, 0x56, 0x42, 0x62, 0x96, 0x92, 0xd3, - 0x5c, 0xe0, 0xf6, 0x29, 0xae, 0x44, 0xd6, 0x94, 0x54, 0x9a, 0x9b, 0x7e, 0x14, 0x9d, 0xda, 0xb3, - 0x56, 0xeb, 0x6b, 0x2a, 0xd3, 0xa1, 0x7e, 0xa0, 0xc7, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xf5, - 0xca, 0xb7, 0xeb, 0xf6, 0x02, 0x00, 0x00, + // 456 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x31, 0x6f, 0xd3, 0x40, + 0x14, 0xf6, 0xa5, 0x55, 0xd4, 0x5c, 0x50, 0x82, 0x4c, 0x2b, 0x99, 0x20, 0xd9, 0x51, 0x16, 0x32, + 0xd0, 0x3b, 0x12, 0x06, 0x0a, 0x82, 0x81, 0x74, 0xa1, 0x0b, 0x42, 0x66, 0x40, 0x42, 0x42, 0x91, + 0x7d, 0xbe, 0xda, 0x27, 0xd9, 0x77, 0x95, 0xef, 0x6c, 0x94, 0x7f, 0xc0, 0x84, 0x90, 0x58, 0x18, + 0xfb, 0x73, 0x3a, 0x76, 0x64, 0xaa, 0x50, 0xb2, 0xf1, 0x2b, 0x90, 0xef, 0x2e, 0xaa, 0x5c, 0x0a, + 0x62, 0x7b, 0xf7, 0xbe, 0xef, 0xbd, 0xef, 0xfb, 0x5e, 0x62, 0x18, 0xb0, 0x98, 0x60, 0x22, 0x4a, + 0x8a, 0x49, 0xce, 0x28, 0x57, 0xb8, 0x9e, 0xd9, 0x0a, 0x9d, 0x95, 0x42, 0x09, 0xd7, 0x65, 0x31, + 0x41, 0x0d, 0x01, 0xd9, 0x76, 0x3d, 0x1b, 0xed, 0xa7, 0x22, 0x15, 0x1a, 0xc6, 0x4d, 0x65, 0x98, + 0xa3, 0xfb, 0xa9, 0x10, 0x69, 0x4e, 0xb1, 0x7e, 0xc5, 0xd5, 0x29, 0x8e, 0xf8, 0xca, 0x40, 0x93, + 0x02, 0x1e, 0x9c, 0x24, 0x94, 0x2b, 0x76, 0xca, 0x68, 0x72, 0xac, 0xf7, 0xbc, 0x53, 0x91, 0xa2, + 0xee, 0x03, 0xd8, 0x33, 0x6b, 0x97, 0x2c, 0xf1, 0xc0, 0x18, 0x4c, 0x7b, 0xe1, 0x9e, 0x69, 0x9c, + 0x24, 0xee, 0x53, 0x78, 0xc7, 0x82, 0xb2, 0x21, 0x7b, 0x9d, 0x31, 0x98, 0xf6, 0xe7, 0xfb, 0xc8, + 0xe8, 0xa0, 0xad, 0x0e, 0x7a, 0xc5, 0x57, 0x61, 0x9f, 0x5c, 0x6f, 0x9d, 0x7c, 0x03, 0xd0, 0x3b, + 0x16, 0x5c, 0x52, 0x2e, 0x2b, 0xa9, 0x5b, 0xef, 0x99, 0xca, 0x5e, 0x53, 0x96, 0x66, 0xca, 0x3d, + 0x82, 0xdd, 0x4c, 0x57, 0x5a, 0xaf, 0x3f, 0x1f, 0xa1, 0x3f, 0x13, 0x22, 0xc3, 0x5d, 0xec, 0x5e, + 0x5c, 0x05, 0x4e, 0x68, 0xf9, 0xee, 0x4b, 0x38, 0x24, 0xdb, 0xad, 0xff, 0x61, 0x69, 0x40, 0x5a, + 0x16, 0x1a, 0x57, 0x07, 0x26, 0x7b, 0xdb, 0x9b, 0xfc, 0xf7, 0x15, 0x3e, 0xc2, 0xbb, 0x37, 0x54, + 0xa5, 0xd7, 0x19, 0xef, 0x4c, 0xfb, 0xf3, 0x47, 0xb7, 0x39, 0xff, 0x5b, 0x6e, 0x9b, 0x65, 0xd8, + 0x36, 0x25, 0x27, 0x5f, 0x00, 0xec, 0xda, 0xcb, 0xbc, 0x80, 0xc3, 0x92, 0xd6, 0x4c, 0x32, 0xc1, + 0x97, 0xbc, 0x2a, 0x62, 0x5a, 0x6a, 0x33, 0xbb, 0x8b, 0x7b, 0xbf, 0xae, 0x82, 0x9b, 0x50, 0x38, + 0xd8, 0x36, 0xde, 0xe8, 0x77, 0x6b, 0xda, 0x1e, 0xb8, 0x73, 0xcb, 0xb4, 0x81, 0xae, 0xa7, 0x8d, + 0xf6, 0xf3, 0xbd, 0xcf, 0xe7, 0x81, 0xf3, 0xfd, 0x3c, 0x70, 0x26, 0x33, 0xd8, 0x7d, 0x1b, 0x95, + 0x51, 0x21, 0xdd, 0x87, 0x70, 0x18, 0xe5, 0xb9, 0xf8, 0x44, 0x93, 0xa5, 0xc9, 0x27, 0x3d, 0x30, + 0xde, 0x99, 0xf6, 0xc2, 0x81, 0x6d, 0x9b, 0x6b, 0xca, 0x45, 0x78, 0xb1, 0xf6, 0xc1, 0xe5, 0xda, + 0x07, 0x3f, 0xd7, 0x3e, 0xf8, 0xba, 0xf1, 0x9d, 0xcb, 0x8d, 0xef, 0xfc, 0xd8, 0xf8, 0xce, 0x87, + 0xa3, 0x94, 0xa9, 0xac, 0x8a, 0x11, 0x11, 0x05, 0x26, 0x42, 0x16, 0x42, 0x62, 0x16, 0x93, 0xc3, + 0x54, 0xe0, 0xfa, 0x19, 0x2e, 0x44, 0x52, 0xe5, 0x54, 0x9a, 0xbf, 0xff, 0xe3, 0xf9, 0xa1, 0xfd, + 0x02, 0xd4, 0xea, 0x8c, 0xca, 0xb8, 0xab, 0x7f, 0xcb, 0x27, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, + 0x94, 0x27, 0x25, 0x2c, 0x21, 0x03, 0x00, 0x00, } func (m *IdentifiedClientState) Marshal() (dAtA []byte, err error) { diff --git a/proto/ibc/core/client/v1/client.proto b/proto/ibc/core/client/v1/client.proto index cc245a4f98f..d2ff2a2801c 100644 --- a/proto/ibc/core/client/v1/client.proto +++ b/proto/ibc/core/client/v1/client.proto @@ -44,14 +44,17 @@ message ClientConsensusStates { // breaking changes In these cases, the RevisionNumber is incremented so that // height continues to be monitonically increasing even as the RevisionHeight // gets reset +// +// Please note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag. +// This enforces the Go json marshaller to always emit zero values for both revision_number and revision_height. message Height { option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; // the revision that the client is currently on - uint64 revision_number = 1; + uint64 revision_number = 1 [(gogoproto.jsontag) = "revision_number"]; // the height within the given revision - uint64 revision_height = 2; + uint64 revision_height = 2 [(gogoproto.jsontag) = "revision_height"]; } // Params defines the set of IBC light client parameters. From 954d8bd9ca46c5e311131a351c1957bf56aeab44 Mon Sep 17 00:00:00 2001 From: Gjermund Garaba Date: Fri, 26 Jul 2024 11:07:54 +0200 Subject: [PATCH 35/78] feat: add channel version to core app callbacks (#6902) * feat: add channel version to core app callbacks * refactor 05-port module interface signature with channel version after ctx * unwrap app version in ics29 * panic on unwrap app version and update mock apis * discard unused variables --------- Co-authored-by: DimitrisJim --- .../controller/ibc_middleware.go | 7 ++- .../controller/ibc_middleware_test.go | 14 ++--- .../27-interchain-accounts/host/ibc_module.go | 55 +++++++++--------- .../host/ibc_module_test.go | 8 +-- modules/apps/29-fee/ibc_middleware.go | 42 ++++++++++---- modules/apps/29-fee/ibc_middleware_test.go | 11 ++-- modules/apps/callbacks/ibc_middleware.go | 11 ++-- modules/apps/callbacks/ibc_middleware_test.go | 8 +-- modules/apps/transfer/ibc_module.go | 17 +++--- modules/apps/transfer/ibc_module_test.go | 8 +-- .../transfer/keeper/relay_forwarding_test.go | 2 +- modules/core/04-channel/keeper/packet.go | 56 +++++++++---------- modules/core/04-channel/keeper/packet_test.go | 39 ++++++++----- modules/core/04-channel/keeper/timeout.go | 48 ++++++++-------- .../core/04-channel/keeper/timeout_test.go | 8 ++- modules/core/05-port/types/module.go | 3 + modules/core/ante/ante.go | 2 +- modules/core/ante/ante_test.go | 4 +- modules/core/keeper/msg_server.go | 16 +++--- testing/mock/ibc_app.go | 3 + testing/mock/ibc_module.go | 12 ++-- testing/mock/middleware.go | 12 ++-- 22 files changed, 216 insertions(+), 170 deletions(-) diff --git a/modules/apps/27-interchain-accounts/controller/ibc_middleware.go b/modules/apps/27-interchain-accounts/controller/ibc_middleware.go index f6f14d894bf..595930b231b 100644 --- a/modules/apps/27-interchain-accounts/controller/ibc_middleware.go +++ b/modules/apps/27-interchain-accounts/controller/ibc_middleware.go @@ -183,6 +183,7 @@ func (im IBCMiddleware) OnChanCloseConfirm( // OnRecvPacket implements the IBCMiddleware interface func (IBCMiddleware) OnRecvPacket( ctx sdk.Context, + _ string, packet channeltypes.Packet, _ sdk.AccAddress, ) ibcexported.Acknowledgement { @@ -195,6 +196,7 @@ func (IBCMiddleware) OnRecvPacket( // OnAcknowledgementPacket implements the IBCMiddleware interface func (im IBCMiddleware) OnAcknowledgementPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, @@ -210,7 +212,7 @@ func (im IBCMiddleware) OnAcknowledgementPacket( // call underlying app's OnAcknowledgementPacket callback. if im.app != nil && im.keeper.IsMiddlewareEnabled(ctx, packet.GetSourcePort(), connectionID) { - return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) + return im.app.OnAcknowledgementPacket(ctx, channelVersion, packet, acknowledgement, relayer) } return nil @@ -219,6 +221,7 @@ func (im IBCMiddleware) OnAcknowledgementPacket( // OnTimeoutPacket implements the IBCMiddleware interface func (im IBCMiddleware) OnTimeoutPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) error { @@ -236,7 +239,7 @@ func (im IBCMiddleware) OnTimeoutPacket( } if im.app != nil && im.keeper.IsMiddlewareEnabled(ctx, packet.GetSourcePort(), connectionID) { - return im.app.OnTimeoutPacket(ctx, packet, relayer) + return im.app.OnTimeoutPacket(ctx, channelVersion, packet, relayer) } return nil diff --git a/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go b/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go index 0028b325fd8..420771e8f5c 100644 --- a/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go +++ b/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go @@ -577,7 +577,7 @@ func (suite *InterchainAccountsTestSuite) TestOnRecvPacket() { ) ctx := suite.chainA.GetContext() - ack := cbs.OnRecvPacket(ctx, packet, nil) + ack := cbs.OnRecvPacket(ctx, path.EndpointA.GetChannel().Version, packet, nil) suite.Require().Equal(tc.expPass, ack.Success()) expectedEvents := sdk.Events{ @@ -621,7 +621,7 @@ func (suite *InterchainAccountsTestSuite) TestOnAcknowledgementPacket() { { "ICA auth module callback fails", func() { suite.chainA.GetSimApp().ICAAuthModule.IBCApp.OnAcknowledgementPacket = func( - ctx sdk.Context, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, + ctx sdk.Context, channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, ) error { return fmt.Errorf("mock ica auth fails") } @@ -637,7 +637,7 @@ func (suite *InterchainAccountsTestSuite) TestOnAcknowledgementPacket() { suite.chainA.GetSimApp().ICAControllerKeeper.DeleteMiddlewareEnabled(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ConnectionID) suite.chainA.GetSimApp().ICAAuthModule.IBCApp.OnAcknowledgementPacket = func( - ctx sdk.Context, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, + ctx sdk.Context, channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, ) error { return fmt.Errorf("error should be unreachable") } @@ -682,7 +682,7 @@ func (suite *InterchainAccountsTestSuite) TestOnAcknowledgementPacket() { cbs = controller.NewIBCMiddleware(suite.chainA.GetSimApp().ICAControllerKeeper) } - err = cbs.OnAcknowledgementPacket(suite.chainA.GetContext(), packet, []byte("ack"), nil) + err = cbs.OnAcknowledgementPacket(suite.chainA.GetContext(), path.EndpointA.GetChannel().Version, packet, []byte("ack"), nil) if tc.expPass { suite.Require().NoError(err) @@ -718,7 +718,7 @@ func (suite *InterchainAccountsTestSuite) TestOnTimeoutPacket() { { "ICA auth module callback fails", func() { suite.chainA.GetSimApp().ICAAuthModule.IBCApp.OnTimeoutPacket = func( - ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, + ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) error { return fmt.Errorf("mock ica auth fails") } @@ -734,7 +734,7 @@ func (suite *InterchainAccountsTestSuite) TestOnTimeoutPacket() { suite.chainA.GetSimApp().ICAControllerKeeper.DeleteMiddlewareEnabled(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ConnectionID) suite.chainA.GetSimApp().ICAAuthModule.IBCApp.OnTimeoutPacket = func( - ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, + ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) error { return fmt.Errorf("error should be unreachable") } @@ -779,7 +779,7 @@ func (suite *InterchainAccountsTestSuite) TestOnTimeoutPacket() { cbs = controller.NewIBCMiddleware(suite.chainA.GetSimApp().ICAControllerKeeper) } - err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), packet, nil) + err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), path.EndpointA.GetChannel().Version, packet, nil) if tc.expPass { suite.Require().NoError(err) diff --git a/modules/apps/27-interchain-accounts/host/ibc_module.go b/modules/apps/27-interchain-accounts/host/ibc_module.go index 7e9d2eaed23..18339a7f9f8 100644 --- a/modules/apps/27-interchain-accounts/host/ibc_module.go +++ b/modules/apps/27-interchain-accounts/host/ibc_module.go @@ -37,14 +37,14 @@ func NewIBCModule(k keeper.Keeper) IBCModule { // OnChanOpenInit implements the IBCModule interface func (IBCModule) OnChanOpenInit( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID string, - channelID string, - chanCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - version string, + _ sdk.Context, + _ channeltypes.Order, + _ []string, + _ string, + _ string, + _ *capabilitytypes.Capability, + _ channeltypes.Counterparty, + _ string, ) (string, error) { return "", errorsmod.Wrap(icatypes.ErrInvalidChannelFlow, "channel handshake must be initiated by controller chain") } @@ -69,11 +69,11 @@ func (im IBCModule) OnChanOpenTry( // OnChanOpenAck implements the IBCModule interface func (IBCModule) OnChanOpenAck( - ctx sdk.Context, - portID, - channelID string, - counterpartyChannelID string, - counterpartyVersion string, + _ sdk.Context, + _, + _ string, + _ string, + _ string, ) error { return errorsmod.Wrap(icatypes.ErrInvalidChannelFlow, "channel handshake must be initiated by controller chain") } @@ -93,9 +93,9 @@ func (im IBCModule) OnChanOpenConfirm( // OnChanCloseInit implements the IBCModule interface func (IBCModule) OnChanCloseInit( - ctx sdk.Context, - portID, - channelID string, + _ sdk.Context, + _ string, + _ string, ) error { // Disallow user-initiated channel closing for interchain account channels return errorsmod.Wrap(ibcerrors.ErrInvalidRequest, "user cannot close channel") @@ -113,6 +113,7 @@ func (im IBCModule) OnChanCloseConfirm( // OnRecvPacket implements the IBCModule interface func (im IBCModule) OnRecvPacket( ctx sdk.Context, + _ string, packet channeltypes.Packet, _ sdk.AccAddress, ) ibcexported.Acknowledgement { @@ -140,25 +141,27 @@ func (im IBCModule) OnRecvPacket( // OnAcknowledgementPacket implements the IBCModule interface func (IBCModule) OnAcknowledgementPacket( - ctx sdk.Context, - packet channeltypes.Packet, - acknowledgement []byte, - relayer sdk.AccAddress, + _ sdk.Context, + _ string, + _ channeltypes.Packet, + _ []byte, + _ sdk.AccAddress, ) error { return errorsmod.Wrap(icatypes.ErrInvalidChannelFlow, "cannot receive acknowledgement on a host channel end, a host chain does not send a packet over the channel") } // OnTimeoutPacket implements the IBCModule interface func (IBCModule) OnTimeoutPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, + _ sdk.Context, + _ string, + _ channeltypes.Packet, + _ sdk.AccAddress, ) error { return errorsmod.Wrap(icatypes.ErrInvalidChannelFlow, "cannot cause a packet timeout on a host channel end, a host chain does not send a packet over the channel") } // OnChanUpgradeInit implements the IBCModule interface -func (IBCModule) OnChanUpgradeInit(ctx sdk.Context, portID, channelID string, proposedOrder channeltypes.Order, proposedConnectionHops []string, proposedVersion string) (string, error) { +func (IBCModule) OnChanUpgradeInit(_ sdk.Context, _, _ string, _ channeltypes.Order, _ []string, _ string) (string, error) { return "", errorsmod.Wrap(icatypes.ErrInvalidChannelFlow, "channel upgrade handshake must be initiated by controller chain") } @@ -172,12 +175,12 @@ func (im IBCModule) OnChanUpgradeTry(ctx sdk.Context, portID, channelID string, } // OnChanUpgradeAck implements the IBCModule interface -func (IBCModule) OnChanUpgradeAck(ctx sdk.Context, portID, channelID, counterpartyVersion string) error { +func (IBCModule) OnChanUpgradeAck(_ sdk.Context, _, _, _ string) error { return errorsmod.Wrap(icatypes.ErrInvalidChannelFlow, "channel upgrade handshake must be initiated by controller chain") } // OnChanUpgradeOpen implements the IBCModule interface -func (IBCModule) OnChanUpgradeOpen(ctx sdk.Context, portID, channelID string, proposedOrder channeltypes.Order, proposedConnectionHops []string, proposedVersion string) { +func (IBCModule) OnChanUpgradeOpen(_ sdk.Context, _, _ string, _ channeltypes.Order, _ []string, _ string) { } // UnmarshalPacketData attempts to unmarshal the provided packet data bytes diff --git a/modules/apps/27-interchain-accounts/host/ibc_module_test.go b/modules/apps/27-interchain-accounts/host/ibc_module_test.go index d13d71c3d52..cce0a8c76ee 100644 --- a/modules/apps/27-interchain-accounts/host/ibc_module_test.go +++ b/modules/apps/27-interchain-accounts/host/ibc_module_test.go @@ -424,7 +424,7 @@ func (suite *InterchainAccountsTestSuite) TestOnRecvPacket() { { "success with ICA auth module callback failure", func() { suite.chainB.GetSimApp().ICAAuthModule.IBCApp.OnRecvPacket = func( - ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, + ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) exported.Acknowledgement { return channeltypes.NewErrorAcknowledgement(fmt.Errorf("failed OnRecvPacket mock callback")) } @@ -503,7 +503,7 @@ func (suite *InterchainAccountsTestSuite) TestOnRecvPacket() { suite.Require().True(ok) ctx := suite.chainB.GetContext() - ack := cbs.OnRecvPacket(ctx, packet, nil) + ack := cbs.OnRecvPacket(ctx, path.EndpointB.GetChannel().Version, packet, nil) expectedAttributes := []sdk.Attribute{ sdk.NewAttribute(sdk.AttributeKeyModule, icatypes.ModuleName), @@ -587,7 +587,7 @@ func (suite *InterchainAccountsTestSuite) TestOnAcknowledgementPacket() { 0, ) - err = cbs.OnAcknowledgementPacket(suite.chainB.GetContext(), packet, []byte("ackBytes"), nil) + err = cbs.OnAcknowledgementPacket(suite.chainB.GetContext(), path.EndpointB.GetChannel().Version, packet, []byte("ackBytes"), nil) if tc.expPass { suite.Require().NoError(err) @@ -642,7 +642,7 @@ func (suite *InterchainAccountsTestSuite) TestOnTimeoutPacket() { 0, ) - err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), packet, nil) + err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), path.EndpointA.GetChannel().Version, packet, nil) if tc.expPass { suite.Require().NoError(err) diff --git a/modules/apps/29-fee/ibc_middleware.go b/modules/apps/29-fee/ibc_middleware.go index 8869342d02e..be979487ddb 100644 --- a/modules/apps/29-fee/ibc_middleware.go +++ b/modules/apps/29-fee/ibc_middleware.go @@ -218,14 +218,16 @@ func (im IBCMiddleware) OnChanCloseConfirm( // If fees are not enabled, this callback will default to the ibc-core packet callback func (im IBCMiddleware) OnRecvPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) exported.Acknowledgement { if !im.keeper.IsFeeEnabled(ctx, packet.DestinationPort, packet.DestinationChannel) { - return im.app.OnRecvPacket(ctx, packet, relayer) + return im.app.OnRecvPacket(ctx, channelVersion, packet, relayer) } - ack := im.app.OnRecvPacket(ctx, packet, relayer) + appVersion := unwrapAppVersion(channelVersion) + ack := im.app.OnRecvPacket(ctx, appVersion, packet, relayer) // in case of async acknowledgement (ack == nil) store the relayer address for use later during async WriteAcknowledgement if ack == nil { @@ -243,14 +245,17 @@ func (im IBCMiddleware) OnRecvPacket( // If fees are not enabled, this callback will default to the ibc-core packet callback func (im IBCMiddleware) OnAcknowledgementPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, ) error { if !im.keeper.IsFeeEnabled(ctx, packet.SourcePort, packet.SourceChannel) { - return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) + return im.app.OnAcknowledgementPacket(ctx, channelVersion, packet, acknowledgement, relayer) } + appVersion := unwrapAppVersion(channelVersion) + var ack types.IncentivizedAcknowledgement if err := json.Unmarshal(acknowledgement, &ack); err != nil { return errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS-29 incentivized packet acknowledgement %v: %s", ack, err) @@ -265,14 +270,14 @@ func (im IBCMiddleware) OnAcknowledgementPacket( // for fee enabled channels // // Please see ADR 004 for more information. - return im.app.OnAcknowledgementPacket(ctx, packet, ack.AppAcknowledgement, relayer) + return im.app.OnAcknowledgementPacket(ctx, appVersion, packet, ack.AppAcknowledgement, relayer) } packetID := channeltypes.NewPacketID(packet.SourcePort, packet.SourceChannel, packet.Sequence) feesInEscrow, found := im.keeper.GetFeesInEscrow(ctx, packetID) if !found { // call underlying callback - return im.app.OnAcknowledgementPacket(ctx, packet, ack.AppAcknowledgement, relayer) + return im.app.OnAcknowledgementPacket(ctx, appVersion, packet, ack.AppAcknowledgement, relayer) } payee, found := im.keeper.GetPayeeAddress(ctx, relayer.String(), packet.SourceChannel) @@ -288,30 +293,37 @@ func (im IBCMiddleware) OnAcknowledgementPacket( im.keeper.DistributePacketFeesOnAcknowledgement(ctx, ack.ForwardRelayerAddress, payeeAddr, feesInEscrow.PacketFees, packetID) // call underlying callback - return im.app.OnAcknowledgementPacket(ctx, packet, ack.AppAcknowledgement, relayer) + return im.app.OnAcknowledgementPacket(ctx, appVersion, packet, ack.AppAcknowledgement, relayer) } // OnTimeoutPacket implements the IBCMiddleware interface // If fees are not enabled, this callback will default to the ibc-core packet callback func (im IBCMiddleware) OnTimeoutPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) error { + if !im.keeper.IsFeeEnabled(ctx, packet.SourcePort, packet.SourceChannel) { + return im.app.OnTimeoutPacket(ctx, channelVersion, packet, relayer) + } + + appVersion := unwrapAppVersion(channelVersion) + // if the fee keeper is locked then fee logic should be skipped // this may occur in the presence of a severe bug which leads to invalid state // the fee keeper will be unlocked after manual intervention // // Please see ADR 004 for more information. - if !im.keeper.IsFeeEnabled(ctx, packet.SourcePort, packet.SourceChannel) || im.keeper.IsLocked(ctx) { - return im.app.OnTimeoutPacket(ctx, packet, relayer) + if im.keeper.IsLocked(ctx) { + return im.app.OnTimeoutPacket(ctx, appVersion, packet, relayer) } packetID := channeltypes.NewPacketID(packet.SourcePort, packet.SourceChannel, packet.Sequence) feesInEscrow, found := im.keeper.GetFeesInEscrow(ctx, packetID) if !found { // call underlying callback - return im.app.OnTimeoutPacket(ctx, packet, relayer) + return im.app.OnTimeoutPacket(ctx, appVersion, packet, relayer) } payee, found := im.keeper.GetPayeeAddress(ctx, relayer.String(), packet.SourceChannel) @@ -327,7 +339,7 @@ func (im IBCMiddleware) OnTimeoutPacket( im.keeper.DistributePacketFeesOnTimeout(ctx, payeeAddr, feesInEscrow.PacketFees, packetID) // call underlying callback - return im.app.OnTimeoutPacket(ctx, packet, relayer) + return im.app.OnTimeoutPacket(ctx, appVersion, packet, relayer) } // OnChanUpgradeInit implements the IBCModule interface @@ -482,3 +494,13 @@ func (im IBCMiddleware) UnmarshalPacketData(ctx sdk.Context, portID, channelID s return unmarshaler.UnmarshalPacketData(ctx, portID, channelID, bz) } + +func unwrapAppVersion(channelVersion string) string { + metadata, err := types.MetadataFromVersion(channelVersion) + if err != nil { + // This should not happen, as it would mean that the channel is broken. Only a severe bug would cause this. + panic(errorsmod.Wrap(err, "failed to unwrap app version from channel version")) + } + + return metadata.AppVersion +} diff --git a/modules/apps/29-fee/ibc_middleware_test.go b/modules/apps/29-fee/ibc_middleware_test.go index f73d66235d6..7f1948482ba 100644 --- a/modules/apps/29-fee/ibc_middleware_test.go +++ b/modules/apps/29-fee/ibc_middleware_test.go @@ -514,6 +514,7 @@ func (suite *FeeTestSuite) TestOnRecvPacket() { // setup mock callback suite.chainB.GetSimApp().FeeMockModule.IBCApp.OnRecvPacket = func( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) exported.Acknowledgement { @@ -566,7 +567,7 @@ func (suite *FeeTestSuite) TestOnRecvPacket() { // malleate test case tc.malleate() - result := cbs.OnRecvPacket(suite.chainB.GetContext(), packet, suite.chainA.SenderAccount.GetAddress()) + result := cbs.OnRecvPacket(suite.chainB.GetContext(), suite.path.EndpointB.GetChannel().Version, packet, suite.chainA.SenderAccount.GetAddress()) switch { case tc.name == "success": @@ -799,7 +800,7 @@ func (suite *FeeTestSuite) TestOnAcknowledgementPacket() { { "application callback fails", func() { - suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnAcknowledgementPacket = func(_ sdk.Context, _ channeltypes.Packet, _ []byte, _ sdk.AccAddress) error { + suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnAcknowledgementPacket = func(_ sdk.Context, _ string, _ channeltypes.Packet, _ []byte, _ sdk.AccAddress) error { return fmt.Errorf("mock fee app callback fails") } }, @@ -840,7 +841,7 @@ func (suite *FeeTestSuite) TestOnAcknowledgementPacket() { cbs, ok := suite.chainA.App.GetIBCKeeper().PortKeeper.Route(module) suite.Require().True(ok) - err = cbs.OnAcknowledgementPacket(suite.chainA.GetContext(), packet, ack, relayerAddr) + err = cbs.OnAcknowledgementPacket(suite.chainA.GetContext(), suite.path.EndpointA.GetChannel().Version, packet, ack, relayerAddr) if tc.expPass { suite.Require().NoError(err) @@ -1013,7 +1014,7 @@ func (suite *FeeTestSuite) TestOnTimeoutPacket() { { "application callback fails", func() { - suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnTimeoutPacket = func(_ sdk.Context, _ channeltypes.Packet, _ sdk.AccAddress) error { + suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnTimeoutPacket = func(_ sdk.Context, _ string, _ channeltypes.Packet, _ sdk.AccAddress) error { return fmt.Errorf("mock fee app callback fails") } }, @@ -1051,7 +1052,7 @@ func (suite *FeeTestSuite) TestOnTimeoutPacket() { cbs, ok := suite.chainA.App.GetIBCKeeper().PortKeeper.Route(module) suite.Require().True(ok) - err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), packet, relayerAddr) + err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), suite.path.EndpointA.GetChannel().Version, packet, relayerAddr) if tc.expPass { suite.Require().NoError(err) diff --git a/modules/apps/callbacks/ibc_middleware.go b/modules/apps/callbacks/ibc_middleware.go index ef6dbcbbfd0..dfe21cc8547 100644 --- a/modules/apps/callbacks/ibc_middleware.go +++ b/modules/apps/callbacks/ibc_middleware.go @@ -130,12 +130,13 @@ func (im IBCMiddleware) SendPacket( // reverted via a panic. func (im IBCMiddleware) OnAcknowledgementPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, ) error { // we first call the underlying app to handle the acknowledgement - err := im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) + err := im.app.OnAcknowledgementPacket(ctx, channelVersion, packet, acknowledgement, relayer) if err != nil { return err } @@ -168,8 +169,8 @@ func (im IBCMiddleware) OnAcknowledgementPacket( // It defers to the underlying application and then calls the contract callback. // If the contract callback runs out of gas and may be retried with a higher gas limit then the state changes are // reverted via a panic. -func (im IBCMiddleware) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) error { - err := im.app.OnTimeoutPacket(ctx, packet, relayer) +func (im IBCMiddleware) OnTimeoutPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress) error { + err := im.app.OnTimeoutPacket(ctx, channelVersion, packet, relayer) if err != nil { return err } @@ -201,8 +202,8 @@ func (im IBCMiddleware) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Pac // It defers to the underlying application and then calls the contract callback. // If the contract callback runs out of gas and may be retried with a higher gas limit then the state changes are // reverted via a panic. -func (im IBCMiddleware) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) ibcexported.Acknowledgement { - ack := im.app.OnRecvPacket(ctx, packet, relayer) +func (im IBCMiddleware) OnRecvPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress) ibcexported.Acknowledgement { + ack := im.app.OnRecvPacket(ctx, channelVersion, packet, relayer) // if ack is nil (asynchronous acknowledgements), then the callback will be handled in WriteAcknowledgement // if ack is not successful, all state changes are reverted. If a packet cannot be received, then there is // no need to execute a callback on the receiving chain. diff --git a/modules/apps/callbacks/ibc_middleware_test.go b/modules/apps/callbacks/ibc_middleware_test.go index 25bc6db3785..e87c2317fd0 100644 --- a/modules/apps/callbacks/ibc_middleware_test.go +++ b/modules/apps/callbacks/ibc_middleware_test.go @@ -355,7 +355,7 @@ func (s *CallbacksTestSuite) TestOnAcknowledgementPacket() { s.Require().True(ok) onAcknowledgementPacket := func() error { - return transferStack.OnAcknowledgementPacket(ctx, packet, ack, s.chainA.SenderAccount.GetAddress()) + return transferStack.OnAcknowledgementPacket(ctx, s.path.EndpointA.GetChannel().Version, packet, ack, s.chainA.SenderAccount.GetAddress()) } switch tc.expError { @@ -519,7 +519,7 @@ func (s *CallbacksTestSuite) TestOnTimeoutPacket() { s.Require().True(ok) onTimeoutPacket := func() error { - return transferStack.OnTimeoutPacket(ctx, packet, s.chainA.SenderAccount.GetAddress()) + return transferStack.OnTimeoutPacket(ctx, s.path.EndpointA.GetChannel().Version, packet, s.chainA.SenderAccount.GetAddress()) } switch expValue := tc.expValue.(type) { @@ -687,7 +687,7 @@ func (s *CallbacksTestSuite) TestOnRecvPacket() { s.Require().True(ok) onRecvPacket := func() ibcexported.Acknowledgement { - return transferStack.OnRecvPacket(ctx, packet, s.chainB.SenderAccount.GetAddress()) + return transferStack.OnRecvPacket(ctx, s.path.EndpointA.GetChannel().Version, packet, s.chainB.SenderAccount.GetAddress()) } switch tc.expAck { @@ -1132,7 +1132,7 @@ func (s *CallbacksTestSuite) TestOnRecvPacketAsyncAck() { 0, ) - ack := mockFeeCallbackStack.OnRecvPacket(s.chainA.GetContext(), packet, s.chainA.SenderAccount.GetAddress()) + ack := mockFeeCallbackStack.OnRecvPacket(s.chainA.GetContext(), ibcmock.MockFeeVersion, packet, s.chainA.SenderAccount.GetAddress()) s.Require().Nil(ack) s.AssertHasExecutedExpectedCallback("none", true) } diff --git a/modules/apps/transfer/ibc_module.go b/modules/apps/transfer/ibc_module.go index d588128943c..4af345c339a 100644 --- a/modules/apps/transfer/ibc_module.go +++ b/modules/apps/transfer/ibc_module.go @@ -180,6 +180,7 @@ func (IBCModule) OnChanCloseConfirm( // A nil acknowledgement may be returned when using the packet forwarding feature. This signals to core IBC that the acknowledgement will be written asynchronously. func (im IBCModule) OnRecvPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) ibcexported.Acknowledgement { @@ -196,7 +197,7 @@ func (im IBCModule) OnRecvPacket( events.EmitOnRecvPacketEvent(ctx, data, ack, ackErr) }() - data, ackErr = im.getICS20PacketData(ctx, packet.GetData(), packet.GetDestPort(), packet.GetDestChannel()) + data, ackErr = types.UnmarshalPacketData(packet.GetData(), channelVersion) if ackErr != nil { ack = channeltypes.NewErrorAcknowledgement(ackErr) im.keeper.Logger(ctx).Error(fmt.Sprintf("%s sequence %d", ackErr.Error(), packet.Sequence)) @@ -223,6 +224,7 @@ func (im IBCModule) OnRecvPacket( // OnAcknowledgementPacket implements the IBCModule interface func (im IBCModule) OnAcknowledgementPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, @@ -232,7 +234,7 @@ func (im IBCModule) OnAcknowledgementPacket( return errorsmod.Wrapf(ibcerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) } - data, err := im.getICS20PacketData(ctx, packet.GetData(), packet.GetSourcePort(), packet.GetSourceChannel()) + data, err := types.UnmarshalPacketData(packet.GetData(), channelVersion) if err != nil { return err } @@ -249,10 +251,11 @@ func (im IBCModule) OnAcknowledgementPacket( // OnTimeoutPacket implements the IBCModule interface func (im IBCModule) OnTimeoutPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) error { - data, err := im.getICS20PacketData(ctx, packet.GetData(), packet.GetSourcePort(), packet.GetSourceChannel()) + data, err := types.UnmarshalPacketData(packet.GetData(), channelVersion) if err != nil { return err } @@ -310,16 +313,10 @@ func (IBCModule) OnChanUpgradeOpen(ctx sdk.Context, portID, channelID string, pr // into a FungibleTokenPacketData. This function implements the optional // PacketDataUnmarshaler interface required for ADR 008 support. func (im IBCModule) UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, error) { - return im.getICS20PacketData(ctx, bz, portID, channelID) -} - -// getICS20PacketData determines the current version of ICS20 and unmarshals the packet data into either a FungibleTokenPacketData -// or a FungibleTokenPacketDataV2 depending on the application version. -func (im IBCModule) getICS20PacketData(ctx sdk.Context, packetData []byte, portID, channelID string) (types.FungibleTokenPacketDataV2, error) { ics20Version, found := im.keeper.GetICS4Wrapper().GetAppVersion(ctx, portID, channelID) if !found { return types.FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrNotFound, "app version not found for port %s and channel %s", portID, channelID) } - return types.UnmarshalPacketData(packetData, ics20Version) + return types.UnmarshalPacketData(bz, ics20Version) } diff --git a/modules/apps/transfer/ibc_module_test.go b/modules/apps/transfer/ibc_module_test.go index 2beb583cc5a..4dd4a505fd5 100644 --- a/modules/apps/transfer/ibc_module_test.go +++ b/modules/apps/transfer/ibc_module_test.go @@ -403,7 +403,7 @@ func (suite *TransferTestSuite) TestOnRecvPacket() { tc.malleate() // change fields in packet - ack := cbs.OnRecvPacket(ctx, packet, suite.chainB.SenderAccount.GetAddress()) + ack := cbs.OnRecvPacket(ctx, path.EndpointB.GetChannel().Version, packet, suite.chainB.SenderAccount.GetAddress()) suite.Require().Equal(tc.expAck, ack) @@ -448,7 +448,7 @@ func (suite *TransferTestSuite) TestOnTimeoutPacket() { func() { packet.SourceChannel = "channel-100" }, - ibcerrors.ErrNotFound, + errors.New("unable to unescrow tokens"), }, { "invalid packet data", @@ -468,7 +468,7 @@ func (suite *TransferTestSuite) TestOnTimeoutPacket() { cbs, ok := suite.chainA.App.GetIBCKeeper().PortKeeper.Route(module) suite.Require().True(ok) - suite.Require().NoError(cbs.OnTimeoutPacket(suite.chainA.GetContext(), packet, suite.chainA.SenderAccount.GetAddress())) + suite.Require().NoError(cbs.OnTimeoutPacket(suite.chainA.GetContext(), path.EndpointA.GetChannel().Version, packet, suite.chainA.SenderAccount.GetAddress())) }, errors.New("unable to unescrow tokens"), }, @@ -508,7 +508,7 @@ func (suite *TransferTestSuite) TestOnTimeoutPacket() { tc.malleate() // change fields in packet - err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), packet, suite.chainA.SenderAccount.GetAddress()) + err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), path.EndpointA.GetChannel().Version, packet, suite.chainA.SenderAccount.GetAddress()) expPass := tc.expError == nil if expPass { diff --git a/modules/apps/transfer/keeper/relay_forwarding_test.go b/modules/apps/transfer/keeper/relay_forwarding_test.go index 9ba70cbe8db..542af7a4f59 100644 --- a/modules/apps/transfer/keeper/relay_forwarding_test.go +++ b/modules/apps/transfer/keeper/relay_forwarding_test.go @@ -982,7 +982,7 @@ func (suite *ForwardingTestSuite) TestOnTimeoutPacketForwarding() { suite.Require().True(ok) // Trigger OnTimeoutPacket for chainB - err = cbs.OnTimeoutPacket(suite.chainB.GetContext(), packet, nil) + err = cbs.OnTimeoutPacket(suite.chainB.GetContext(), pathBtoC.EndpointA.GetChannel().Version, packet, nil) suite.Require().NoError(err) // Ensure that chainB has an ack. diff --git a/modules/core/04-channel/keeper/packet.go b/modules/core/04-channel/keeper/packet.go index f56b578096f..04f8768a712 100644 --- a/modules/core/04-channel/keeper/packet.go +++ b/modules/core/04-channel/keeper/packet.go @@ -111,14 +111,14 @@ func (k *Keeper) RecvPacket( packet types.Packet, proof []byte, proofHeight exported.Height, -) error { +) (string, error) { channel, found := k.GetChannel(ctx, packet.GetDestPort(), packet.GetDestChannel()) if !found { - return errorsmod.Wrap(types.ErrChannelNotFound, packet.GetDestChannel()) + return "", errorsmod.Wrap(types.ErrChannelNotFound, packet.GetDestChannel()) } if !slices.Contains([]types.State{types.OPEN, types.FLUSHING, types.FLUSHCOMPLETE}, channel.State) { - return errorsmod.Wrapf(types.ErrInvalidChannelState, "expected channel state to be one of [%s, %s, %s], but got %s", types.OPEN, types.FLUSHING, types.FLUSHCOMPLETE, channel.State) + return "", errorsmod.Wrapf(types.ErrInvalidChannelState, "expected channel state to be one of [%s, %s, %s], but got %s", types.OPEN, types.FLUSHING, types.FLUSHCOMPLETE, channel.State) } // If counterpartyUpgrade is stored we need to ensure that the @@ -130,14 +130,14 @@ func (k *Keeper) RecvPacket( if found { counterpartyNextSequenceSend := counterpartyUpgrade.NextSequenceSend if packet.GetSequence() >= counterpartyNextSequenceSend { - return errorsmod.Wrapf(types.ErrInvalidPacket, "cannot flush packet at sequence greater than or equal to counterparty next sequence send (%d) ≥ (%d).", packet.GetSequence(), counterpartyNextSequenceSend) + return "", errorsmod.Wrapf(types.ErrInvalidPacket, "cannot flush packet at sequence greater than or equal to counterparty next sequence send (%d) ≥ (%d).", packet.GetSequence(), counterpartyNextSequenceSend) } } // Authenticate capability to ensure caller has authority to receive packet on this channel capName := host.ChannelCapabilityPath(packet.GetDestPort(), packet.GetDestChannel()) if !k.scopedKeeper.AuthenticateCapability(ctx, chanCap, capName) { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidChannelCapability, "channel capability failed authentication for capability name %s", capName, ) @@ -145,14 +145,14 @@ func (k *Keeper) RecvPacket( // packet must come from the channel's counterparty if packet.GetSourcePort() != channel.Counterparty.PortId { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidPacket, "packet source port doesn't match the counterparty's port (%s ≠ %s)", packet.GetSourcePort(), channel.Counterparty.PortId, ) } if packet.GetSourceChannel() != channel.Counterparty.ChannelId { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidPacket, "packet source channel doesn't match the counterparty's channel (%s ≠ %s)", packet.GetSourceChannel(), channel.Counterparty.ChannelId, ) @@ -163,18 +163,18 @@ func (k *Keeper) RecvPacket( // connection and channel must both be open connectionEnd, found := k.connectionKeeper.GetConnection(ctx, channel.ConnectionHops[0]) if !found { - return errorsmod.Wrap(connectiontypes.ErrConnectionNotFound, channel.ConnectionHops[0]) + return "", errorsmod.Wrap(connectiontypes.ErrConnectionNotFound, channel.ConnectionHops[0]) } if connectionEnd.State != connectiontypes.OPEN { - return errorsmod.Wrapf(connectiontypes.ErrInvalidConnectionState, "connection state is not OPEN (got %s)", connectionEnd.State) + return "", errorsmod.Wrapf(connectiontypes.ErrInvalidConnectionState, "connection state is not OPEN (got %s)", connectionEnd.State) } // check if packet timed out by comparing it with the latest height of the chain selfHeight, selfTimestamp := clienttypes.GetSelfHeight(ctx), uint64(ctx.BlockTime().UnixNano()) timeout := types.NewTimeout(packet.GetTimeoutHeight().(clienttypes.Height), packet.GetTimeoutTimestamp()) if timeout.Elapsed(selfHeight, selfTimestamp) { - return errorsmod.Wrap(timeout.ErrTimeoutElapsed(selfHeight, selfTimestamp), "packet timeout elapsed") + return "", errorsmod.Wrap(timeout.ErrTimeoutElapsed(selfHeight, selfTimestamp), "packet timeout elapsed") } commitment := types.CommitPacket(k.cdc, packet) @@ -185,11 +185,11 @@ func (k *Keeper) RecvPacket( packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence(), commitment, ); err != nil { - return errorsmod.Wrap(err, "couldn't verify counterparty packet commitment") + return "", errorsmod.Wrap(err, "couldn't verify counterparty packet commitment") } if err := k.applyReplayProtection(ctx, packet, channel); err != nil { - return err + return "", err } // log that a packet has been received & executed @@ -205,7 +205,7 @@ func (k *Keeper) RecvPacket( // emit an event that the relayer can query for emitRecvPacketEvent(ctx, packet, channel) - return nil + return channel.Version, nil } // applyReplayProtection ensures a packet has not already been received @@ -374,23 +374,23 @@ func (k *Keeper) AcknowledgePacket( acknowledgement []byte, proof []byte, proofHeight exported.Height, -) error { +) (string, error) { channel, found := k.GetChannel(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) if !found { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrChannelNotFound, "port ID (%s) channel ID (%s)", packet.GetSourcePort(), packet.GetSourceChannel(), ) } if !slices.Contains([]types.State{types.OPEN, types.FLUSHING}, channel.State) { - return errorsmod.Wrapf(types.ErrInvalidChannelState, "packets cannot be acknowledged on channel with state (%s)", channel.State) + return "", errorsmod.Wrapf(types.ErrInvalidChannelState, "packets cannot be acknowledged on channel with state (%s)", channel.State) } // Authenticate capability to ensure caller has authority to receive packet on this channel capName := host.ChannelCapabilityPath(packet.GetSourcePort(), packet.GetSourceChannel()) if !k.scopedKeeper.AuthenticateCapability(ctx, chanCap, capName) { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidChannelCapability, "channel capability failed authentication for capability name %s", capName, ) @@ -398,14 +398,14 @@ func (k *Keeper) AcknowledgePacket( // packet must have been sent to the channel's counterparty if packet.GetDestPort() != channel.Counterparty.PortId { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidPacket, "packet destination port doesn't match the counterparty's port (%s ≠ %s)", packet.GetDestPort(), channel.Counterparty.PortId, ) } if packet.GetDestChannel() != channel.Counterparty.ChannelId { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidPacket, "packet destination channel doesn't match the counterparty's channel (%s ≠ %s)", packet.GetDestChannel(), channel.Counterparty.ChannelId, ) @@ -413,11 +413,11 @@ func (k *Keeper) AcknowledgePacket( connectionEnd, found := k.connectionKeeper.GetConnection(ctx, channel.ConnectionHops[0]) if !found { - return errorsmod.Wrap(connectiontypes.ErrConnectionNotFound, channel.ConnectionHops[0]) + return "", errorsmod.Wrap(connectiontypes.ErrConnectionNotFound, channel.ConnectionHops[0]) } if connectionEnd.State != connectiontypes.OPEN { - return errorsmod.Wrapf(connectiontypes.ErrInvalidConnectionState, "connection state is not OPEN (got %s)", connectionEnd.State) + return "", errorsmod.Wrapf(connectiontypes.ErrInvalidConnectionState, "connection state is not OPEN (got %s)", connectionEnd.State) } commitment := k.GetPacketCommitment(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) @@ -428,35 +428,35 @@ func (k *Keeper) AcknowledgePacket( // or there is a misconfigured relayer attempting to prove an acknowledgement // for a packet never sent. Core IBC will treat this error as a no-op in order to // prevent an entire relay transaction from failing and consuming unnecessary fees. - return types.ErrNoOpMsg + return "", types.ErrNoOpMsg } packetCommitment := types.CommitPacket(k.cdc, packet) // verify we sent the packet and haven't cleared it out yet if !bytes.Equal(commitment, packetCommitment) { - return errorsmod.Wrapf(types.ErrInvalidPacket, "commitment bytes are not equal: got (%v), expected (%v)", packetCommitment, commitment) + return "", errorsmod.Wrapf(types.ErrInvalidPacket, "commitment bytes are not equal: got (%v), expected (%v)", packetCommitment, commitment) } if err := k.connectionKeeper.VerifyPacketAcknowledgement( ctx, connectionEnd, proofHeight, proof, packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence(), acknowledgement, ); err != nil { - return err + return "", err } // assert packets acknowledged in order if channel.Ordering == types.ORDERED { nextSequenceAck, found := k.GetNextSequenceAck(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) if !found { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrSequenceAckNotFound, "source port: %s, source channel: %s", packet.GetSourcePort(), packet.GetSourceChannel(), ) } if packet.GetSequence() != nextSequenceAck { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrPacketSequenceOutOfOrder, "packet sequence ≠ next ack sequence (%d ≠ %d)", packet.GetSequence(), nextSequenceAck, ) @@ -491,11 +491,11 @@ func (k *Keeper) AcknowledgePacket( if channel.State == types.FLUSHING { if aborted := k.handleFlushState(ctx, packet, channel); aborted { k.Logger(ctx).Info("upgrade aborted", "port_id", packet.GetSourcePort(), "channel_id", packet.GetSourceChannel(), "upgrade_sequence", channel.UpgradeSequence) - return nil + return channel.Version, nil } } - return nil + return channel.Version, nil } // handleFlushState is called when a packet is acknowledged or timed out and the channel is in diff --git a/modules/core/04-channel/keeper/packet_test.go b/modules/core/04-channel/keeper/packet_test.go index 97b6e5795bf..acd7197af19 100644 --- a/modules/core/04-channel/keeper/packet_test.go +++ b/modules/core/04-channel/keeper/packet_test.go @@ -666,11 +666,12 @@ func (suite *KeeperTestSuite) TestRecvPacket() { packetKey := host.PacketCommitmentKey(packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) proof, proofHeight := path.EndpointA.QueryProof(packetKey) - err := suite.chainB.App.GetIBCKeeper().ChannelKeeper.RecvPacket(suite.chainB.GetContext(), channelCap, packet, proof, proofHeight) + channelVersion, err := suite.chainB.App.GetIBCKeeper().ChannelKeeper.RecvPacket(suite.chainB.GetContext(), channelCap, packet, proof, proofHeight) expPass := tc.expError == nil if expPass { suite.Require().NoError(err) + suite.Require().Equal(path.EndpointA.GetChannel().Version, channelVersion, "channel version is incorrect") channelB, _ := suite.chainB.App.GetIBCKeeper().ChannelKeeper.GetChannel(suite.chainB.GetContext(), packet.GetDestPort(), packet.GetDestChannel()) nextSeqRecv, found := suite.chainB.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceRecv(suite.chainB.GetContext(), packet.GetDestPort(), packet.GetDestChannel()) @@ -688,6 +689,7 @@ func (suite *KeeperTestSuite) TestRecvPacket() { } else { suite.Require().Error(err) suite.Require().ErrorIs(err, tc.expError) + suite.Require().Equal("", channelVersion) } }) } @@ -838,24 +840,27 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { channelCap *capabilitytypes.Capability ) - assertErr := func(errType *errors.Error) func(commitment []byte, err error) { - return func(commitment []byte, err error) { + assertErr := func(errType *errors.Error) func(commitment []byte, channelVersion string, err error) { + return func(commitment []byte, channelVersion string, err error) { suite.Require().Error(err) suite.Require().ErrorIs(err, errType) suite.Require().NotNil(commitment) + suite.Require().Equal("", channelVersion) } } - assertNoOp := func(commitment []byte, err error) { + assertNoOp := func(commitment []byte, channelVersion string, err error) { suite.Require().Error(err) suite.Require().ErrorIs(err, types.ErrNoOpMsg) suite.Require().Nil(commitment) + suite.Require().Equal("", channelVersion) } - assertSuccess := func(seq func() uint64, msg string) func(commitment []byte, err error) { - return func(commitment []byte, err error) { + assertSuccess := func(seq func() uint64, msg string) func(commitment []byte, channelVersion string, err error) { + return func(commitment []byte, channelVersion string, err error) { suite.Require().NoError(err) suite.Require().Nil(commitment) + suite.Require().Equal(path.EndpointA.GetChannel().Version, channelVersion) nextSequenceAck, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceAck(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel()) @@ -867,7 +872,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { testCases := []struct { name string malleate func() - expResult func(commitment []byte, err error) + expResult func(commitment []byte, channelVersion string, err error) expEvents func(path *ibctesting.Path) []abci.Event }{ { @@ -927,12 +932,13 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { path.EndpointA.UpdateChannel(func(channel *types.Channel) { channel.State = types.FLUSHING }) }, - expResult: func(commitment []byte, err error) { + expResult: func(commitment []byte, channelVersion string, err error) { suite.Require().NoError(err) suite.Require().Nil(commitment) channel := path.EndpointA.GetChannel() suite.Require().Equal(types.FLUSHING, channel.State) + suite.Require().Equal(channel.Version, channelVersion) nextSequenceAck, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceAck(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel()) suite.Require().True(found) @@ -964,12 +970,13 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { path.EndpointA.SetChannelCounterpartyUpgrade(counterpartyUpgrade) }, - expResult: func(commitment []byte, err error) { + expResult: func(commitment []byte, channelVersion string, err error) { suite.Require().NoError(err) suite.Require().Nil(commitment) channel := path.EndpointA.GetChannel() suite.Require().Equal(types.FLUSHCOMPLETE, channel.State) + suite.Require().Equal(channel.Version, channelVersion) nextSequenceAck, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceAck(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel()) suite.Require().True(found) @@ -1024,12 +1031,13 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { path.EndpointA.SetChannelUpgrade(upgrade) path.EndpointA.SetChannelCounterpartyUpgrade(counterpartyUpgrade) }, - expResult: func(commitment []byte, err error) { + expResult: func(commitment []byte, channelVersion string, err error) { suite.Require().NoError(err) suite.Require().Nil(commitment) channel := path.EndpointA.GetChannel() suite.Require().Equal(types.OPEN, channel.State) + suite.Require().Equal(channel.Version, channelVersion) nextSequenceAck, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceAck(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel()) suite.Require().True(found) @@ -1123,10 +1131,11 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { path.EndpointA.UpdateChannel(func(channel *types.Channel) { channel.State = types.FLUSHCOMPLETE }) }, - expResult: func(commitment []byte, err error) { + expResult: func(commitment []byte, channelVersion string, err error) { suite.Require().Error(err) suite.Require().ErrorIs(err, types.ErrInvalidChannelState) suite.Require().Nil(commitment) + suite.Require().Equal("", channelVersion) }, }, { @@ -1193,7 +1202,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { suite.chainA.App.GetIBCKeeper().ChannelKeeper.SetChannel( suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID), []string{"connection-1000"}, path.EndpointA.ChannelConfig.Version), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID), []string{"connection-1000"}, path.EndpointA.GetChannel().Version), ) suite.chainA.CreateChannelCapability(suite.chainA.GetSimApp().ScopedIBCMockKeeper, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) @@ -1220,7 +1229,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { suite.chainA.App.GetIBCKeeper().ChannelKeeper.SetChannel( suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID), []string{path.EndpointA.ConnectionID}, path.EndpointA.ChannelConfig.Version), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID), []string{path.EndpointA.ConnectionID}, path.EndpointA.GetChannel().Version), ) suite.chainA.CreateChannelCapability(suite.chainA.GetSimApp().ScopedIBCMockKeeper, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) @@ -1334,10 +1343,10 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { packetKey := host.PacketAcknowledgementKey(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) proof, proofHeight := path.EndpointB.QueryProof(packetKey) - err := suite.chainA.App.GetIBCKeeper().ChannelKeeper.AcknowledgePacket(ctx, channelCap, packet, ack.Acknowledgement(), proof, proofHeight) + channelVersion, err := suite.chainA.App.GetIBCKeeper().ChannelKeeper.AcknowledgePacket(ctx, channelCap, packet, ack.Acknowledgement(), proof, proofHeight) commitment := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetPacketCommitment(ctx, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, packet.GetSequence()) - tc.expResult(commitment, err) + tc.expResult(commitment, channelVersion, err) if tc.expEvents != nil { events := ctx.EventManager().ABCIEvents() diff --git a/modules/core/04-channel/keeper/timeout.go b/modules/core/04-channel/keeper/timeout.go index 1f8649e0f7a..36d82873707 100644 --- a/modules/core/04-channel/keeper/timeout.go +++ b/modules/core/04-channel/keeper/timeout.go @@ -28,10 +28,10 @@ func (k *Keeper) TimeoutPacket( proof []byte, proofHeight exported.Height, nextSequenceRecv uint64, -) error { +) (string, error) { channel, found := k.GetChannel(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) if !found { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrChannelNotFound, "port ID (%s) channel ID (%s)", packet.GetSourcePort(), packet.GetSourceChannel(), ) @@ -41,14 +41,14 @@ func (k *Keeper) TimeoutPacket( // so the capability authentication can be omitted here if packet.GetDestPort() != channel.Counterparty.PortId { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidPacket, "packet destination port doesn't match the counterparty's port (%s ≠ %s)", packet.GetDestPort(), channel.Counterparty.PortId, ) } if packet.GetDestChannel() != channel.Counterparty.ChannelId { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidPacket, "packet destination channel doesn't match the counterparty's channel (%s ≠ %s)", packet.GetDestChannel(), channel.Counterparty.ChannelId, ) @@ -56,7 +56,7 @@ func (k *Keeper) TimeoutPacket( connectionEnd, found := k.connectionKeeper.GetConnection(ctx, channel.ConnectionHops[0]) if !found { - return errorsmod.Wrap( + return "", errorsmod.Wrap( connectiontypes.ErrConnectionNotFound, channel.ConnectionHops[0], ) @@ -65,12 +65,12 @@ func (k *Keeper) TimeoutPacket( // check that timeout height or timeout timestamp has passed on the other end proofTimestamp, err := k.clientKeeper.GetClientTimestampAtHeight(ctx, connectionEnd.ClientId, proofHeight) if err != nil { - return err + return "", err } timeout := types.NewTimeout(packet.GetTimeoutHeight().(clienttypes.Height), packet.GetTimeoutTimestamp()) if !timeout.Elapsed(proofHeight.(clienttypes.Height), proofTimestamp) { - return errorsmod.Wrap(timeout.ErrTimeoutNotReached(proofHeight.(clienttypes.Height), proofTimestamp), "packet timeout not reached") + return "", errorsmod.Wrap(timeout.ErrTimeoutNotReached(proofHeight.(clienttypes.Height), proofTimestamp), "packet timeout not reached") } commitment := k.GetPacketCommitment(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) @@ -81,21 +81,21 @@ func (k *Keeper) TimeoutPacket( // or there is a misconfigured relayer attempting to prove a timeout // for a packet never sent. Core IBC will treat this error as a no-op in order to // prevent an entire relay transaction from failing and consuming unnecessary fees. - return types.ErrNoOpMsg + return "", types.ErrNoOpMsg } packetCommitment := types.CommitPacket(k.cdc, packet) // verify we sent the packet and haven't cleared it out yet if !bytes.Equal(commitment, packetCommitment) { - return errorsmod.Wrapf(types.ErrInvalidPacket, "packet commitment bytes are not equal: got (%v), expected (%v)", commitment, packetCommitment) + return "", errorsmod.Wrapf(types.ErrInvalidPacket, "packet commitment bytes are not equal: got (%v), expected (%v)", commitment, packetCommitment) } switch channel.Ordering { case types.ORDERED: // check that packet has not been received if nextSequenceRecv > packet.GetSequence() { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrPacketReceived, "packet already received, next sequence receive > packet sequence (%d > %d)", nextSequenceRecv, packet.GetSequence(), ) @@ -116,11 +116,11 @@ func (k *Keeper) TimeoutPacket( } if err != nil { - return err + return "", err } // NOTE: the remaining code is located in the TimeoutExecuted function - return nil + return channel.Version, nil } // TimeoutExecuted deletes the commitment send from this chain after it verifies timeout. @@ -203,29 +203,29 @@ func (k *Keeper) TimeoutOnClose( proofHeight exported.Height, nextSequenceRecv uint64, counterpartyUpgradeSequence uint64, -) error { +) (string, error) { channel, found := k.GetChannel(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) if !found { - return errorsmod.Wrapf(types.ErrChannelNotFound, "port ID (%s) channel ID (%s)", packet.GetSourcePort(), packet.GetSourceChannel()) + return "", errorsmod.Wrapf(types.ErrChannelNotFound, "port ID (%s) channel ID (%s)", packet.GetSourcePort(), packet.GetSourceChannel()) } capName := host.ChannelCapabilityPath(packet.GetSourcePort(), packet.GetSourceChannel()) if !k.scopedKeeper.AuthenticateCapability(ctx, chanCap, capName) { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidChannelCapability, "channel capability failed authentication with capability name %s", capName, ) } if packet.GetDestPort() != channel.Counterparty.PortId { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidPacket, "packet destination port doesn't match the counterparty's port (%s ≠ %s)", packet.GetDestPort(), channel.Counterparty.PortId, ) } if packet.GetDestChannel() != channel.Counterparty.ChannelId { - return errorsmod.Wrapf( + return "", errorsmod.Wrapf( types.ErrInvalidPacket, "packet destination channel doesn't match the counterparty's channel (%s ≠ %s)", packet.GetDestChannel(), channel.Counterparty.ChannelId, ) @@ -233,7 +233,7 @@ func (k *Keeper) TimeoutOnClose( connectionEnd, found := k.connectionKeeper.GetConnection(ctx, channel.ConnectionHops[0]) if !found { - return errorsmod.Wrap(connectiontypes.ErrConnectionNotFound, channel.ConnectionHops[0]) + return "", errorsmod.Wrap(connectiontypes.ErrConnectionNotFound, channel.ConnectionHops[0]) } commitment := k.GetPacketCommitment(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) @@ -244,14 +244,14 @@ func (k *Keeper) TimeoutOnClose( // or there is a misconfigured relayer attempting to prove a timeout // for a packet never sent. Core IBC will treat this error as a no-op in order to // prevent an entire relay transaction from failing and consuming unnecessary fees. - return types.ErrNoOpMsg + return "", types.ErrNoOpMsg } packetCommitment := types.CommitPacket(k.cdc, packet) // verify we sent the packet and haven't cleared it out yet if !bytes.Equal(commitment, packetCommitment) { - return errorsmod.Wrapf(types.ErrInvalidPacket, "packet commitment bytes are not equal: got (%v), expected (%v)", commitment, packetCommitment) + return "", errorsmod.Wrapf(types.ErrInvalidPacket, "packet commitment bytes are not equal: got (%v), expected (%v)", commitment, packetCommitment) } counterpartyHops := []string{connectionEnd.Counterparty.ConnectionId} @@ -272,7 +272,7 @@ func (k *Keeper) TimeoutOnClose( channel.Counterparty.PortId, channel.Counterparty.ChannelId, expectedChannel, ); err != nil { - return err + return "", err } var err error @@ -280,7 +280,7 @@ func (k *Keeper) TimeoutOnClose( case types.ORDERED: // check that packet has not been received if nextSequenceRecv > packet.GetSequence() { - return errorsmod.Wrapf(types.ErrInvalidPacket, "packet already received, next sequence receive > packet sequence (%d > %d", nextSequenceRecv, packet.GetSequence()) + return "", errorsmod.Wrapf(types.ErrInvalidPacket, "packet already received, next sequence receive > packet sequence (%d > %d", nextSequenceRecv, packet.GetSequence()) } // check that the recv sequence is as claimed @@ -298,9 +298,9 @@ func (k *Keeper) TimeoutOnClose( } if err != nil { - return err + return "", err } // NOTE: the remaining code is located in the TimeoutExecuted function - return nil + return channel.Version, nil } diff --git a/modules/core/04-channel/keeper/timeout_test.go b/modules/core/04-channel/keeper/timeout_test.go index 126bb783764..26b55158907 100644 --- a/modules/core/04-channel/keeper/timeout_test.go +++ b/modules/core/04-channel/keeper/timeout_test.go @@ -220,12 +220,14 @@ func (suite *KeeperTestSuite) TestTimeoutPacket() { } } - err := suite.chainA.App.GetIBCKeeper().ChannelKeeper.TimeoutPacket(suite.chainA.GetContext(), packet, proof, proofHeight, nextSeqRecv) + channelVersion, err := suite.chainA.App.GetIBCKeeper().ChannelKeeper.TimeoutPacket(suite.chainA.GetContext(), packet, proof, proofHeight, nextSeqRecv) if tc.expPass { suite.Require().NoError(err) + suite.Require().Equal(path.EndpointA.GetChannel().Version, channelVersion) } else { suite.Require().Error(err) + suite.Require().Equal("", channelVersion) // only check if expError is set, since not all error codes can be known if expError != nil { suite.Require().True(errors.Is(err, expError)) @@ -757,7 +759,7 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { proof, _ = suite.chainB.QueryProof(unorderedPacketKey) } - err := suite.chainA.App.GetIBCKeeper().ChannelKeeper.TimeoutOnClose( + channelVersion, err := suite.chainA.App.GetIBCKeeper().ChannelKeeper.TimeoutOnClose( suite.chainA.GetContext(), chanCap, packet, @@ -770,8 +772,10 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { if tc.expPass { suite.Require().NoError(err) + suite.Require().Equal(path.EndpointA.GetChannel().Version, channelVersion) } else { suite.Require().Error(err) + suite.Require().Equal("", channelVersion) } }) } diff --git a/modules/core/05-port/types/module.go b/modules/core/05-port/types/module.go index 7e9b3bf672e..8b2ccf94248 100644 --- a/modules/core/05-port/types/module.go +++ b/modules/core/05-port/types/module.go @@ -88,12 +88,14 @@ type IBCModule interface { // and the acknowledgement is written (in synchronous cases). OnRecvPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) exported.Acknowledgement OnAcknowledgementPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, @@ -101,6 +103,7 @@ type IBCModule interface { OnTimeoutPacket( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) error diff --git a/modules/core/ante/ante.go b/modules/core/ante/ante.go index 9b37e0d79b4..2d08ba0db16 100644 --- a/modules/core/ante/ante.go +++ b/modules/core/ante/ante.go @@ -117,7 +117,7 @@ func (rrd RedundantRelayDecorator) recvPacketCheckTx(ctx sdk.Context, msg *chann // If the packet was already received, perform a no-op // Use a cached context to prevent accidental state changes cacheCtx, writeFn := ctx.CacheContext() - err = rrd.k.ChannelKeeper.RecvPacket(cacheCtx, capability, msg.Packet, msg.ProofCommitment, msg.ProofHeight) + _, err = rrd.k.ChannelKeeper.RecvPacket(cacheCtx, capability, msg.Packet, msg.ProofCommitment, msg.ProofHeight) switch err { case nil: diff --git a/modules/core/ante/ante_test.go b/modules/core/ante/ante_test.go index f60b75ebd50..1757d3d3534 100644 --- a/modules/core/ante/ante_test.go +++ b/modules/core/ante/ante_test.go @@ -351,7 +351,7 @@ func (suite *AnteTestSuite) TestAnteDecoratorCheckTx() { "success on app callback error, app callbacks are skipped for performance", func(suite *AnteTestSuite) []sdk.Msg { suite.chainB.GetSimApp().IBCMockModule.IBCApp.OnRecvPacket = func( - ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, + ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) exported.Acknowledgement { panic(fmt.Errorf("failed OnRecvPacket mock callback")) } @@ -587,7 +587,7 @@ func (suite *AnteTestSuite) TestAnteDecoratorReCheckTx() { "success on app callback error, app callbacks are skipped for performance", func(suite *AnteTestSuite) []sdk.Msg { suite.chainB.GetSimApp().IBCMockModule.IBCApp.OnRecvPacket = func( - ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, + ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) exported.Acknowledgement { panic(fmt.Errorf("failed OnRecvPacket mock callback")) } diff --git a/modules/core/keeper/msg_server.go b/modules/core/keeper/msg_server.go index 173706e4b21..2f9a2acc7be 100644 --- a/modules/core/keeper/msg_server.go +++ b/modules/core/keeper/msg_server.go @@ -473,7 +473,7 @@ func (k *Keeper) RecvPacket(goCtx context.Context, msg *channeltypes.MsgRecvPack // If the packet was already received, perform a no-op // Use a cached context to prevent accidental state changes cacheCtx, writeFn := ctx.CacheContext() - err = k.ChannelKeeper.RecvPacket(cacheCtx, capability, msg.Packet, msg.ProofCommitment, msg.ProofHeight) + channelVersion, err := k.ChannelKeeper.RecvPacket(cacheCtx, capability, msg.Packet, msg.ProofCommitment, msg.ProofHeight) switch err { case nil: @@ -491,7 +491,7 @@ func (k *Keeper) RecvPacket(goCtx context.Context, msg *channeltypes.MsgRecvPack // // Cache context so that we may discard state changes from callback if the acknowledgement is unsuccessful. cacheCtx, writeFn = ctx.CacheContext() - ack := cbs.OnRecvPacket(cacheCtx, msg.Packet, relayer) + ack := cbs.OnRecvPacket(cacheCtx, channelVersion, msg.Packet, relayer) if ack == nil || ack.Success() { // write application state changes for asynchronous and successful acknowledgements writeFn() @@ -545,7 +545,7 @@ func (k *Keeper) Timeout(goCtx context.Context, msg *channeltypes.MsgTimeout) (* // If the timeout was already received, perform a no-op // Use a cached context to prevent accidental state changes cacheCtx, writeFn := ctx.CacheContext() - err = k.ChannelKeeper.TimeoutPacket(cacheCtx, msg.Packet, msg.ProofUnreceived, msg.ProofHeight, msg.NextSequenceRecv) + channelVersion, err := k.ChannelKeeper.TimeoutPacket(cacheCtx, msg.Packet, msg.ProofUnreceived, msg.ProofHeight, msg.NextSequenceRecv) switch err { case nil: @@ -565,7 +565,7 @@ func (k *Keeper) Timeout(goCtx context.Context, msg *channeltypes.MsgTimeout) (* } // Perform application logic callback - err = cbs.OnTimeoutPacket(ctx, msg.Packet, relayer) + err = cbs.OnTimeoutPacket(ctx, channelVersion, msg.Packet, relayer) if err != nil { ctx.Logger().Error("timeout failed", "port-id", msg.Packet.SourcePort, "channel-id", msg.Packet.SourceChannel, "error", errorsmod.Wrap(err, "timeout packet callback failed")) return nil, errorsmod.Wrap(err, "timeout packet callback failed") @@ -607,7 +607,7 @@ func (k *Keeper) TimeoutOnClose(goCtx context.Context, msg *channeltypes.MsgTime // If the timeout was already received, perform a no-op // Use a cached context to prevent accidental state changes cacheCtx, writeFn := ctx.CacheContext() - err = k.ChannelKeeper.TimeoutOnClose(cacheCtx, capability, msg.Packet, msg.ProofUnreceived, msg.ProofClose, msg.ProofHeight, msg.NextSequenceRecv, msg.CounterpartyUpgradeSequence) + channelVersion, err := k.ChannelKeeper.TimeoutOnClose(cacheCtx, capability, msg.Packet, msg.ProofUnreceived, msg.ProofClose, msg.ProofHeight, msg.NextSequenceRecv, msg.CounterpartyUpgradeSequence) switch err { case nil: @@ -630,7 +630,7 @@ func (k *Keeper) TimeoutOnClose(goCtx context.Context, msg *channeltypes.MsgTime // // NOTE: MsgTimeout and MsgTimeoutOnClose use the same "OnTimeoutPacket" // application logic callback. - err = cbs.OnTimeoutPacket(ctx, msg.Packet, relayer) + err = cbs.OnTimeoutPacket(ctx, channelVersion, msg.Packet, relayer) if err != nil { ctx.Logger().Error("timeout on close failed", "port-id", msg.Packet.SourcePort, "channel-id", msg.Packet.SourceChannel, "error", errorsmod.Wrap(err, "timeout on close callback failed")) return nil, errorsmod.Wrap(err, "timeout on close callback failed") @@ -672,7 +672,7 @@ func (k *Keeper) Acknowledgement(goCtx context.Context, msg *channeltypes.MsgAck // If the acknowledgement was already received, perform a no-op // Use a cached context to prevent accidental state changes cacheCtx, writeFn := ctx.CacheContext() - err = k.ChannelKeeper.AcknowledgePacket(cacheCtx, capability, msg.Packet, msg.Acknowledgement, msg.ProofAcked, msg.ProofHeight) + channelVersion, err := k.ChannelKeeper.AcknowledgePacket(cacheCtx, capability, msg.Packet, msg.Acknowledgement, msg.ProofAcked, msg.ProofHeight) switch err { case nil: @@ -687,7 +687,7 @@ func (k *Keeper) Acknowledgement(goCtx context.Context, msg *channeltypes.MsgAck } // Perform application logic callback - err = cbs.OnAcknowledgementPacket(ctx, msg.Packet, msg.Acknowledgement, relayer) + err = cbs.OnAcknowledgementPacket(ctx, channelVersion, msg.Packet, msg.Acknowledgement, relayer) if err != nil { ctx.Logger().Error("acknowledgement failed", "port-id", msg.Packet.SourcePort, "channel-id", msg.Packet.SourceChannel, "error", errorsmod.Wrap(err, "acknowledge packet callback failed")) return nil, errorsmod.Wrap(err, "acknowledge packet callback failed") diff --git a/testing/mock/ibc_app.go b/testing/mock/ibc_app.go index b99ebc84b94..798bd35749a 100644 --- a/testing/mock/ibc_app.go +++ b/testing/mock/ibc_app.go @@ -69,12 +69,14 @@ type IBCApp struct { // and the acknowledgement is written (in synchronous cases). OnRecvPacket func( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) exported.Acknowledgement OnAcknowledgementPacket func( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, @@ -82,6 +84,7 @@ type IBCApp struct { OnTimeoutPacket func( ctx sdk.Context, + channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress, ) error diff --git a/testing/mock/ibc_module.go b/testing/mock/ibc_module.go index db7917d3c9b..c698c05d1bd 100644 --- a/testing/mock/ibc_module.go +++ b/testing/mock/ibc_module.go @@ -123,9 +123,9 @@ func (im IBCModule) OnChanCloseConfirm(ctx sdk.Context, portID, channelID string } // OnRecvPacket implements the IBCModule interface. -func (im IBCModule) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) exported.Acknowledgement { +func (im IBCModule) OnRecvPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress) exported.Acknowledgement { if im.IBCApp.OnRecvPacket != nil { - return im.IBCApp.OnRecvPacket(ctx, packet, relayer) + return im.IBCApp.OnRecvPacket(ctx, channelVersion, packet, relayer) } // set state by claiming capability to check if revert happens return @@ -148,9 +148,9 @@ func (im IBCModule) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet, re } // OnAcknowledgementPacket implements the IBCModule interface. -func (im IBCModule) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress) error { +func (im IBCModule) OnAcknowledgementPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress) error { if im.IBCApp.OnAcknowledgementPacket != nil { - return im.IBCApp.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) + return im.IBCApp.OnAcknowledgementPacket(ctx, channelVersion, packet, acknowledgement, relayer) } capName := GetMockAckCanaryCapabilityName(packet) @@ -166,9 +166,9 @@ func (im IBCModule) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes } // OnTimeoutPacket implements the IBCModule interface. -func (im IBCModule) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) error { +func (im IBCModule) OnTimeoutPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress) error { if im.IBCApp.OnTimeoutPacket != nil { - return im.IBCApp.OnTimeoutPacket(ctx, packet, relayer) + return im.IBCApp.OnTimeoutPacket(ctx, channelVersion, packet, relayer) } capName := GetMockTimeoutCanaryCapabilityName(packet) diff --git a/testing/mock/middleware.go b/testing/mock/middleware.go index 7a5b572cd0d..6d6a33a1a1f 100644 --- a/testing/mock/middleware.go +++ b/testing/mock/middleware.go @@ -114,9 +114,9 @@ func (im BlockUpgradeMiddleware) OnChanCloseConfirm(ctx sdk.Context, portID, cha } // OnRecvPacket implements the IBCModule interface. -func (im BlockUpgradeMiddleware) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) exported.Acknowledgement { +func (im BlockUpgradeMiddleware) OnRecvPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress) exported.Acknowledgement { if im.IBCApp.OnRecvPacket != nil { - return im.IBCApp.OnRecvPacket(ctx, packet, relayer) + return im.IBCApp.OnRecvPacket(ctx, channelVersion, packet, relayer) } // set state by claiming capability to check if revert happens return @@ -137,9 +137,9 @@ func (im BlockUpgradeMiddleware) OnRecvPacket(ctx sdk.Context, packet channeltyp } // OnAcknowledgementPacket implements the IBCModule interface. -func (im BlockUpgradeMiddleware) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress) error { +func (im BlockUpgradeMiddleware) OnAcknowledgementPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress) error { if im.IBCApp.OnAcknowledgementPacket != nil { - return im.IBCApp.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) + return im.IBCApp.OnAcknowledgementPacket(ctx, channelVersion, packet, acknowledgement, relayer) } capName := GetMockAckCanaryCapabilityName(packet) @@ -153,9 +153,9 @@ func (im BlockUpgradeMiddleware) OnAcknowledgementPacket(ctx sdk.Context, packet } // OnTimeoutPacket implements the IBCModule interface. -func (im BlockUpgradeMiddleware) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) error { +func (im BlockUpgradeMiddleware) OnTimeoutPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress) error { if im.IBCApp.OnTimeoutPacket != nil { - return im.IBCApp.OnTimeoutPacket(ctx, packet, relayer) + return im.IBCApp.OnTimeoutPacket(ctx, channelVersion, packet, relayer) } capName := GetMockTimeoutCanaryCapabilityName(packet) From 27d234b15362981299a96b7189e8e01ad0a6ac3e Mon Sep 17 00:00:00 2001 From: Gjermund Garaba Date: Fri, 26 Jul 2024 11:45:21 +0200 Subject: [PATCH 36/78] test: add NewForwardErrorAcknowledgement to multihop forwarding test (#6907) * test: add NewForwardErrorAcknowledgement to multihop forwarding test * add forward packet deletion assertion + fix wrong packet used in ack fetch --- .../transfer/keeper/relay_forwarding_test.go | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/modules/apps/transfer/keeper/relay_forwarding_test.go b/modules/apps/transfer/keeper/relay_forwarding_test.go index 542af7a4f59..8e54eac8f6e 100644 --- a/modules/apps/transfer/keeper/relay_forwarding_test.go +++ b/modules/apps/transfer/keeper/relay_forwarding_test.go @@ -1145,6 +1145,9 @@ func (suite *ForwardingTestSuite) TestForwardingWithMoreThanOneHop() { suite.Require().NoError(err) } +// TestMultihopForwardingErrorAcknowledgement tests the scenario in which a packet goes from +// A to D, using B and C as forwarding hops. The packet fails on D where we set the ReceiveEnabled +// param to false. We verify that funds are properly returned to A. func (suite *ForwardingTestSuite) TestMultihopForwardingErrorAcknowledgement() { // Setup A->B->C->D coinOnA := ibctesting.TestCoin @@ -1226,7 +1229,7 @@ func (suite *ForwardingTestSuite) TestMultihopForwardingErrorAcknowledgement() { err = pathCtoD.EndpointB.UpdateClient() suite.Require().NoError(err) - // force an error acknowledgement by disabling the receive param on chain D. + // force an error acknowledgement by disabling the ReceiveEnabled param on chain D. ctx := pathCtoD.EndpointB.Chain.GetContext() pathCtoD.EndpointB.Chain.GetSimApp().TransferKeeper.SetParams(ctx, types.NewParams(true, false)) @@ -1234,6 +1237,10 @@ func (suite *ForwardingTestSuite) TestMultihopForwardingErrorAcknowledgement() { suite.Require().NoError(err) suite.Require().NotNil(result) + // forward packet exists on C before ack + _, found := suite.chainC.GetSimApp().TransferKeeper.GetForwardedPacket(suite.chainC.GetContext(), pathCtoD.EndpointA.ChannelConfig.PortID, pathCtoD.EndpointA.ChannelID, packetFromBtoC.GetSequence()) + suite.Require().True(found) + // propagate the acknowledgement from chain D to chain A. ack, err := ibctesting.ParseAckFromEvents(result.Events) suite.Require().NoError(err) @@ -1242,15 +1249,46 @@ func (suite *ForwardingTestSuite) TestMultihopForwardingErrorAcknowledgement() { result, err = pathCtoD.EndpointA.AcknowledgePacketWithResult(packetFromCtoD, ack) suite.Require().NoError(err) + // forward packet is deleted after ack + _, found = suite.chainC.GetSimApp().TransferKeeper.GetForwardedPacket(suite.chainC.GetContext(), pathCtoD.EndpointA.ChannelConfig.PortID, pathCtoD.EndpointA.ChannelID, packetFromBtoC.GetSequence()) + suite.Require().False(found) + + // Ensure that chainC has an ack. + storedAck, found := suite.chainC.App.GetIBCKeeper().ChannelKeeper.GetPacketAcknowledgement(suite.chainC.GetContext(), pathBtoC.EndpointB.ChannelConfig.PortID, pathBtoC.EndpointB.ChannelID, packetFromBtoC.GetSequence()) + suite.Require().True(found, "chainC does not have an ack") + + // And that this ack is of the type we expect (Error due to ReceiveEnabled param being false) + initialErrorAck := channeltypes.NewErrorAcknowledgement(types.ErrReceiveDisabled) + forwardErrorAck := internaltypes.NewForwardErrorAcknowledgement(packetFromCtoD, initialErrorAck) + ackbytes := channeltypes.CommitAcknowledgement(forwardErrorAck.Acknowledgement()) + suite.Require().Equal(ackbytes, storedAck) + ack, err = ibctesting.ParseAckFromEvents(result.Events) suite.Require().NoError(err) err = pathBtoC.EndpointA.UpdateClient() suite.Require().NoError(err) + // forward packet exists on B before ack + _, found = suite.chainB.GetSimApp().TransferKeeper.GetForwardedPacket(suite.chainB.GetContext(), pathBtoC.EndpointA.ChannelConfig.PortID, pathBtoC.EndpointA.ChannelID, packetFromAtoB.GetSequence()) + suite.Require().True(found) + result, err = pathBtoC.EndpointA.AcknowledgePacketWithResult(packetFromBtoC, ack) suite.Require().NoError(err) + // forward packet is deleted after ack + _, found = suite.chainB.GetSimApp().TransferKeeper.GetForwardedPacket(suite.chainB.GetContext(), pathBtoC.EndpointA.ChannelConfig.PortID, pathBtoC.EndpointA.ChannelID, packetFromAtoB.GetSequence()) + suite.Require().False(found) + + // Ensure that chainB has an ack. + storedAck, found = suite.chainB.App.GetIBCKeeper().ChannelKeeper.GetPacketAcknowledgement(suite.chainB.GetContext(), pathAtoB.EndpointB.ChannelConfig.PortID, pathAtoB.EndpointB.ChannelID, packetFromAtoB.GetSequence()) + suite.Require().True(found, "chainB does not have an ack") + + // And that this ack is of the type we expect (Error due to ReceiveEnabled param being false) + forwardErrorAck = internaltypes.NewForwardErrorAcknowledgement(packetFromBtoC, forwardErrorAck) + ackbytes = channeltypes.CommitAcknowledgement(forwardErrorAck.Acknowledgement()) + suite.Require().Equal(ackbytes, storedAck) + ack, err = ibctesting.ParseAckFromEvents(result.Events) suite.Require().NoError(err) From 68a75cdf34567fd0fe163d0e5007a30b6f85f134 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Fri, 26 Jul 2024 13:05:38 +0200 Subject: [PATCH 37/78] docs: update migration docs for 08-wasm pre-releases (#6927) * docs: update migration docs for 08-wasm pre-releases * docs: add go psuedo version to tag in docs * chore: satisfy linter * nit --------- Co-authored-by: Carlos Rodriguez --- .../03-light-clients/04-wasm/09-migrations.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/docs/03-light-clients/04-wasm/09-migrations.md b/docs/docs/03-light-clients/04-wasm/09-migrations.md index f9c332c6b5f..be7812e8c91 100644 --- a/docs/docs/03-light-clients/04-wasm/09-migrations.md +++ b/docs/docs/03-light-clients/04-wasm/09-migrations.md @@ -9,6 +9,17 @@ slug: /ibc/light-clients/wasm/migrations This guide provides instructions for migrating 08-wasm versions. +Please note that the following releases are retracted. Please refer to the appropriate migrations section for upgrading. + +```bash +v0.3.1-0.20240717085919-bb71eef0f3bf => v0.3.0+ibc-go-v8.3-wasmvm-v2.0 +v0.2.1-0.20240717085554-570d057959e3 => v0.2.0+ibc-go-v7.6-wasmvm-v1.5 +v0.2.1-0.20240523101951-4b45d1822fb6 => v0.2.0+ibc-go-v8.3-wasmvm-v2.0 +v0.1.2-0.20240412103620-7ee2a2452b79 => v0.1.1+ibc-go-v7.3-wasmvm-v1.5 +v0.1.1-0.20231213092650-57fcdb9a9a9d => v0.1.0+ibc-go-v8.0-wasmvm-v1.5 +v0.1.1-0.20231213092633-b306e7a706e1 => v0.1.0+ibc-go-v7.3-wasmvm-v1.5 +``` + ## From ibc-go v8.3.x to ibc-go v9.0.x ### Chains @@ -28,6 +39,24 @@ This guide provides instructions for migrating 08-wasm versions. - The `WithQueryPlugins` function signature has changed to take in the `QueryPlugins` type from the `keeper` package (previously from the `types` package). - The `VMGasRegister` variable has been moved from the `types` package to the `keeper` package. +## From v0.3.0+ibc-go-v8.3-wasmvm-v2.0 to v0.4.0-ibc-go-v8.3-wasmvm-v2.0 + +### Contract developers + +Contract developers are required to update their JSON API message structure for the `SudoMsg` payloads `VerifyMembershipMsg` and `VerifyNonMembershipMsg`. +The `path` field on both JSON API messages has been renamed to `merkle_path`. + +A migration is required for existing 08-wasm client contracts in order to correctly handle the deserialisation of these fields. + +## From v0.2.0+ibc-go-v7.3-wasmvm-v1.5 to v0.3.0-ibc-go-v7.3-wasmvm-v1.5 + +### Contract developers + +Contract developers are required to update their JSON API message structure for the `SudoMsg` payloads `VerifyMembershipMsg` and `VerifyNonMembershipMsg`. +The `path` field on both JSON API messages has been renamed to `merkle_path`. + +A migration is required for existing 08-wasm client contracts in order to correctly handle the deserialisation of these fields. + ## From v0.2.0+ibc-go-v8.3-wasmvm-v2.0 to v0.3.0-ibc-go-v8.3-wasmvm-v2.0 ### Contract developers From 6ad9731068443d1965e64e69f3eb450154bd3e4e Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Fri, 26 Jul 2024 13:53:59 +0200 Subject: [PATCH 38/78] e2e: entire balance compatibility for v7.7.x, v8.4.x (#6956) * e2e: entire balance compatibility for v7.7.x, v8.4.x * put test on b, because the entire balance is sent from chain b * add if statement for v2 channels * update comments --- .../release-v7.7.x/transfer-chain-b.json | 3 ++- .../release-v8.4.x/transfer-chain-b.json | 3 ++- .../release-v9.0.x/transfer-chain-b.json | 3 ++- .../transfer-v2-multidenom-chain-a.json | 1 - e2e/tests/transfer/base_test.go | 13 ++++++++----- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json index dc70af2ed74..add43b0c727 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json @@ -22,7 +22,8 @@ "TestMsgTransfer_Succeeds_Nonincentivized", "TestMsgTransfer_Fails_InvalidAddress", "TestMsgTransfer_Timeout_Nonincentivized", - "TestMsgTransfer_WithMemo" + "TestMsgTransfer_WithMemo", + "TestMsgTransfer_EntireBalance" ], "relayer-type": [ "hermes" diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json index ebaddf363c8..9fe1f87a992 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json @@ -22,7 +22,8 @@ "TestMsgTransfer_Succeeds_Nonincentivized", "TestMsgTransfer_Fails_InvalidAddress", "TestMsgTransfer_Timeout_Nonincentivized", - "TestMsgTransfer_WithMemo" + "TestMsgTransfer_WithMemo", + "TestMsgTransfer_EntireBalance" ], "relayer-type": [ "hermes" diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json index 8d1e5d947f8..f76ad22bb23 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json @@ -22,7 +22,8 @@ "TestMsgTransfer_Succeeds_Nonincentivized", "TestMsgTransfer_Fails_InvalidAddress", "TestMsgTransfer_Timeout_Nonincentivized", - "TestMsgTransfer_WithMemo" + "TestMsgTransfer_WithMemo", + "TestMsgTransfer_EntireBalance" ], "relayer-type": [ "hermes" diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json index e75a7b6c73e..60de14c5609 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-v2-multidenom-chain-a.json @@ -10,7 +10,6 @@ ], "test": [ "TestMsgTransfer_Succeeds_Nonincentivized_MultiDenom", - "TestMsgTransfer_EntireBalance", "TestMsgTransfer_Fails_InvalidAddress_MultiDenom" ], "relayer-type": [ diff --git a/e2e/tests/transfer/base_test.go b/e2e/tests/transfer/base_test.go index 622c2c45afc..63cc7a51757 100644 --- a/e2e/tests/transfer/base_test.go +++ b/e2e/tests/transfer/base_test.go @@ -629,22 +629,25 @@ func (s *TransferTestSuite) TestMsgTransfer_EntireBalance() { s.Require().Equal(testvalues.StartingTokenAmount, actualBalance.Int64()) if channelA.Version == transfertypes.V2 { - // test that chainA has the entirety of chainB's token IBC denom. + // test that chainA has the entirety of chainB's IBC token denom. actualBalance, err = query.Balance(ctx, chainA, chainAAddress, chainAIBCToken.IBCDenom()) s.Require().NoError(err) s.Require().Equal(testvalues.StartingTokenAmount, actualBalance.Int64()) } - // Tests that chainB has a zero balance for both. + // test that chainB has a zero balance of chainA's IBC token denom. actualBalance, err = query.Balance(ctx, chainB, chainBAddress, chainBIBCToken.IBCDenom()) s.Require().NoError(err) s.Require().Zero(actualBalance.Int64()) - actualBalance, err = query.Balance(ctx, chainB, chainBAddress, chainB.Config().Denom) + if channelA.Version == transfertypes.V2 { + // test that chainB has a zero balance of its native token. + actualBalance, err = query.Balance(ctx, chainB, chainBAddress, chainB.Config().Denom) - s.Require().NoError(err) - s.Require().Zero(actualBalance.Int64()) + s.Require().NoError(err) + s.Require().Zero(actualBalance.Int64()) + } }) } From 4a70db8d01874eeaf555a811a95b030dbf17fc54 Mon Sep 17 00:00:00 2001 From: chandiniv1 <117723967+chandiniv1@users.noreply.github.com> Date: Fri, 26 Jul 2024 17:24:35 +0530 Subject: [PATCH 39/78] Add error for indicating Mashal/Unmarshaling failures (#6904) * Add error for indicating Mashal/Unmarshaling failures * nit * replace ErrUnmarshalFailed to existing ErrInvalidType * fix test --------- Co-authored-by: Carlos Rodriguez --- .../controller/ibc_middleware_test.go | 5 +++-- .../controller/keeper/handshake_test.go | 10 +++++----- .../27-interchain-accounts/host/ibc_module_test.go | 2 +- .../host/keeper/handshake_test.go | 5 +++-- .../apps/27-interchain-accounts/host/keeper/relay.go | 2 +- .../27-interchain-accounts/host/keeper/relay_test.go | 10 +++++----- modules/apps/27-interchain-accounts/types/codec.go | 8 +++++--- .../apps/27-interchain-accounts/types/codec_test.go | 7 ++++--- modules/apps/27-interchain-accounts/types/metadata.go | 3 ++- 9 files changed, 29 insertions(+), 23 deletions(-) diff --git a/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go b/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go index 420771e8f5c..afaf5c487ce 100644 --- a/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go +++ b/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go @@ -20,6 +20,7 @@ import ( channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v9/modules/core/05-port/types" host "github.com/cosmos/ibc-go/v9/modules/core/24-host" + ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" ibctesting "github.com/cosmos/ibc-go/v9/testing" ibcmock "github.com/cosmos/ibc-go/v9/testing/mock" ) @@ -821,7 +822,7 @@ func (suite *InterchainAccountsTestSuite) TestOnChanUpgradeInit() { { "ICA OnChanUpgradeInit fails - invalid version", func() { version = invalidVersion - }, icatypes.ErrUnknownDataType, + }, ibcerrors.ErrInvalidType, }, { "ICA auth module callback fails", func() { @@ -949,7 +950,7 @@ func (suite *InterchainAccountsTestSuite) TestOnChanUpgradeAck() { { "ICA OnChanUpgradeAck fails - invalid version", func() { counterpartyVersion = invalidVersion - }, icatypes.ErrUnknownDataType, + }, ibcerrors.ErrInvalidType, }, { "ICA auth module callback fails", func() { diff --git a/modules/apps/27-interchain-accounts/controller/keeper/handshake_test.go b/modules/apps/27-interchain-accounts/controller/keeper/handshake_test.go index f7cc1b1bd31..35bac8a80c3 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/handshake_test.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/handshake_test.go @@ -142,7 +142,7 @@ func (suite *KeeperTestSuite) TestOnChanOpenInit() { path.EndpointA.SetChannel(*channel) channel.Version = "invalid-metadata-bytestring" }, - icatypes.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, { "unsupported encoding format", @@ -586,14 +586,14 @@ func (suite *KeeperTestSuite) TestOnChanUpgradeInit() { malleate: func() { version = invalidVersion }, - expError: icatypes.ErrUnknownDataType, + expError: ibcerrors.ErrInvalidType, }, { name: "failure: cannot decode self version string", malleate: func() { path.EndpointA.UpdateChannel(func(channel *channeltypes.Channel) { channel.Version = invalidVersion }) }, - expError: icatypes.ErrUnknownDataType, + expError: ibcerrors.ErrInvalidType, }, { name: "failure: failed controller metadata validation, invalid encoding", @@ -746,14 +746,14 @@ func (suite *KeeperTestSuite) TestOnChanUpgradeAck() { malleate: func() { counterpartyVersion = invalidVersion }, - expError: icatypes.ErrUnknownDataType, + expError: ibcerrors.ErrInvalidType, }, { name: "failure: cannot decode self version string", malleate: func() { path.EndpointA.UpdateChannel(func(channel *channeltypes.Channel) { channel.Version = invalidVersion }) }, - expError: icatypes.ErrUnknownDataType, + expError: ibcerrors.ErrInvalidType, }, { name: "failure: channel not found", diff --git a/modules/apps/27-interchain-accounts/host/ibc_module_test.go b/modules/apps/27-interchain-accounts/host/ibc_module_test.go index cce0a8c76ee..cba05393f9b 100644 --- a/modules/apps/27-interchain-accounts/host/ibc_module_test.go +++ b/modules/apps/27-interchain-accounts/host/ibc_module_test.go @@ -435,7 +435,7 @@ func (suite *InterchainAccountsTestSuite) TestOnRecvPacket() { "ICA OnRecvPacket fails - cannot unmarshal packet data", func() { packetData = []byte("invalid data") }, false, - "cannot unmarshal ICS-27 interchain account packet data: unknown data type", + "cannot unmarshal ICS-27 interchain account packet data: invalid type", }, } diff --git a/modules/apps/27-interchain-accounts/host/keeper/handshake_test.go b/modules/apps/27-interchain-accounts/host/keeper/handshake_test.go index 4fe6856cbd2..9140d948695 100644 --- a/modules/apps/27-interchain-accounts/host/keeper/handshake_test.go +++ b/modules/apps/27-interchain-accounts/host/keeper/handshake_test.go @@ -12,6 +12,7 @@ import ( channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v9/modules/core/05-port/types" host "github.com/cosmos/ibc-go/v9/modules/core/24-host" + ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" ibctesting "github.com/cosmos/ibc-go/v9/testing" ) @@ -515,14 +516,14 @@ func (suite *KeeperTestSuite) TestOnChanUpgradeTry() { malleate: func() { counterpartyVersion = "invalid-version" }, - expError: icatypes.ErrUnknownDataType, + expError: ibcerrors.ErrInvalidType, }, { name: "failure: cannot decode version string from channel", malleate: func() { path.EndpointB.UpdateChannel(func(channel *channeltypes.Channel) { channel.Version = "invalid-metadata-string" }) }, - expError: icatypes.ErrUnknownDataType, + expError: ibcerrors.ErrInvalidType, }, { name: "failure: metadata encoding not supported", diff --git a/modules/apps/27-interchain-accounts/host/keeper/relay.go b/modules/apps/27-interchain-accounts/host/keeper/relay.go index 0c18707a98a..91c03a75ee1 100644 --- a/modules/apps/27-interchain-accounts/host/keeper/relay.go +++ b/modules/apps/27-interchain-accounts/host/keeper/relay.go @@ -21,7 +21,7 @@ func (k Keeper) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet) ([]byt err := data.UnmarshalJSON(packet.GetData()) if err != nil { // UnmarshalJSON errors are indeterminate and therefore are not wrapped and included in failed acks - return nil, errorsmod.Wrapf(icatypes.ErrUnknownDataType, "cannot unmarshal ICS-27 interchain account packet data") + return nil, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS-27 interchain account packet data") } metadata, err := k.getAppMetadata(ctx, packet.DestinationPort, packet.DestinationChannel) diff --git a/modules/apps/27-interchain-accounts/host/keeper/relay_test.go b/modules/apps/27-interchain-accounts/host/keeper/relay_test.go index 9770e78096b..b4cbacfcf01 100644 --- a/modules/apps/27-interchain-accounts/host/keeper/relay_test.go +++ b/modules/apps/27-interchain-accounts/host/keeper/relay_test.go @@ -397,14 +397,14 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() { params := types.NewParams(true, []string{"/" + proto.MessageName(msg)}) suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params) }, - icatypes.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, { "cannot unmarshal interchain account packet data", func(encoding string) { packetData = []byte{} }, - icatypes.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, { "cannot deserialize interchain account packet data messages", @@ -418,7 +418,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() { packetData = icaPacketData.GetBytes() }, - icatypes.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, { "invalid packet type - UNSPECIFIED", @@ -782,7 +782,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() { params := types.NewParams(true, []string{"*"}) suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params) }, - icatypes.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, { "message type not allowed banktypes.MsgSend", @@ -832,7 +832,7 @@ func (suite *KeeperTestSuite) TestJSONOnRecvPacket() { params := types.NewParams(true, []string{sdk.MsgTypeURL((*banktypes.MsgSend)(nil))}) suite.chainB.GetSimApp().ICAHostKeeper.SetParams(suite.chainB.GetContext(), params) }, - icatypes.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, } diff --git a/modules/apps/27-interchain-accounts/types/codec.go b/modules/apps/27-interchain-accounts/types/codec.go index ddb092ce030..1f63cb9d1d2 100644 --- a/modules/apps/27-interchain-accounts/types/codec.go +++ b/modules/apps/27-interchain-accounts/types/codec.go @@ -9,6 +9,8 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + + ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" ) // ModuleCdc references the global interchain accounts module codec. Note, the codec @@ -60,7 +62,7 @@ func SerializeCosmosTx(cdc codec.Codec, msgs []proto.Message, encoding string) ( case EncodingProto3JSON: bz, err = cdc.MarshalJSON(cosmosTx) if err != nil { - return nil, errorsmod.Wrapf(ErrUnknownDataType, "cannot marshal CosmosTx with proto3 json") + return nil, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot marshal CosmosTx with proto3 json") } default: return nil, errorsmod.Wrapf(ErrInvalidCodec, "unsupported encoding format %s", encoding) @@ -84,11 +86,11 @@ func DeserializeCosmosTx(cdc codec.Codec, data []byte, encoding string) ([]sdk.M switch encoding { case EncodingProtobuf: if err := cdc.Unmarshal(data, &cosmosTx); err != nil { - return nil, errorsmod.Wrapf(ErrUnknownDataType, "cannot unmarshal CosmosTx with protobuf: %v", err) + return nil, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal CosmosTx with protobuf: %v", err) } case EncodingProto3JSON: if err := cdc.UnmarshalJSON(data, &cosmosTx); err != nil { - return nil, errorsmod.Wrapf(ErrUnknownDataType, "cannot unmarshal CosmosTx with proto3 json") + return nil, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal CosmosTx with proto3 json: %v", err) } default: return nil, errorsmod.Wrapf(ErrInvalidCodec, "unsupported encoding format %s", encoding) diff --git a/modules/apps/27-interchain-accounts/types/codec_test.go b/modules/apps/27-interchain-accounts/types/codec_test.go index ca808a64dac..388bc7a4cde 100644 --- a/modules/apps/27-interchain-accounts/types/codec_test.go +++ b/modules/apps/27-interchain-accounts/types/codec_test.go @@ -13,6 +13,7 @@ import ( stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/types" + ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" ) // mockSdkMsg defines a mock struct, used for testing codec error scenarios @@ -409,7 +410,7 @@ func (suite *TypesTestSuite) TestJSONDeserializeCosmosTx() { []proto.Message{ &mockSdkMsg{}, }, - types.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, { "failure: multiple unregistered msg types", @@ -419,13 +420,13 @@ func (suite *TypesTestSuite) TestJSONDeserializeCosmosTx() { &mockSdkMsg{}, &mockSdkMsg{}, }, - types.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, { "failure: empty bytes", []byte{}, nil, - types.ErrUnknownDataType, + ibcerrors.ErrInvalidType, }, } diff --git a/modules/apps/27-interchain-accounts/types/metadata.go b/modules/apps/27-interchain-accounts/types/metadata.go index 7f639d537f5..13cc5c30fc2 100644 --- a/modules/apps/27-interchain-accounts/types/metadata.go +++ b/modules/apps/27-interchain-accounts/types/metadata.go @@ -8,6 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" connectiontypes "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types" + ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" ) const ( @@ -58,7 +59,7 @@ func NewDefaultMetadataString(controllerConnectionID, hostConnectionID string) s func MetadataFromVersion(versionString string) (Metadata, error) { var metadata Metadata if err := ModuleCdc.UnmarshalJSON([]byte(versionString), &metadata); err != nil { - return Metadata{}, errorsmod.Wrapf(ErrUnknownDataType, "cannot unmarshal ICS-27 interchain accounts metadata") + return Metadata{}, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "cannot unmarshal ICS-27 interchain accounts metadata") } return metadata, nil } From beb2d93b58835ddb9ed8e7624988f1e66b849251 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Fri, 26 Jul 2024 21:20:32 +0200 Subject: [PATCH 40/78] adding backport for latest release lines, removing for previous ones (#6964) --- .github/mergify.yml | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/.github/mergify.yml b/.github/mergify.yml index d0209883bd2..f48e64dc159 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -50,46 +50,22 @@ pull_request_rules: backport: branches: - callbacks/release/v0.2.x+ibc-go-v8.0.x - - name: backport patches to v0.1.x wasm ibc-go v7.3.x & wasmvm 1.5.x branch + - name: backport patches to v0.3.x wasm ibc-go v7.3.x & wasmvm 1.5.x branch conditions: - base=main - - label=backport-wasm-v0.1.x+ibc-go-v7.3.x-wasmvm-v1.5.x + - label=backport-wasm-v0.3.x+ibc-go-v7.3.x-wasmvm-v1.5.x actions: backport: branches: - - 08-wasm/release/v0.1.x+ibc-go-v7.3.x-wasmvm-v1.5.x - - name: backport patches to v0.2.x wasm ibc-go v7.3.x & wasmvm 1.5.x branch + - 08-wasm/release/v0.3.x+ibc-go-v7.3.x-wasmvm-v1.5.x + - name: backport patches to v0.4.x wasm ibc-go v8.3.x & wasmvm 2.0.x branch conditions: - base=main - - label=backport-wasm-v0.2.x+ibc-go-v7.3.x-wasmvm-v1.5.x + - label=backport-wasm-v0.4.x+ibc-go-v8.3.x-wasmvm-v2.0.x actions: backport: branches: - - 08-wasm/release/v0.2.x+ibc-go-v7.3.x-wasmvm-v1.5.x - - name: backport patches to v0.1.x wasm ibc-go v8.0.x & wasmvm 1.5.x branch - conditions: - - base=main - - label=backport-wasm-v0.1.x+ibc-go-v8.0.x-wasmvm-v1.5.x - actions: - backport: - branches: - - 08-wasm/release/v0.1.x+ibc-go-v8.0.x-wasmvm-v1.5.x - - name: backport patches to v0.2.x wasm ibc-go v8.3.x & wasmvm 2.0.x branch - conditions: - - base=main - - label=backport-wasm-v0.2.x+ibc-go-v8.3.x-wasmvm-v2.0.x - actions: - backport: - branches: - - 08-wasm/release/v0.2.x+ibc-go-v8.3.x-wasmvm-v2.0.x - - name: backport patches to v0.3.x wasm ibc-go v8.3.x & wasmvm 2.0.x branch - conditions: - - base=main - - label=backport-wasm-v0.3.x+ibc-go-v8.3.x-wasmvm-v2.0.x - actions: - backport: - branches: - - 08-wasm/release/v0.3.x+ibc-go-v8.3.x-wasmvm-v2.0.x + - 08-wasm/release/v0.4.x+ibc-go-v8.3.x-wasmvm-v2.0.x - name: backport patches to v7.4.x branch conditions: - base=main From 84c9ad8af1b016d3b48fe62cc967c4cbfee6434e Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 29 Jul 2024 11:29:52 +0200 Subject: [PATCH 41/78] docs: changelog and migration docs for #6960 (#6973) * changelog and migration docs for #6960 * Update docs/docs/05-migrations/13-v8-to-v9.md --------- Co-authored-by: DimitrisJim --- CHANGELOG.md | 1 + docs/docs/05-migrations/13-v8-to-v9.md | 68 ++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6fda2ae855..f79930b0594 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (core/types) [\#6794](https://github.com/cosmos/ibc-go/pull/6794) The composite interface `QueryServer` has been removed from package `core/types`. Please use the granular `QueryServer` interfaces provided by each core submodule. * (light-clients/06-solomachine) [\#6888](https://github.com/cosmos/ibc-go/pull/6888) Remove `TypeClientMisbehaviour` constant and the `Type` method on `Misbehaviour`. * (light-clients/06-solomachine, light-clients/07-tendermint) [\#6891](https://github.com/cosmos/ibc-go/pull/6891) The `VerifyMembership` and `VerifyNonMembership` functions of solomachine's `ClientState` have been made private. The `VerifyMembership`, `VerifyNonMembership`, `GetTimestampAtHeight`, `Status` and `Initialize` functions of tendermint's `ClientState` have been made private. +* (core/04-channel) [\#6902](https://github.com/cosmos/ibc-go/pull/6902) Add channel version to core application callbacks. ### State Machine Breaking diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 73013c092bf..0e77dda94bb 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -106,6 +106,74 @@ func (k *Keeper) TimeoutOnClose( ) ``` +- The keeper handlers `RecvPacket`, `AcknowledgePacket`, `TimeoutPacket` and `TimeoutOnClose` now return the channel version, which the message server passes to the packet lifecycle application callbacks (`OnRecvPacket`, `OnAcknowledgementPacket` and `OnTimeoutPacket`). The channel version is useful when adding backwards compatible features to an existing application implementation (for example: in the context of ICS20 v2, middleware and the transfer application may use the channel version to unmarshal the packet differently depending on the channel version). + +```diff +func (k *Keeper) RecvPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet types.Packet, + proof []byte, + proofHeight exported.Height, +- ) error { ++ ) (string, error) { + +func (k *Keeper) AcknowledgePacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet types.Packet, + acknowledgement []byte, + proof []byte, + proofHeight exported.Height, +- ) error { ++ ) (string, error) { + +func (k *Keeper) TimeoutPacket( + ctx sdk.Context, + packet types.Packet, + proof []byte, + proofHeight exported.Height, + nextSequenceRecv uint64, +- ) error { ++ ) (string, error) { + +func (k *Keeper) TimeoutOnClose( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet types.Packet, + proof, + closedProof []byte, + proofHeight exported.Height, + nextSequenceRecv uint64, + counterpartyUpgradeSequence uint64, +- ) error { ++ ) (string, error) { +``` + +```diff +OnRecvPacket func( + ctx sdk.Context, ++ channelVersion string, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) exported.Acknowledgement + +OnAcknowledgementPacket func( + ctx sdk.Context, ++ channelVersion string, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error + +OnTimeoutPacket func( + ctx sdk.Context, ++ channelVersion string, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error +``` + ### 05-port - The signature of the `UnmarshalPacketData` function of the `PacketDataUnmarshaler` interface takes now extra arguments for the context and the port and channel identifiers. These parameters have been added so that implementations of the interface function can retrieve the channel version, which allows the provided packet data to be unmarshaled based on the channel version: From d70161b22b1f85da1302b5031032c406eea4a306 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 29 Jul 2024 11:30:57 +0200 Subject: [PATCH 42/78] docs(`update_client` event): remove header, add consensus heights (#6963) * remove header, add consensus heights * remove action row from events --- docs/events/events.md | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/docs/events/events.md b/docs/events/events.md index 0fa6d0bdb13..be6e740b894 100644 --- a/docs/events/events.md +++ b/docs/events/events.md @@ -22,19 +22,17 @@ callbacks to IBC applications. | create_client | client_id | \{clientId\} | | create_client | client_type | \{clientType\} | | create_client | consensus_height | \{consensusHeight\} | -| message | action | create_client | | message | module | ibc_client | ### MsgUpdateClient -| Type | Attribute Key | Attribute Value | -| ------------- | ---------------- | ----------------- | -| update_client | client_id | \{clientId\} | -| update_client | client_type | \{clientType\} | -| update_client | consensus_height | \{consensusHeight\} | -| update_client | header | \{header\} | -| message | action | update_client | -| message | module | ibc_client | +| Type | Attribute Key | Attribute Value | Status | +| ------------- | ----------------- | ------------------------------- | ---------- | +| update_client | client_id | \{clientId\} | | +| update_client | client_type | \{clientType\} | | +| update_client | consensus_height | \{consensusHeight\} | Deprecated | +| update_client | consensus_heights | \{join(consensusHeights, ",")\} | | +| message | module | ibc_client | | ### MsgSubmitMisbehaviour @@ -43,7 +41,6 @@ callbacks to IBC applications. | client_misbehaviour | client_id | \{clientId\} | | client_misbehaviour | client_type | \{clientType\} | | client_misbehaviour | consensus_height | \{consensusHeight\} | -| message | action | client_misbehaviour | | message | module | evidence | | message | sender | \{senderAddress\} | | submit_evidence | evidence_hash | \{evidenceHash\} | @@ -72,7 +69,6 @@ callbacks to IBC applications. | connection_open_init | connection_id | \{connectionId\} | | connection_open_init | client_id | \{clientId\} | | connection_open_init | counterparty_client_id | \{counterparty.clientId\} | -| message | action | connection_open_init | | message | module | ibc_connection | ### MsgConnectionOpenTry @@ -83,7 +79,6 @@ callbacks to IBC applications. | connection_open_try | client_id | \{clientId\} | | connection_open_try | counterparty_client_id | \{counterparty.clientId | | connection_open_try | counterparty_connection_id | \{counterparty.connectionId\} | -| message | action | connection_open_try | | message | module | ibc_connection | ### MsgConnectionOpenAck @@ -95,7 +90,6 @@ callbacks to IBC applications. | connection_open_ack | counterparty_client_id | \{counterparty.clientId\} | | connection_open_ack | counterparty_connection_id | \{counterparty.connectionId\} | | message | module | ibc_connection | -| message | action | connection_open_ack | ### MsgConnectionOpenConfirm @@ -105,7 +99,6 @@ callbacks to IBC applications. | connection_open_confirm | client_id | \{clientId\} | | connection_open_confirm | counterparty_client_id | \{counterparty.clientId\} | | connection_open_confirm | counterparty_connection_id | \{counterparty.connectionId\} | -| message | action | connection_open_confirm | | message | module | ibc_connection | ## ICS 04 - Channel @@ -118,7 +111,6 @@ callbacks to IBC applications. | channel_open_init | channel_id | \{channelId\} | | channel_open_init | counterparty_port_id | \{channel.counterparty.portId\} | | channel_open_init | connection_id | \{channel.connectionHops\} | -| message | action | channel_open_init | | message | module | ibc_channel | ### MsgChannelOpenTry @@ -130,7 +122,6 @@ callbacks to IBC applications. | channel_open_try | counterparty_port_id | \{channel.counterparty.portId\} | | channel_open_try | counterparty_channel_id | \{channel.counterparty.channelId\} | | channel_open_try | connection_id | \{channel.connectionHops\} | -| message | action | channel_open_try | | message | module | ibc_channel | ### MsgChannelOpenAck @@ -142,7 +133,6 @@ callbacks to IBC applications. | channel_open_ack | counterparty_port_id | \{channel.counterparty.portId\} | | channel_open_ack | counterparty_channel_id | \{channel.counterparty.channelId\} | | channel_open_ack | connection_id | \{channel.connectionHops\} | -| message | action | channel_open_ack | | message | module | ibc_channel | ### MsgChannelOpenConfirm @@ -155,7 +145,6 @@ callbacks to IBC applications. | channel_open_confirm | counterparty_channel_id | \{channel.counterparty.channelId\} | | channel_open_confirm | connection_id | \{channel.connectionHops\} | | message | module | ibc_channel | -| message | action | channel_open_confirm | ### MsgChannelCloseInit @@ -166,7 +155,6 @@ callbacks to IBC applications. | channel_close_init | counterparty_port_id | \{channel.counterparty.portId\} | | channel_close_init | counterparty_channel_id | \{channel.counterparty.channelId\} | | channel_close_init | connection_id | \{channel.connectionHops\} | -| message | action | channel_close_init | | message | module | ibc_channel | ### MsgChannelCloseConfirm @@ -178,7 +166,6 @@ callbacks to IBC applications. | channel_close_confirm | counterparty_port_id | \{channel.counterparty.portId\} | | channel_close_confirm | counterparty_channel_id | \{channel.counterparty.channelId\} | | channel_close_confirm | connection_id | \{channel.connectionHops\} | -| message | action | channel_close_confirm | | message | module | ibc_channel | ### SendPacket (application module call) @@ -196,7 +183,6 @@ callbacks to IBC applications. | send_packet | packet_channel_ordering | \{channel.Ordering\} | | | send_packet | packet_connection | \{channel.ConnectionHops[0]\} | Deprecated | | send_packet | connection_id | \{channel.ConnectionHops[0]\} | | -| message | action | application-module-defined-field | | | message | module | ibc_channel | | ### MsgRecvPacket @@ -214,7 +200,6 @@ callbacks to IBC applications. | recv_packet | packet_channel_ordering | \{channel.Ordering\} | | | recv_packet | packet_connection | \{channel.ConnectionHops[0]\} | Deprecated | | recv_packet | connection_id | \{channel.ConnectionHops[0]\} | | -| message | action | recv_packet | | | message | module | ibc_channel | | | Type | Attribute Key | Attribute Value | Status | @@ -231,7 +216,6 @@ callbacks to IBC applications. | write_acknowledgement | packet_channel_ordering | \{channel.Ordering\} | | | write_acknowledgement | packet_connection | \{channel.ConnectionHops[0]\} | Deprecated | | write_acknowledgement | connection_id | \{channel.ConnectionHops[0]\} | | -| message | action | write_acknowledgement | | | message | module | ibc_channel | | ### MsgAcknowledgePacket @@ -248,7 +232,6 @@ callbacks to IBC applications. | acknowledge_packet | packet_channel_ordering | \{channel.Ordering\} | | | acknowledge_packet | packet_connection | \{channel.ConnectionHops[0]\} | Deprecated | | acknowledge_packet | connection_id | \{channel.ConnectionHops[0]\} | | -| message | action | acknowledge_packet | | | message | module | ibc_channel | | ### MsgTimeoutPacket & MsgTimeoutOnClose @@ -264,5 +247,4 @@ callbacks to IBC applications. | timeout_packet | packet_dst_channel | \{destinationChannel\} | | timeout_packet | packet_channel_ordering | \{channel.Ordering\} | | timeout_packet | connection_id | \{channel.ConnectionHops[0]\} | -| message | action | timeout_packet | | message | module | ibc_channel | From b0a6bccf47125598ef78432c5eb239b7334cfafe Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 29 Jul 2024 12:00:06 +0200 Subject: [PATCH 43/78] add Jim as codeowner of transfer module (#6959) Co-authored-by: DimitrisJim --- .github/CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ce90972b464..e1adf1997f3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -29,8 +29,8 @@ # CODEOWNERS for ICS 20 -/modules/apps/transfer/ @colin-axner @AdityaSripal @damiannolan @chatton -/proto/ibc/applications/transfer/ @colin-axner @AdityaSripal @damiannolan @chatton +/modules/apps/transfer/ @colin-axner @AdityaSripal @damiannolan @chatton @DimitrisJim +/proto/ibc/applications/transfer/ @colin-axner @AdityaSripal @damiannolan @chatton @DimitrisJim # CODEOWNERS for interchain-accounts module From 1991f2327de07ea077cd542c38efdbbea972804d Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 29 Jul 2024 13:01:33 +0200 Subject: [PATCH 44/78] docs: v7.7.x and v8.4.x (#6957) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: v7.7.x and v8.4.x * chore: update docusaurus config. --------- Co-authored-by: DimitrisJim Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- docs/docusaurus.config.js | 6 +++--- .../{version-v7.6.x => version-v7.7.x}/00-intro.md | 0 .../01-ibc/01-overview.md | 0 .../01-ibc/02-integration.md | 0 .../01-ibc/03-apps/01-apps.md | 0 .../01-ibc/03-apps/02-ibcmodule.md | 0 .../01-ibc/03-apps/03-bindports.md | 0 .../01-ibc/03-apps/04-keeper.md | 0 .../01-ibc/03-apps/05-packets_acks.md | 0 .../01-ibc/03-apps/06-routing.md | 0 .../01-ibc/03-apps/_category_.json | 0 .../01-ibc/03-apps/images/packet_flow.png | Bin .../01-ibc/04-middleware/01-develop.md | 0 .../01-ibc/04-middleware/02-integration.md | 0 .../01-ibc/04-middleware/_category_.json | 0 .../01-ibc/05-upgrades/00-intro.md | 0 .../01-ibc/05-upgrades/01-quick-guide.md | 0 .../01-ibc/05-upgrades/02-developer-guide.md | 0 .../01-ibc/05-upgrades/03-genesis-restart.md | 0 .../01-ibc/05-upgrades/_category_.json | 0 .../01-ibc/06-proposals.md | 0 .../01-ibc/07-relayer.md | 0 .../01-ibc/08-proto-docs.md | 0 .../01-ibc/09-roadmap.md | 0 .../01-ibc/10-troubleshooting.md | 0 .../01-ibc/_category_.json | 0 .../02-apps/01-transfer/01-overview.md | 0 .../02-apps/01-transfer/02-state.md | 0 .../02-apps/01-transfer/03-state-transitions.md | 0 .../02-apps/01-transfer/04-messages.md | 2 ++ .../02-apps/01-transfer/05-events.md | 0 .../02-apps/01-transfer/06-metrics.md | 0 .../02-apps/01-transfer/07-params.md | 0 .../02-apps/01-transfer/08-authorizations.md | 0 .../02-apps/01-transfer/09-client.md | 0 .../02-apps/01-transfer/_category_.json | 0 .../02-apps/02-interchain-accounts/01-overview.md | 0 .../02-interchain-accounts/02-development.md | 0 .../02-interchain-accounts/03-auth-modules.md | 0 .../02-interchain-accounts/04-integration.md | 0 .../02-apps/02-interchain-accounts/05-messages.md | 0 .../02-apps/02-interchain-accounts/06-parameters.md | 0 .../02-interchain-accounts/07-tx-encoding.md | 0 .../02-apps/02-interchain-accounts/08-client.md | 0 .../02-interchain-accounts/09-active-channels.md | 0 .../10-legacy/01-auth-modules.md | 0 .../10-legacy/02-integration.md | 0 .../10-legacy/03-keeper-api.md | 0 .../10-legacy/_category_.json | 0 .../10-legacy/images/ica-pre-v6.png | Bin .../02-apps/02-interchain-accounts/_category_.json | 0 .../02-interchain-accounts/images/ica-v6.png | Bin .../02-apps/_category_.json | 0 .../01-developer-guide/01-overview.md | 0 .../01-developer-guide/02-client-state.md | 0 .../01-developer-guide/03-consensus-state.md | 0 .../04-updates-and-misbehaviour.md | 0 .../01-developer-guide/05-upgrades.md | 0 .../01-developer-guide/06-proofs.md | 0 .../01-developer-guide/07-proposals.md | 0 .../01-developer-guide/08-genesis.md | 0 .../03-light-clients/01-developer-guide/09-setup.md | 0 .../01-developer-guide/_category_.json | 0 .../02-solomachine/01-solomachine.md | 0 .../03-light-clients/02-solomachine/02-concepts.md | 0 .../03-light-clients/02-solomachine/03-state.md | 0 .../02-solomachine/04-state_transitions.md | 0 .../03-light-clients/02-solomachine/_category_.json | 0 .../03-light-clients/03-localhost/01-overview.md | 0 .../03-light-clients/03-localhost/02-integration.md | 0 .../03-localhost/03-client-state.md | 0 .../03-light-clients/03-localhost/04-connection.md | 0 .../03-localhost/05-state-verification.md | 0 .../03-light-clients/03-localhost/_category_.json | 0 .../03-light-clients/04-wasm/01-overview.md | 0 .../03-light-clients/04-wasm/02-concepts.md | 0 .../03-light-clients/04-wasm/03-integration.md | 0 .../03-light-clients/04-wasm/04-messages.md | 0 .../03-light-clients/04-wasm/05-governance.md | 0 .../03-light-clients/04-wasm/06-events.md | 0 .../03-light-clients/04-wasm/07-contracts.md | 0 .../03-light-clients/04-wasm/08-client.md | 0 .../03-light-clients/04-wasm/_category_.json | 0 .../03-light-clients/_category_.json | 0 .../04-middleware/01-ics29-fee/01-overview.md | 0 .../04-middleware/01-ics29-fee/02-integration.md | 0 .../04-middleware/01-ics29-fee/03-msgs.md | 0 .../01-ics29-fee/04-fee-distribution.md | 0 .../04-middleware/01-ics29-fee/05-events.md | 0 .../04-middleware/01-ics29-fee/06-end-users.md | 0 .../04-middleware/01-ics29-fee/_category_.json | 0 .../04-middleware/01-ics29-fee/images/feeflow.png | Bin .../01-ics29-fee/images/msgpaypacket.png | Bin .../01-ics29-fee/images/paypacketfeeasync.png | Bin .../04-middleware/02-callbacks/01-overview.md | 0 .../04-middleware/02-callbacks/02-integration.md | 0 .../04-middleware/02-callbacks/03-interfaces.md | 0 .../04-middleware/02-callbacks/04-events.md | 0 .../04-middleware/02-callbacks/05-end-users.md | 0 .../04-middleware/02-callbacks/06-gas.md | 0 .../04-middleware/02-callbacks/_category_.json | 0 .../02-callbacks/images/callbackflow.svg | 0 .../02-callbacks/images/ics4-callbackflow.svg | 0 .../04-middleware/_category_.json | 0 .../05-migrations/01-support-denoms-with-slashes.md | 0 .../05-migrations/02-sdk-to-v1.md | 0 .../05-migrations/03-v1-to-v2.md | 0 .../05-migrations/04-v2-to-v3.md | 0 .../05-migrations/05-v3-to-v4.md | 0 .../05-migrations/06-v4-to-v5.md | 0 .../05-migrations/07-v5-to-v6.md | 0 .../05-migrations/08-v6-to-v7.md | 0 .../05-migrations/09-v7-to-v7_1.md | 0 .../05-migrations/10-v7_2-to-v7_3.md | 0 .../05-migrations/_category_.json | 0 .../images/auth-module-decision-tree.png | Bin .../{version-v8.3.x => version-v8.4.x}/00-intro.md | 0 .../01-ibc/01-overview.md | 0 .../01-ibc/02-integration.md | 0 .../01-ibc/03-apps/01-apps.md | 0 .../01-ibc/03-apps/02-ibcmodule.md | 0 .../01-ibc/03-apps/03-bindports.md | 0 .../01-ibc/03-apps/04-keeper.md | 0 .../01-ibc/03-apps/05-packets_acks.md | 0 .../01-ibc/03-apps/06-routing.md | 0 .../01-ibc/03-apps/_category_.json | 0 .../01-ibc/03-apps/images/packet_flow.png | Bin .../01-ibc/04-middleware/01-overview.md | 0 .../01-ibc/04-middleware/02-develop.md | 0 .../01-ibc/04-middleware/03-integration.md | 0 .../01-ibc/04-middleware/_category_.json | 0 .../04-middleware/images/middleware-stack.png | Bin .../01-ibc/05-upgrades/00-intro.md | 0 .../01-ibc/05-upgrades/01-quick-guide.md | 0 .../01-ibc/05-upgrades/02-developer-guide.md | 0 .../01-ibc/05-upgrades/03-genesis-restart.md | 0 .../01-ibc/05-upgrades/_category_.json | 0 .../01-ibc/06-channel-upgrades.md | 0 .../01-ibc/07-proposals.md | 0 .../01-ibc/08-relayer.md | 0 .../01-ibc/09-proto-docs.md | 0 .../01-ibc/10-roadmap.md | 0 .../01-ibc/11-troubleshooting.md | 0 .../01-ibc/12-capability-module.md | 0 .../01-ibc/_category_.json | 0 .../02-apps/01-transfer/01-overview.md | 0 .../02-apps/01-transfer/02-state.md | 0 .../02-apps/01-transfer/03-state-transitions.md | 0 .../02-apps/01-transfer/04-messages.md | 2 ++ .../02-apps/01-transfer/05-events.md | 0 .../02-apps/01-transfer/06-metrics.md | 0 .../02-apps/01-transfer/07-params.md | 0 .../02-apps/01-transfer/08-authorizations.md | 0 .../02-apps/01-transfer/09-client.md | 0 .../02-apps/01-transfer/_category_.json | 0 .../02-apps/02-interchain-accounts/01-overview.md | 0 .../02-interchain-accounts/02-development.md | 0 .../02-interchain-accounts/03-auth-modules.md | 0 .../02-interchain-accounts/04-integration.md | 0 .../02-apps/02-interchain-accounts/05-messages.md | 0 .../02-apps/02-interchain-accounts/06-parameters.md | 0 .../02-interchain-accounts/07-tx-encoding.md | 0 .../02-apps/02-interchain-accounts/08-client.md | 0 .../02-interchain-accounts/09-active-channels.md | 0 .../10-legacy/01-auth-modules.md | 0 .../10-legacy/02-integration.md | 0 .../10-legacy/03-keeper-api.md | 0 .../10-legacy/_category_.json | 0 .../10-legacy/images/ica-pre-v6.png | Bin .../02-apps/02-interchain-accounts/_category_.json | 0 .../02-interchain-accounts/images/ica-v6.png | Bin .../02-apps/_category_.json | 0 .../01-developer-guide/01-overview.md | 0 .../01-developer-guide/02-client-state.md | 0 .../01-developer-guide/03-consensus-state.md | 0 .../04-updates-and-misbehaviour.md | 0 .../01-developer-guide/05-upgrades.md | 0 .../01-developer-guide/06-proofs.md | 0 .../01-developer-guide/07-proposals.md | 0 .../01-developer-guide/08-genesis.md | 0 .../03-light-clients/01-developer-guide/09-setup.md | 0 .../01-developer-guide/_category_.json | 0 .../03-light-clients/02-localhost/01-overview.md | 0 .../03-light-clients/02-localhost/02-integration.md | 0 .../02-localhost/03-client-state.md | 0 .../03-light-clients/02-localhost/04-connection.md | 0 .../02-localhost/05-state-verification.md | 0 .../03-light-clients/02-localhost/_category_.json | 0 .../03-solomachine/01-solomachine.md | 0 .../03-light-clients/03-solomachine/02-concepts.md | 0 .../03-light-clients/03-solomachine/03-state.md | 0 .../03-solomachine/04-state_transitions.md | 0 .../03-light-clients/03-solomachine/_category_.json | 0 .../03-light-clients/04-wasm/01-overview.md | 0 .../03-light-clients/04-wasm/02-concepts.md | 0 .../03-light-clients/04-wasm/03-integration.md | 0 .../03-light-clients/04-wasm/04-messages.md | 0 .../03-light-clients/04-wasm/05-governance.md | 0 .../03-light-clients/04-wasm/06-events.md | 0 .../03-light-clients/04-wasm/07-contracts.md | 0 .../03-light-clients/04-wasm/08-client.md | 0 .../03-light-clients/04-wasm/09-migrations.md | 0 .../03-light-clients/04-wasm/_category_.json | 0 .../03-light-clients/_category_.json | 0 .../04-middleware/01-ics29-fee/01-overview.md | 0 .../04-middleware/01-ics29-fee/02-integration.md | 0 .../04-middleware/01-ics29-fee/03-msgs.md | 0 .../01-ics29-fee/04-fee-distribution.md | 0 .../04-middleware/01-ics29-fee/05-events.md | 0 .../04-middleware/01-ics29-fee/06-end-users.md | 0 .../04-middleware/01-ics29-fee/_category_.json | 0 .../04-middleware/01-ics29-fee/images/feeflow.png | Bin .../01-ics29-fee/images/msgpaypacket.png | Bin .../01-ics29-fee/images/paypacketfeeasync.png | Bin .../04-middleware/02-callbacks/01-overview.md | 0 .../04-middleware/02-callbacks/02-integration.md | 0 .../04-middleware/02-callbacks/03-interfaces.md | 0 .../04-middleware/02-callbacks/04-events.md | 0 .../04-middleware/02-callbacks/05-end-users.md | 0 .../04-middleware/02-callbacks/06-gas.md | 0 .../04-middleware/02-callbacks/_category_.json | 0 .../02-callbacks/images/callbackflow.svg | 0 .../02-callbacks/images/ics4-callbackflow.svg | 0 .../04-middleware/_category_.json | 0 .../05-migrations/01-support-denoms-with-slashes.md | 0 .../05-migrations/02-sdk-to-v1.md | 0 .../05-migrations/03-v1-to-v2.md | 0 .../05-migrations/04-v2-to-v3.md | 0 .../05-migrations/05-v3-to-v4.md | 0 .../05-migrations/06-v4-to-v5.md | 0 .../05-migrations/07-v5-to-v6.md | 0 .../05-migrations/08-v6-to-v7.md | 0 .../05-migrations/09-v7-to-v7_1.md | 0 .../05-migrations/10-v7_2-to-v7_3.md | 0 .../05-migrations/11-v7-to-v8.md | 0 .../05-migrations/12-v8-to-v8_1.md | 0 .../05-migrations/_category_.json | 0 .../images/auth-module-decision-tree.png | Bin .../05-migrations/migration.template.md | 0 .../images/ibcoverview-dark.svg | 0 .../images/ibcoverview-light.svg | 0 ...x-sidebars.json => version-v7.7.x-sidebars.json} | 0 ...x-sidebars.json => version-v8.4.x-sidebars.json} | 0 docs/versions.json | 4 ++-- 244 files changed, 9 insertions(+), 5 deletions(-) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/00-intro.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/01-overview.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/02-integration.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/03-apps/01-apps.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/03-apps/02-ibcmodule.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/03-apps/03-bindports.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/03-apps/04-keeper.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/03-apps/05-packets_acks.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/03-apps/06-routing.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/03-apps/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/03-apps/images/packet_flow.png (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/04-middleware/01-develop.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/04-middleware/02-integration.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/04-middleware/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/05-upgrades/00-intro.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/05-upgrades/01-quick-guide.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/05-upgrades/02-developer-guide.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/05-upgrades/03-genesis-restart.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/05-upgrades/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/06-proposals.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/07-relayer.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/08-proto-docs.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/09-roadmap.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/10-troubleshooting.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/01-ibc/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/01-overview.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/02-state.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/03-state-transitions.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/04-messages.md (89%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/05-events.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/06-metrics.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/07-params.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/08-authorizations.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/09-client.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/01-transfer/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/01-overview.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/02-development.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/03-auth-modules.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/04-integration.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/05-messages.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/06-parameters.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/07-tx-encoding.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/08-client.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/09-active-channels.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/10-legacy/02-integration.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/10-legacy/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/02-interchain-accounts/images/ica-v6.png (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/02-apps/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/01-overview.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/02-client-state.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/03-consensus-state.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/05-upgrades.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/06-proofs.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/07-proposals.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/08-genesis.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/09-setup.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/01-developer-guide/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/02-solomachine/01-solomachine.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/02-solomachine/02-concepts.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/02-solomachine/03-state.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/02-solomachine/04-state_transitions.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/02-solomachine/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/03-localhost/01-overview.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/03-localhost/02-integration.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/03-localhost/03-client-state.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/03-localhost/04-connection.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/03-localhost/05-state-verification.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/03-localhost/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/01-overview.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/02-concepts.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/03-integration.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/04-messages.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/05-governance.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/06-events.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/07-contracts.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/08-client.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/04-wasm/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/03-light-clients/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/01-overview.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/02-integration.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/03-msgs.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/04-fee-distribution.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/05-events.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/06-end-users.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/images/feeflow.png (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/images/msgpaypacket.png (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/01-ics29-fee/images/paypacketfeeasync.png (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/01-overview.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/02-integration.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/03-interfaces.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/04-events.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/05-end-users.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/06-gas.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/images/callbackflow.svg (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/02-callbacks/images/ics4-callbackflow.svg (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/04-middleware/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/01-support-denoms-with-slashes.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/02-sdk-to-v1.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/03-v1-to-v2.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/04-v2-to-v3.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/05-v3-to-v4.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/06-v4-to-v5.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/07-v5-to-v6.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/08-v6-to-v7.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/09-v7-to-v7_1.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/10-v7_2-to-v7_3.md (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/_category_.json (100%) rename docs/versioned_docs/{version-v7.6.x => version-v7.7.x}/05-migrations/images/auth-module-decision-tree.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/00-intro.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/02-integration.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/03-apps/01-apps.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/03-apps/02-ibcmodule.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/03-apps/03-bindports.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/03-apps/04-keeper.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/03-apps/05-packets_acks.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/03-apps/06-routing.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/03-apps/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/03-apps/images/packet_flow.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/04-middleware/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/04-middleware/02-develop.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/04-middleware/03-integration.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/04-middleware/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/04-middleware/images/middleware-stack.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/05-upgrades/00-intro.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/05-upgrades/01-quick-guide.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/05-upgrades/02-developer-guide.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/05-upgrades/03-genesis-restart.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/05-upgrades/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/06-channel-upgrades.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/07-proposals.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/08-relayer.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/09-proto-docs.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/10-roadmap.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/11-troubleshooting.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/12-capability-module.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/01-ibc/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/02-state.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/03-state-transitions.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/04-messages.md (89%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/05-events.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/06-metrics.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/07-params.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/08-authorizations.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/09-client.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/01-transfer/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/02-development.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/03-auth-modules.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/04-integration.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/05-messages.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/06-parameters.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/07-tx-encoding.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/08-client.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/09-active-channels.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/10-legacy/02-integration.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/10-legacy/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/02-interchain-accounts/images/ica-v6.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/02-apps/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/02-client-state.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/03-consensus-state.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/05-upgrades.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/06-proofs.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/07-proposals.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/08-genesis.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/09-setup.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/01-developer-guide/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/02-localhost/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/02-localhost/02-integration.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/02-localhost/03-client-state.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/02-localhost/04-connection.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/02-localhost/05-state-verification.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/02-localhost/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/03-solomachine/01-solomachine.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/03-solomachine/02-concepts.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/03-solomachine/03-state.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/03-solomachine/04-state_transitions.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/03-solomachine/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/02-concepts.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/03-integration.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/04-messages.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/05-governance.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/06-events.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/07-contracts.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/08-client.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/09-migrations.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/04-wasm/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/03-light-clients/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/02-integration.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/03-msgs.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/04-fee-distribution.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/05-events.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/06-end-users.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/images/feeflow.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/images/msgpaypacket.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/01-ics29-fee/images/paypacketfeeasync.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/01-overview.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/02-integration.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/03-interfaces.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/04-events.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/05-end-users.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/06-gas.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/images/callbackflow.svg (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/02-callbacks/images/ics4-callbackflow.svg (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/04-middleware/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/01-support-denoms-with-slashes.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/02-sdk-to-v1.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/03-v1-to-v2.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/04-v2-to-v3.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/05-v3-to-v4.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/06-v4-to-v5.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/07-v5-to-v6.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/08-v6-to-v7.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/09-v7-to-v7_1.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/10-v7_2-to-v7_3.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/11-v7-to-v8.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/12-v8-to-v8_1.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/_category_.json (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/images/auth-module-decision-tree.png (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/05-migrations/migration.template.md (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/images/ibcoverview-dark.svg (100%) rename docs/versioned_docs/{version-v8.3.x => version-v8.4.x}/images/ibcoverview-light.svg (100%) rename docs/versioned_sidebars/{version-v7.6.x-sidebars.json => version-v7.7.x-sidebars.json} (100%) rename docs/versioned_sidebars/{version-v8.3.x-sidebars.json => version-v8.4.x-sidebars.json} (100%) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index b419800eb40..e1a81317b2e 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -49,18 +49,18 @@ const config = { // Exclude template markdown files from the docs exclude: ["**/*.template.md"], // Select the latest version - lastVersion: "v8.3.x", + lastVersion: "v8.4.x", // Assign banners to specific versions versions: { current: { path: "main", banner: "unreleased", }, - "v8.3.x": { + "v8.4.x": { path: "v8", banner: "none", }, - "v7.6.x": { + "v7.7.x": { path: "v7", banner: "none", }, diff --git a/docs/versioned_docs/version-v7.6.x/00-intro.md b/docs/versioned_docs/version-v7.7.x/00-intro.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/00-intro.md rename to docs/versioned_docs/version-v7.7.x/00-intro.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/01-overview.md b/docs/versioned_docs/version-v7.7.x/01-ibc/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/01-overview.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/01-overview.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/02-integration.md b/docs/versioned_docs/version-v7.7.x/01-ibc/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/02-integration.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/02-integration.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/01-apps.md b/docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/01-apps.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/01-apps.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/01-apps.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/02-ibcmodule.md b/docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/02-ibcmodule.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/02-ibcmodule.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/02-ibcmodule.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/03-bindports.md b/docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/03-bindports.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/03-bindports.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/03-bindports.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/04-keeper.md b/docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/04-keeper.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/04-keeper.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/04-keeper.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/05-packets_acks.md b/docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/05-packets_acks.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/05-packets_acks.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/05-packets_acks.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/06-routing.md b/docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/06-routing.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/06-routing.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/06-routing.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/_category_.json b/docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/_category_.json rename to docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/images/packet_flow.png b/docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/images/packet_flow.png similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/03-apps/images/packet_flow.png rename to docs/versioned_docs/version-v7.7.x/01-ibc/03-apps/images/packet_flow.png diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/04-middleware/01-develop.md b/docs/versioned_docs/version-v7.7.x/01-ibc/04-middleware/01-develop.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/04-middleware/01-develop.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/04-middleware/01-develop.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/04-middleware/02-integration.md b/docs/versioned_docs/version-v7.7.x/01-ibc/04-middleware/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/04-middleware/02-integration.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/04-middleware/02-integration.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/04-middleware/_category_.json b/docs/versioned_docs/version-v7.7.x/01-ibc/04-middleware/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/04-middleware/_category_.json rename to docs/versioned_docs/version-v7.7.x/01-ibc/04-middleware/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/00-intro.md b/docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/00-intro.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/00-intro.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/00-intro.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/01-quick-guide.md b/docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/01-quick-guide.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/01-quick-guide.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/01-quick-guide.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/02-developer-guide.md b/docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/02-developer-guide.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/02-developer-guide.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/02-developer-guide.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/03-genesis-restart.md b/docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/03-genesis-restart.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/03-genesis-restart.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/03-genesis-restart.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/_category_.json b/docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/05-upgrades/_category_.json rename to docs/versioned_docs/version-v7.7.x/01-ibc/05-upgrades/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/06-proposals.md b/docs/versioned_docs/version-v7.7.x/01-ibc/06-proposals.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/06-proposals.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/06-proposals.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/07-relayer.md b/docs/versioned_docs/version-v7.7.x/01-ibc/07-relayer.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/07-relayer.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/07-relayer.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/08-proto-docs.md b/docs/versioned_docs/version-v7.7.x/01-ibc/08-proto-docs.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/08-proto-docs.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/08-proto-docs.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/09-roadmap.md b/docs/versioned_docs/version-v7.7.x/01-ibc/09-roadmap.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/09-roadmap.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/09-roadmap.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/10-troubleshooting.md b/docs/versioned_docs/version-v7.7.x/01-ibc/10-troubleshooting.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/10-troubleshooting.md rename to docs/versioned_docs/version-v7.7.x/01-ibc/10-troubleshooting.md diff --git a/docs/versioned_docs/version-v7.6.x/01-ibc/_category_.json b/docs/versioned_docs/version-v7.7.x/01-ibc/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/01-ibc/_category_.json rename to docs/versioned_docs/version-v7.7.x/01-ibc/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/01-overview.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/01-overview.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/01-overview.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/02-state.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/02-state.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/02-state.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/02-state.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/03-state-transitions.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/03-state-transitions.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/03-state-transitions.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/03-state-transitions.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/04-messages.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/04-messages.md similarity index 89% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/04-messages.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/04-messages.md index 202596ed70f..6f6fcf5fbcb 100644 --- a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/04-messages.md +++ b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/04-messages.md @@ -40,6 +40,8 @@ This message will send a fungible token to the counterparty chain represented by The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain. +If the `Amount` is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corresponding denomination will be transferred. The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. + ### Memo The memo field was added to allow applications and users to attach metadata to transfer packets. The field is optional and may be left empty. When it is used to attach metadata for a particular middleware, the memo field should be represented as a json object where different middlewares use different json keys. diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/05-events.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/05-events.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/05-events.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/05-events.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/06-metrics.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/06-metrics.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/06-metrics.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/06-metrics.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/07-params.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/07-params.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/07-params.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/07-params.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/08-authorizations.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/08-authorizations.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/08-authorizations.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/08-authorizations.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/09-client.md b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/09-client.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/09-client.md rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/09-client.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/_category_.json b/docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/01-transfer/_category_.json rename to docs/versioned_docs/version-v7.7.x/02-apps/01-transfer/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/01-overview.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/01-overview.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/01-overview.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/02-development.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/02-development.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/02-development.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/02-development.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/03-auth-modules.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/03-auth-modules.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/03-auth-modules.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/03-auth-modules.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/04-integration.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/04-integration.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/04-integration.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/04-integration.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/05-messages.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/05-messages.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/05-messages.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/05-messages.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/06-parameters.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/06-parameters.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/06-parameters.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/06-parameters.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/07-tx-encoding.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/07-tx-encoding.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/07-tx-encoding.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/07-tx-encoding.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/08-client.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/08-client.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/08-client.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/08-client.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/09-active-channels.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/09-active-channels.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/09-active-channels.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/09-active-channels.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/_category_.json b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/_category_.json rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/_category_.json b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/_category_.json rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/images/ica-v6.png b/docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/images/ica-v6.png similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/02-interchain-accounts/images/ica-v6.png rename to docs/versioned_docs/version-v7.7.x/02-apps/02-interchain-accounts/images/ica-v6.png diff --git a/docs/versioned_docs/version-v7.6.x/02-apps/_category_.json b/docs/versioned_docs/version-v7.7.x/02-apps/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/02-apps/_category_.json rename to docs/versioned_docs/version-v7.7.x/02-apps/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/01-overview.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/01-overview.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/01-overview.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/02-client-state.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/02-client-state.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/02-client-state.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/02-client-state.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/03-consensus-state.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/03-consensus-state.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/03-consensus-state.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/03-consensus-state.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/05-upgrades.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/05-upgrades.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/05-upgrades.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/05-upgrades.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/06-proofs.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/06-proofs.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/06-proofs.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/06-proofs.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/07-proposals.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/07-proposals.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/07-proposals.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/07-proposals.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/08-genesis.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/08-genesis.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/08-genesis.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/08-genesis.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/09-setup.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/09-setup.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/09-setup.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/09-setup.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/_category_.json b/docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/01-developer-guide/_category_.json rename to docs/versioned_docs/version-v7.7.x/03-light-clients/01-developer-guide/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/01-solomachine.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/01-solomachine.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/01-solomachine.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/01-solomachine.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/02-concepts.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/02-concepts.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/02-concepts.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/02-concepts.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/03-state.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/03-state.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/03-state.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/03-state.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/04-state_transitions.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/04-state_transitions.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/04-state_transitions.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/04-state_transitions.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/_category_.json b/docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/02-solomachine/_category_.json rename to docs/versioned_docs/version-v7.7.x/03-light-clients/02-solomachine/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/01-overview.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/01-overview.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/01-overview.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/02-integration.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/02-integration.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/02-integration.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/03-client-state.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/03-client-state.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/03-client-state.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/03-client-state.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/04-connection.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/04-connection.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/04-connection.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/04-connection.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/05-state-verification.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/05-state-verification.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/05-state-verification.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/05-state-verification.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/_category_.json b/docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/03-localhost/_category_.json rename to docs/versioned_docs/version-v7.7.x/03-light-clients/03-localhost/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/01-overview.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/01-overview.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/01-overview.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/02-concepts.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/02-concepts.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/02-concepts.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/02-concepts.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/03-integration.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/03-integration.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/03-integration.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/03-integration.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/04-messages.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/04-messages.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/04-messages.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/04-messages.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/05-governance.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/05-governance.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/05-governance.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/05-governance.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/06-events.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/06-events.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/06-events.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/06-events.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/07-contracts.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/07-contracts.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/07-contracts.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/07-contracts.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/08-client.md b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/08-client.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/08-client.md rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/08-client.md diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/_category_.json b/docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/04-wasm/_category_.json rename to docs/versioned_docs/version-v7.7.x/03-light-clients/04-wasm/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/03-light-clients/_category_.json b/docs/versioned_docs/version-v7.7.x/03-light-clients/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/03-light-clients/_category_.json rename to docs/versioned_docs/version-v7.7.x/03-light-clients/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/01-overview.md b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/01-overview.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/01-overview.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/02-integration.md b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/02-integration.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/02-integration.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/03-msgs.md b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/03-msgs.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/03-msgs.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/03-msgs.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/04-fee-distribution.md b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/04-fee-distribution.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/04-fee-distribution.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/04-fee-distribution.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/05-events.md b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/05-events.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/05-events.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/05-events.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/06-end-users.md b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/06-end-users.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/06-end-users.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/06-end-users.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/_category_.json b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/_category_.json rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/images/feeflow.png b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/images/feeflow.png similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/images/feeflow.png rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/images/feeflow.png diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/images/msgpaypacket.png b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/images/msgpaypacket.png similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/images/msgpaypacket.png rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/images/msgpaypacket.png diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png b/docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png rename to docs/versioned_docs/version-v7.7.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/01-overview.md b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/01-overview.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/01-overview.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/02-integration.md b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/02-integration.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/02-integration.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/03-interfaces.md b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/03-interfaces.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/03-interfaces.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/03-interfaces.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/04-events.md b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/04-events.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/04-events.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/04-events.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/05-end-users.md b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/05-end-users.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/05-end-users.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/05-end-users.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/06-gas.md b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/06-gas.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/06-gas.md rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/06-gas.md diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/_category_.json b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/_category_.json rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/images/callbackflow.svg b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/images/callbackflow.svg similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/images/callbackflow.svg rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/images/callbackflow.svg diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg b/docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg rename to docs/versioned_docs/version-v7.7.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg diff --git a/docs/versioned_docs/version-v7.6.x/04-middleware/_category_.json b/docs/versioned_docs/version-v7.7.x/04-middleware/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/04-middleware/_category_.json rename to docs/versioned_docs/version-v7.7.x/04-middleware/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/01-support-denoms-with-slashes.md b/docs/versioned_docs/version-v7.7.x/05-migrations/01-support-denoms-with-slashes.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/01-support-denoms-with-slashes.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/01-support-denoms-with-slashes.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/02-sdk-to-v1.md b/docs/versioned_docs/version-v7.7.x/05-migrations/02-sdk-to-v1.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/02-sdk-to-v1.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/02-sdk-to-v1.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/03-v1-to-v2.md b/docs/versioned_docs/version-v7.7.x/05-migrations/03-v1-to-v2.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/03-v1-to-v2.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/03-v1-to-v2.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/04-v2-to-v3.md b/docs/versioned_docs/version-v7.7.x/05-migrations/04-v2-to-v3.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/04-v2-to-v3.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/04-v2-to-v3.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/05-v3-to-v4.md b/docs/versioned_docs/version-v7.7.x/05-migrations/05-v3-to-v4.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/05-v3-to-v4.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/05-v3-to-v4.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/06-v4-to-v5.md b/docs/versioned_docs/version-v7.7.x/05-migrations/06-v4-to-v5.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/06-v4-to-v5.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/06-v4-to-v5.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/07-v5-to-v6.md b/docs/versioned_docs/version-v7.7.x/05-migrations/07-v5-to-v6.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/07-v5-to-v6.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/07-v5-to-v6.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/08-v6-to-v7.md b/docs/versioned_docs/version-v7.7.x/05-migrations/08-v6-to-v7.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/08-v6-to-v7.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/08-v6-to-v7.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/09-v7-to-v7_1.md b/docs/versioned_docs/version-v7.7.x/05-migrations/09-v7-to-v7_1.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/09-v7-to-v7_1.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/09-v7-to-v7_1.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/10-v7_2-to-v7_3.md b/docs/versioned_docs/version-v7.7.x/05-migrations/10-v7_2-to-v7_3.md similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/10-v7_2-to-v7_3.md rename to docs/versioned_docs/version-v7.7.x/05-migrations/10-v7_2-to-v7_3.md diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/_category_.json b/docs/versioned_docs/version-v7.7.x/05-migrations/_category_.json similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/_category_.json rename to docs/versioned_docs/version-v7.7.x/05-migrations/_category_.json diff --git a/docs/versioned_docs/version-v7.6.x/05-migrations/images/auth-module-decision-tree.png b/docs/versioned_docs/version-v7.7.x/05-migrations/images/auth-module-decision-tree.png similarity index 100% rename from docs/versioned_docs/version-v7.6.x/05-migrations/images/auth-module-decision-tree.png rename to docs/versioned_docs/version-v7.7.x/05-migrations/images/auth-module-decision-tree.png diff --git a/docs/versioned_docs/version-v8.3.x/00-intro.md b/docs/versioned_docs/version-v8.4.x/00-intro.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/00-intro.md rename to docs/versioned_docs/version-v8.4.x/00-intro.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/01-overview.md b/docs/versioned_docs/version-v8.4.x/01-ibc/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/01-overview.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/02-integration.md b/docs/versioned_docs/version-v8.4.x/01-ibc/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/02-integration.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/02-integration.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/01-apps.md b/docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/01-apps.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/01-apps.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/01-apps.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/02-ibcmodule.md b/docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/02-ibcmodule.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/02-ibcmodule.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/02-ibcmodule.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/03-bindports.md b/docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/03-bindports.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/03-bindports.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/03-bindports.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/04-keeper.md b/docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/04-keeper.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/04-keeper.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/04-keeper.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/05-packets_acks.md b/docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/05-packets_acks.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/05-packets_acks.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/05-packets_acks.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/06-routing.md b/docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/06-routing.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/06-routing.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/06-routing.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/_category_.json b/docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/_category_.json rename to docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/images/packet_flow.png b/docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/images/packet_flow.png similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/03-apps/images/packet_flow.png rename to docs/versioned_docs/version-v8.4.x/01-ibc/03-apps/images/packet_flow.png diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/01-overview.md b/docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/01-overview.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/02-develop.md b/docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/02-develop.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/02-develop.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/02-develop.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/03-integration.md b/docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/03-integration.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/03-integration.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/03-integration.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/_category_.json b/docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/_category_.json rename to docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/images/middleware-stack.png b/docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/images/middleware-stack.png similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/04-middleware/images/middleware-stack.png rename to docs/versioned_docs/version-v8.4.x/01-ibc/04-middleware/images/middleware-stack.png diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/00-intro.md b/docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/00-intro.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/00-intro.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/00-intro.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/01-quick-guide.md b/docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/01-quick-guide.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/01-quick-guide.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/01-quick-guide.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/02-developer-guide.md b/docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/02-developer-guide.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/02-developer-guide.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/02-developer-guide.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/03-genesis-restart.md b/docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/03-genesis-restart.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/03-genesis-restart.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/03-genesis-restart.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/_category_.json b/docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/05-upgrades/_category_.json rename to docs/versioned_docs/version-v8.4.x/01-ibc/05-upgrades/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/06-channel-upgrades.md b/docs/versioned_docs/version-v8.4.x/01-ibc/06-channel-upgrades.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/06-channel-upgrades.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/06-channel-upgrades.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/07-proposals.md b/docs/versioned_docs/version-v8.4.x/01-ibc/07-proposals.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/07-proposals.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/07-proposals.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/08-relayer.md b/docs/versioned_docs/version-v8.4.x/01-ibc/08-relayer.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/08-relayer.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/08-relayer.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/09-proto-docs.md b/docs/versioned_docs/version-v8.4.x/01-ibc/09-proto-docs.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/09-proto-docs.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/09-proto-docs.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/10-roadmap.md b/docs/versioned_docs/version-v8.4.x/01-ibc/10-roadmap.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/10-roadmap.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/10-roadmap.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/11-troubleshooting.md b/docs/versioned_docs/version-v8.4.x/01-ibc/11-troubleshooting.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/11-troubleshooting.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/11-troubleshooting.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/12-capability-module.md b/docs/versioned_docs/version-v8.4.x/01-ibc/12-capability-module.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/12-capability-module.md rename to docs/versioned_docs/version-v8.4.x/01-ibc/12-capability-module.md diff --git a/docs/versioned_docs/version-v8.3.x/01-ibc/_category_.json b/docs/versioned_docs/version-v8.4.x/01-ibc/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/01-ibc/_category_.json rename to docs/versioned_docs/version-v8.4.x/01-ibc/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/01-overview.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/01-overview.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/02-state.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/02-state.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/02-state.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/02-state.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/03-state-transitions.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/03-state-transitions.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/03-state-transitions.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/03-state-transitions.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/04-messages.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/04-messages.md similarity index 89% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/04-messages.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/04-messages.md index 202596ed70f..6f6fcf5fbcb 100644 --- a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/04-messages.md +++ b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/04-messages.md @@ -40,6 +40,8 @@ This message will send a fungible token to the counterparty chain represented by The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain. +If the `Amount` is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corresponding denomination will be transferred. The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. + ### Memo The memo field was added to allow applications and users to attach metadata to transfer packets. The field is optional and may be left empty. When it is used to attach metadata for a particular middleware, the memo field should be represented as a json object where different middlewares use different json keys. diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/05-events.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/05-events.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/05-events.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/05-events.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/06-metrics.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/06-metrics.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/06-metrics.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/06-metrics.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/07-params.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/07-params.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/07-params.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/07-params.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/08-authorizations.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/08-authorizations.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/08-authorizations.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/08-authorizations.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/09-client.md b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/09-client.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/09-client.md rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/09-client.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/_category_.json b/docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/01-transfer/_category_.json rename to docs/versioned_docs/version-v8.4.x/02-apps/01-transfer/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/01-overview.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/01-overview.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/02-development.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/02-development.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/02-development.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/02-development.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/03-auth-modules.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/03-auth-modules.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/03-auth-modules.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/03-auth-modules.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/04-integration.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/04-integration.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/04-integration.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/04-integration.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/05-messages.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/05-messages.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/05-messages.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/05-messages.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/06-parameters.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/06-parameters.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/06-parameters.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/06-parameters.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/07-tx-encoding.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/07-tx-encoding.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/07-tx-encoding.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/07-tx-encoding.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/08-client.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/08-client.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/08-client.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/08-client.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/09-active-channels.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/09-active-channels.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/09-active-channels.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/09-active-channels.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/_category_.json b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/_category_.json rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/_category_.json b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/_category_.json rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/images/ica-v6.png b/docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/images/ica-v6.png similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/02-interchain-accounts/images/ica-v6.png rename to docs/versioned_docs/version-v8.4.x/02-apps/02-interchain-accounts/images/ica-v6.png diff --git a/docs/versioned_docs/version-v8.3.x/02-apps/_category_.json b/docs/versioned_docs/version-v8.4.x/02-apps/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/02-apps/_category_.json rename to docs/versioned_docs/version-v8.4.x/02-apps/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/01-overview.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/01-overview.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/02-client-state.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/02-client-state.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/02-client-state.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/02-client-state.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/03-consensus-state.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/03-consensus-state.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/03-consensus-state.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/03-consensus-state.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/05-upgrades.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/05-upgrades.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/05-upgrades.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/05-upgrades.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/06-proofs.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/06-proofs.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/06-proofs.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/06-proofs.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/07-proposals.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/07-proposals.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/07-proposals.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/07-proposals.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/08-genesis.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/08-genesis.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/08-genesis.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/08-genesis.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/09-setup.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/09-setup.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/09-setup.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/09-setup.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/_category_.json b/docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/01-developer-guide/_category_.json rename to docs/versioned_docs/version-v8.4.x/03-light-clients/01-developer-guide/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/01-overview.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/01-overview.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/02-integration.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/02-integration.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/02-integration.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/03-client-state.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/03-client-state.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/03-client-state.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/03-client-state.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/04-connection.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/04-connection.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/04-connection.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/04-connection.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/05-state-verification.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/05-state-verification.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/05-state-verification.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/05-state-verification.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/_category_.json b/docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/02-localhost/_category_.json rename to docs/versioned_docs/version-v8.4.x/03-light-clients/02-localhost/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/01-solomachine.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/01-solomachine.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/01-solomachine.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/01-solomachine.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/02-concepts.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/02-concepts.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/02-concepts.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/02-concepts.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/03-state.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/03-state.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/03-state.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/03-state.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/04-state_transitions.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/04-state_transitions.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/04-state_transitions.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/04-state_transitions.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/_category_.json b/docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/03-solomachine/_category_.json rename to docs/versioned_docs/version-v8.4.x/03-light-clients/03-solomachine/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/01-overview.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/01-overview.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/02-concepts.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/02-concepts.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/02-concepts.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/02-concepts.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/03-integration.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/03-integration.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/03-integration.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/03-integration.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/04-messages.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/04-messages.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/04-messages.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/04-messages.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/05-governance.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/05-governance.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/05-governance.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/05-governance.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/06-events.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/06-events.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/06-events.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/06-events.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/07-contracts.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/07-contracts.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/07-contracts.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/07-contracts.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/08-client.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/08-client.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/08-client.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/08-client.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/09-migrations.md b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/09-migrations.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/09-migrations.md rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/09-migrations.md diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/_category_.json b/docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/04-wasm/_category_.json rename to docs/versioned_docs/version-v8.4.x/03-light-clients/04-wasm/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/03-light-clients/_category_.json b/docs/versioned_docs/version-v8.4.x/03-light-clients/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/03-light-clients/_category_.json rename to docs/versioned_docs/version-v8.4.x/03-light-clients/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/01-overview.md b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/01-overview.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/02-integration.md b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/02-integration.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/02-integration.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/03-msgs.md b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/03-msgs.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/03-msgs.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/03-msgs.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/04-fee-distribution.md b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/04-fee-distribution.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/04-fee-distribution.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/04-fee-distribution.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/05-events.md b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/05-events.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/05-events.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/05-events.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/06-end-users.md b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/06-end-users.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/06-end-users.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/06-end-users.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/_category_.json b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/_category_.json rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/images/feeflow.png b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/images/feeflow.png similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/images/feeflow.png rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/images/feeflow.png diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/images/msgpaypacket.png b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/images/msgpaypacket.png similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/images/msgpaypacket.png rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/images/msgpaypacket.png diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png b/docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png rename to docs/versioned_docs/version-v8.4.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/01-overview.md b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/01-overview.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/01-overview.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/01-overview.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/02-integration.md b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/02-integration.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/02-integration.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/02-integration.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/03-interfaces.md b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/03-interfaces.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/03-interfaces.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/03-interfaces.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/04-events.md b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/04-events.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/04-events.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/04-events.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/05-end-users.md b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/05-end-users.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/05-end-users.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/05-end-users.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/06-gas.md b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/06-gas.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/06-gas.md rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/06-gas.md diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/_category_.json b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/_category_.json rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/images/callbackflow.svg b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/images/callbackflow.svg similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/images/callbackflow.svg rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/images/callbackflow.svg diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg b/docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg rename to docs/versioned_docs/version-v8.4.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg diff --git a/docs/versioned_docs/version-v8.3.x/04-middleware/_category_.json b/docs/versioned_docs/version-v8.4.x/04-middleware/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/04-middleware/_category_.json rename to docs/versioned_docs/version-v8.4.x/04-middleware/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/01-support-denoms-with-slashes.md b/docs/versioned_docs/version-v8.4.x/05-migrations/01-support-denoms-with-slashes.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/01-support-denoms-with-slashes.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/01-support-denoms-with-slashes.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/02-sdk-to-v1.md b/docs/versioned_docs/version-v8.4.x/05-migrations/02-sdk-to-v1.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/02-sdk-to-v1.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/02-sdk-to-v1.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/03-v1-to-v2.md b/docs/versioned_docs/version-v8.4.x/05-migrations/03-v1-to-v2.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/03-v1-to-v2.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/03-v1-to-v2.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/04-v2-to-v3.md b/docs/versioned_docs/version-v8.4.x/05-migrations/04-v2-to-v3.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/04-v2-to-v3.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/04-v2-to-v3.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/05-v3-to-v4.md b/docs/versioned_docs/version-v8.4.x/05-migrations/05-v3-to-v4.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/05-v3-to-v4.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/05-v3-to-v4.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/06-v4-to-v5.md b/docs/versioned_docs/version-v8.4.x/05-migrations/06-v4-to-v5.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/06-v4-to-v5.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/06-v4-to-v5.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/07-v5-to-v6.md b/docs/versioned_docs/version-v8.4.x/05-migrations/07-v5-to-v6.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/07-v5-to-v6.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/07-v5-to-v6.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/08-v6-to-v7.md b/docs/versioned_docs/version-v8.4.x/05-migrations/08-v6-to-v7.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/08-v6-to-v7.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/08-v6-to-v7.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/09-v7-to-v7_1.md b/docs/versioned_docs/version-v8.4.x/05-migrations/09-v7-to-v7_1.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/09-v7-to-v7_1.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/09-v7-to-v7_1.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/10-v7_2-to-v7_3.md b/docs/versioned_docs/version-v8.4.x/05-migrations/10-v7_2-to-v7_3.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/10-v7_2-to-v7_3.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/10-v7_2-to-v7_3.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/11-v7-to-v8.md b/docs/versioned_docs/version-v8.4.x/05-migrations/11-v7-to-v8.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/11-v7-to-v8.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/11-v7-to-v8.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/12-v8-to-v8_1.md b/docs/versioned_docs/version-v8.4.x/05-migrations/12-v8-to-v8_1.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/12-v8-to-v8_1.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/12-v8-to-v8_1.md diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/_category_.json b/docs/versioned_docs/version-v8.4.x/05-migrations/_category_.json similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/_category_.json rename to docs/versioned_docs/version-v8.4.x/05-migrations/_category_.json diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/images/auth-module-decision-tree.png b/docs/versioned_docs/version-v8.4.x/05-migrations/images/auth-module-decision-tree.png similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/images/auth-module-decision-tree.png rename to docs/versioned_docs/version-v8.4.x/05-migrations/images/auth-module-decision-tree.png diff --git a/docs/versioned_docs/version-v8.3.x/05-migrations/migration.template.md b/docs/versioned_docs/version-v8.4.x/05-migrations/migration.template.md similarity index 100% rename from docs/versioned_docs/version-v8.3.x/05-migrations/migration.template.md rename to docs/versioned_docs/version-v8.4.x/05-migrations/migration.template.md diff --git a/docs/versioned_docs/version-v8.3.x/images/ibcoverview-dark.svg b/docs/versioned_docs/version-v8.4.x/images/ibcoverview-dark.svg similarity index 100% rename from docs/versioned_docs/version-v8.3.x/images/ibcoverview-dark.svg rename to docs/versioned_docs/version-v8.4.x/images/ibcoverview-dark.svg diff --git a/docs/versioned_docs/version-v8.3.x/images/ibcoverview-light.svg b/docs/versioned_docs/version-v8.4.x/images/ibcoverview-light.svg similarity index 100% rename from docs/versioned_docs/version-v8.3.x/images/ibcoverview-light.svg rename to docs/versioned_docs/version-v8.4.x/images/ibcoverview-light.svg diff --git a/docs/versioned_sidebars/version-v7.6.x-sidebars.json b/docs/versioned_sidebars/version-v7.7.x-sidebars.json similarity index 100% rename from docs/versioned_sidebars/version-v7.6.x-sidebars.json rename to docs/versioned_sidebars/version-v7.7.x-sidebars.json diff --git a/docs/versioned_sidebars/version-v8.3.x-sidebars.json b/docs/versioned_sidebars/version-v8.4.x-sidebars.json similarity index 100% rename from docs/versioned_sidebars/version-v8.3.x-sidebars.json rename to docs/versioned_sidebars/version-v8.4.x-sidebars.json diff --git a/docs/versions.json b/docs/versions.json index 44a3b2e3d9f..2e64a75dccc 100644 --- a/docs/versions.json +++ b/docs/versions.json @@ -1,6 +1,6 @@ [ - "v8.3.x", - "v7.6.x", + "v8.4.x", + "v7.7.x", "v6.3.x", "v5.4.x", "v4.6.x" From f4f0d047ca618169c155daf50ef1be81df856a0a Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Mon, 29 Jul 2024 15:30:13 +0200 Subject: [PATCH 45/78] refactor: use client module for status checks in 02-client handlers (#6919) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: use client module for status checks in 02-client handlers * Update modules/core/02-client/keeper/client.go --------- Co-authored-by: Carlos Rodriguez Co-authored-by: DimitrisJim Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- modules/core/02-client/keeper/client.go | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/modules/core/02-client/keeper/client.go b/modules/core/02-client/keeper/client.go index d91c141301f..422fca31ba3 100644 --- a/modules/core/02-client/keeper/client.go +++ b/modules/core/02-client/keeper/client.go @@ -31,7 +31,7 @@ func (k *Keeper) CreateClient(ctx sdk.Context, clientType string, clientState, c return "", err } - if status := k.GetClientStatus(ctx, clientID); status != exported.Active { + if status := clientModule.Status(ctx, clientID); status != exported.Active { return "", errorsmod.Wrapf(types.ErrClientNotActive, "cannot create client (%s) with status %s", clientID, status) } @@ -46,15 +46,15 @@ func (k *Keeper) CreateClient(ctx sdk.Context, clientType string, clientState, c // UpdateClient updates the consensus state and the state root from a provided header. func (k *Keeper) UpdateClient(ctx sdk.Context, clientID string, clientMsg exported.ClientMessage) error { - if status := k.GetClientStatus(ctx, clientID); status != exported.Active { - return errorsmod.Wrapf(types.ErrClientNotActive, "cannot update client (%s) with status %s", clientID, status) - } - clientModule, err := k.Route(ctx, clientID) if err != nil { return err } + if status := clientModule.Status(ctx, clientID); status != exported.Active { + return errorsmod.Wrapf(types.ErrClientNotActive, "cannot update client (%s) with status %s", clientID, status) + } + if err := clientModule.VerifyClientMessage(ctx, clientID, clientMsg); err != nil { return err } @@ -90,15 +90,15 @@ func (k *Keeper) UpgradeClient( clientID string, upgradedClient, upgradedConsState, upgradeClientProof, upgradeConsensusStateProof []byte, ) error { - if status := k.GetClientStatus(ctx, clientID); status != exported.Active { - return errorsmod.Wrapf(types.ErrClientNotActive, "cannot upgrade client (%s) with status %s", clientID, status) - } - clientModule, err := k.Route(ctx, clientID) if err != nil { return err } + if status := clientModule.Status(ctx, clientID); status != exported.Active { + return errorsmod.Wrapf(types.ErrClientNotActive, "cannot upgrade client (%s) with status %s", clientID, status) + } + if err := clientModule.VerifyUpgradeAndUpdateState(ctx, clientID, upgradedClient, upgradedConsState, upgradeClientProof, upgradeConsensusStateProof); err != nil { return errorsmod.Wrapf(err, "cannot upgrade client with ID %s", clientID) } @@ -119,17 +119,17 @@ func (k *Keeper) UpgradeClient( // as well as copying the necessary consensus states from the substitute to the subject client store. // The substitute must be Active and the subject must not be Active. func (k *Keeper) RecoverClient(ctx sdk.Context, subjectClientID, substituteClientID string) error { - if status := k.GetClientStatus(ctx, subjectClientID); status == exported.Active { - return errorsmod.Wrapf(types.ErrInvalidRecoveryClient, "cannot recover %s subject client", exported.Active) + clientModule, err := k.Route(ctx, subjectClientID) + if err != nil { + return errorsmod.Wrap(types.ErrRouteNotFound, subjectClientID) } - if status := k.GetClientStatus(ctx, substituteClientID); status != exported.Active { - return errorsmod.Wrapf(types.ErrClientNotActive, "substitute client is not %s, status is %s", exported.Active, status) + if status := clientModule.Status(ctx, subjectClientID); status == exported.Active { + return errorsmod.Wrapf(types.ErrInvalidRecoveryClient, "cannot recover subject client (%s) with status %s", subjectClientID, status) } - clientModule, err := k.Route(ctx, subjectClientID) - if err != nil { - return errorsmod.Wrap(types.ErrRouteNotFound, subjectClientID) + if status := clientModule.Status(ctx, substituteClientID); status != exported.Active { + return errorsmod.Wrapf(types.ErrClientNotActive, "cannot recover client using substitute client (%s) with status %s", substituteClientID, status) } subjectLatestHeight := clientModule.LatestHeight(ctx, subjectClientID) From f3a8dfef8b620fe6f9a9d4fa60098b77cd497d2a Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 29 Jul 2024 15:46:18 +0200 Subject: [PATCH 46/78] chores after releases (#6966) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chores after releases * Update CHANGELOG.md * Update CHANGELOG.md * Update RELEASES.md --------- Co-authored-by: DimitrisJim Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- .../main/ica-chain-a.json | 4 +-- .../main/ica-chain-b.json | 4 +-- .../main/ica-channel-upgrade-chain-a.json | 3 +- .../main/ica-channel-upgrade-chain-b.json | 3 +- .../main/ica-gov-chain-a.json | 4 +-- .../main/ica-gov-chain-b.json | 4 +-- .../main/ica-groups-chain-a.json | 4 +-- .../main/ica-groups-chain-b.json | 4 +-- .../main/ica-unordered-channel-chain-a.json | 3 +- .../main/ica-unordered-channel-chain-b.json | 3 +- .../main/incentivized-ica-chain-a.json | 4 +-- .../main/incentivized-ica-chain-b.json | 4 +-- .../main/incentivized-transfer-chain-a.json | 4 +-- .../main/incentivized-transfer-chain-b.json | 4 +-- .../main/localhost-ica-chain-a.json | 4 +-- .../main/localhost-ica-chain-b.json | 4 +-- .../main/localhost-transfer-chain-a.json | 4 +-- .../main/localhost-transfer-chain-b.json | 4 +-- .../main/transfer-authz-chain-a.json | 4 +-- .../main/transfer-authz-chain-b.json | 4 +-- .../main/transfer-chain-a.json | 4 +-- .../main/transfer-chain-b.json | 4 +-- .../transfer-channel-upgrade-chain-a.json | 3 +- .../transfer-channel-upgrade-chain-b.json | 3 +- .../release-v7.4.x/ica-chain-a.json | 4 +-- .../release-v7.4.x/ica-chain-b.json | 4 +-- .../release-v7.4.x/ica-gov-chain-a.json | 4 +-- .../release-v7.4.x/ica-gov-chain-b.json | 4 +-- .../release-v7.4.x/ica-groups-chain-a.json | 4 +-- .../release-v7.4.x/ica-groups-chain-b.json | 4 +-- .../incentivized-ica-chain-a.json | 4 +-- .../incentivized-ica-chain-b.json | 4 +-- .../incentivized-transfer-chain-a.json | 4 +-- .../incentivized-transfer-chain-b.json | 4 +-- .../release-v7.4.x/localhost-ica-chain-a.json | 4 +-- .../localhost-transfer-chain-a.json | 4 +-- .../transfer-authz-chain-a.json | 4 +-- .../transfer-authz-chain-b.json | 4 +-- .../release-v7.4.x/transfer-chain-a.json | 4 +-- .../release-v7.4.x/transfer-chain-b.json | 4 +-- .../release-v7.5.x/ica-chain-a.json | 4 +-- .../release-v7.5.x/ica-chain-b.json | 4 +-- .../release-v7.5.x/ica-gov-chain-a.json | 4 +-- .../release-v7.5.x/ica-gov-chain-b.json | 4 +-- .../release-v7.5.x/ica-groups-chain-a.json | 4 +-- .../release-v7.5.x/ica-groups-chain-b.json | 4 +-- .../release-v7.5.x/ica-queries-chain-a.json | 1 + .../release-v7.5.x/ica-queries-chain-b.json | 1 + .../ica-unordered-channel-chain-a.json | 3 +- .../ica-unordered-channel-chain-b.json | 3 +- .../incentivized-ica-chain-a.json | 4 +-- .../incentivized-ica-chain-b.json | 4 +-- .../incentivized-transfer-chain-a.json | 4 +-- .../incentivized-transfer-chain-b.json | 4 +-- .../release-v7.5.x/localhost-ica-chain-a.json | 4 +-- .../localhost-transfer-chain-a.json | 4 +-- .../transfer-authz-chain-a.json | 4 +-- .../transfer-authz-chain-b.json | 4 +-- .../release-v7.5.x/transfer-chain-a.json | 4 +-- .../release-v7.5.x/transfer-chain-b.json | 4 +-- .../release-v7.6.x/ica-chain-a.json | 4 +-- .../release-v7.6.x/ica-chain-b.json | 4 +-- .../release-v7.6.x/ica-gov-chain-a.json | 4 +-- .../release-v7.6.x/ica-gov-chain-b.json | 4 +-- .../release-v7.6.x/ica-groups-chain-a.json | 4 +-- .../release-v7.6.x/ica-groups-chain-b.json | 4 +-- .../release-v7.6.x/ica-queries-chain-a.json | 1 + .../release-v7.6.x/ica-queries-chain-b.json | 1 + .../ica-unordered-channel-chain-a.json | 3 +- .../ica-unordered-channel-chain-b.json | 3 +- .../incentivized-ica-chain-a.json | 4 +-- .../incentivized-ica-chain-b.json | 4 +-- .../incentivized-transfer-chain-a.json | 4 +-- .../incentivized-transfer-chain-b.json | 4 +-- .../release-v7.6.x/localhost-ica-chain-a.json | 4 +-- .../localhost-transfer-chain-a.json | 4 +-- .../transfer-authz-chain-a.json | 4 +-- .../transfer-authz-chain-b.json | 4 +-- .../release-v7.6.x/transfer-chain-a.json | 4 +-- .../release-v7.6.x/transfer-chain-b.json | 4 +-- .../release-v7.7.x/ica-chain-a.json | 4 +-- .../release-v7.7.x/ica-chain-b.json | 4 +-- .../release-v7.7.x/ica-gov-chain-a.json | 4 +-- .../release-v7.7.x/ica-gov-chain-b.json | 4 +-- .../release-v7.7.x/ica-groups-chain-a.json | 4 +-- .../release-v7.7.x/ica-groups-chain-b.json | 4 +-- .../release-v7.7.x/ica-queries-chain-a.json | 1 + .../release-v7.7.x/ica-queries-chain-b.json | 1 + .../ica-unordered-channel-chain-a.json | 3 +- .../ica-unordered-channel-chain-b.json | 3 +- .../incentivized-ica-chain-a.json | 4 +-- .../incentivized-ica-chain-b.json | 4 +-- .../incentivized-transfer-chain-a.json | 4 +-- .../incentivized-transfer-chain-b.json | 4 +-- .../release-v7.7.x/localhost-ica-chain-a.json | 4 +-- .../localhost-transfer-chain-a.json | 4 +-- .../transfer-authz-chain-a.json | 4 +-- .../transfer-authz-chain-b.json | 4 +-- .../release-v7.7.x/transfer-chain-a.json | 4 +-- .../release-v7.7.x/transfer-chain-b.json | 4 +-- .../release-v8.2.x/client-chain-a.json | 20 ------------ .../release-v8.2.x/connection-chain-a.json | 17 ---------- .../release-v8.2.x/genesis-chain-a.json | 17 ---------- .../release-v8.2.x/ica-chain-a.json | 26 --------------- .../release-v8.2.x/ica-chain-b.json | 26 --------------- .../ica-channel-upgrade-chain-a.json | 20 ------------ .../ica-channel-upgrade-chain-b.json | 20 ------------ .../release-v8.2.x/ica-gov-chain-a.json | 23 ------------- .../release-v8.2.x/ica-gov-chain-b.json | 23 ------------- .../release-v8.2.x/ica-groups-chain-a.json | 23 ------------- .../release-v8.2.x/ica-groups-chain-b.json | 23 ------------- .../ica-unordered-channel-chain-a.json | 19 ----------- .../ica-unordered-channel-chain-b.json | 19 ----------- .../incentivized-ica-chain-a.json | 24 -------------- .../incentivized-ica-chain-b.json | 24 -------------- .../incentivized-transfer-chain-a.json | 30 ----------------- .../incentivized-transfer-chain-b.json | 30 ----------------- .../release-v8.2.x/localhost-ica-chain-a.json | 23 ------------- .../localhost-transfer-chain-a.json | 22 ------------- .../transfer-authz-chain-a.json | 23 ------------- .../transfer-authz-chain-b.json | 23 ------------- .../release-v8.2.x/transfer-chain-a.json | 32 ------------------- .../release-v8.2.x/transfer-chain-b.json | 30 ----------------- .../transfer-channel-upgrade-chain-a.json | 21 ------------ .../transfer-channel-upgrade-chain-b.json | 21 ------------ .../release-v8.3.x/client-chain-a.json | 20 ------------ .../release-v8.3.x/connection-chain-a.json | 17 ---------- .../release-v8.3.x/genesis-chain-a.json | 17 ---------- .../release-v8.3.x/ica-chain-a.json | 26 --------------- .../release-v8.3.x/ica-chain-b.json | 26 --------------- .../ica-channel-upgrade-chain-a.json | 20 ------------ .../ica-channel-upgrade-chain-b.json | 20 ------------ .../release-v8.3.x/ica-gov-chain-a.json | 23 ------------- .../release-v8.3.x/ica-gov-chain-b.json | 23 ------------- .../release-v8.3.x/ica-groups-chain-a.json | 23 ------------- .../release-v8.3.x/ica-groups-chain-b.json | 23 ------------- .../release-v8.3.x/ica-queries-chain-a.json | 20 ------------ .../release-v8.3.x/ica-queries-chain-b.json | 20 ------------ .../ica-unordered-channel-chain-a.json | 21 ------------ .../ica-unordered-channel-chain-b.json | 21 ------------ .../incentivized-ica-chain-a.json | 24 -------------- .../incentivized-ica-chain-b.json | 24 -------------- .../incentivized-transfer-chain-a.json | 30 ----------------- .../incentivized-transfer-chain-b.json | 30 ----------------- .../release-v8.3.x/localhost-ica-chain-a.json | 23 ------------- .../localhost-transfer-chain-a.json | 22 ------------- .../transfer-authz-chain-a.json | 23 ------------- .../transfer-authz-chain-b.json | 23 ------------- .../release-v8.3.x/transfer-chain-a.json | 32 ------------------- .../release-v8.3.x/transfer-chain-b.json | 30 ----------------- .../transfer-channel-upgrade-chain-a.json | 21 ------------ .../transfer-channel-upgrade-chain-b.json | 21 ------------ .../release-v8.4.x/ica-chain-a.json | 4 +-- .../release-v8.4.x/ica-chain-b.json | 4 +-- .../ica-channel-upgrade-chain-a.json | 3 +- .../ica-channel-upgrade-chain-b.json | 3 +- .../release-v8.4.x/ica-gov-chain-a.json | 4 +-- .../release-v8.4.x/ica-gov-chain-b.json | 4 +-- .../release-v8.4.x/ica-groups-chain-a.json | 4 +-- .../release-v8.4.x/ica-groups-chain-b.json | 4 +-- .../release-v8.4.x/ica-queries-chain-a.json | 3 +- .../release-v8.4.x/ica-queries-chain-b.json | 3 +- .../ica-unordered-channel-chain-a.json | 4 +-- .../ica-unordered-channel-chain-b.json | 4 +-- .../incentivized-ica-chain-a.json | 4 +-- .../incentivized-ica-chain-b.json | 4 +-- .../incentivized-transfer-chain-a.json | 4 +-- .../incentivized-transfer-chain-b.json | 4 +-- .../release-v8.4.x/localhost-ica-chain-a.json | 4 +-- .../localhost-transfer-chain-a.json | 4 +-- .../transfer-authz-chain-a.json | 4 +-- .../transfer-authz-chain-b.json | 4 +-- .../release-v8.4.x/transfer-chain-a.json | 4 +-- .../release-v8.4.x/transfer-chain-b.json | 4 +-- .../transfer-channel-upgrade-chain-a.json | 3 +- .../transfer-channel-upgrade-chain-b.json | 3 +- .../release-v9.0.x/ica-chain-a.json | 4 +-- .../release-v9.0.x/ica-chain-b.json | 4 +-- .../ica-channel-upgrade-chain-a.json | 3 +- .../ica-channel-upgrade-chain-b.json | 3 +- .../release-v9.0.x/ica-gov-chain-a.json | 4 +-- .../release-v9.0.x/ica-gov-chain-b.json | 4 +-- .../release-v9.0.x/ica-groups-chain-a.json | 4 +-- .../release-v9.0.x/ica-groups-chain-b.json | 4 +-- .../release-v9.0.x/ica-queries-chain-a.json | 3 +- .../release-v9.0.x/ica-queries-chain-b.json | 3 +- .../ica-unordered-channel-chain-a.json | 4 +-- .../ica-unordered-channel-chain-b.json | 4 +-- .../incentivized-ica-chain-a.json | 4 +-- .../incentivized-ica-chain-b.json | 4 +-- .../incentivized-transfer-chain-a.json | 4 +-- .../incentivized-transfer-chain-b.json | 4 +-- .../release-v9.0.x/localhost-ica-chain-a.json | 4 +-- .../localhost-transfer-chain-a.json | 4 +-- .../transfer-authz-chain-a.json | 4 +-- .../transfer-authz-chain-b.json | 4 +-- .../release-v9.0.x/transfer-chain-a.json | 4 +-- .../release-v9.0.x/transfer-chain-b.json | 4 +-- ...transfer-channel-upgrade-chain-a copy.json | 3 +- .../transfer-channel-upgrade-chain-a.json | 3 +- .../unreleased/client-1.json | 2 -- .../unreleased/client-2.json | 10 +++--- .../unreleased/connection.json | 6 ++-- .../unreleased/genesis.json | 6 ++-- .../ica-channel-upgrade-chain-a.json | 10 +++--- .../ica-channel-upgrade-chain-b.json | 10 +++--- .../unreleased/ica-gov.json | 6 ++-- .../unreleased/ica-groups.json | 6 ++-- .../unreleased/ica-queries.json | 4 +-- .../unreleased/ica-unordered-channel.json | 6 ++-- .../unreleased/ica.json | 6 ++-- .../unreleased/incentivized-ica.json | 6 ++-- .../unreleased/incentivized-transfer-1.json | 6 ++-- .../unreleased/incentivized-transfer-2.json | 6 ++-- .../unreleased/incentivized-transfer-3.json | 6 ++-- .../unreleased/localhost-ica.json | 6 ++-- .../unreleased/localhost-transfer.json | 6 ++-- .../unreleased/transfer-1.json | 6 ++-- .../unreleased/transfer-2.json | 6 ++-- .../unreleased/transfer-3.json | 6 ++-- .../unreleased/transfer-authz.json | 6 ++-- .../transfer-channel-upgrade-chain-a.json | 10 +++--- .../transfer-channel-upgrade-chain-b.json | 10 +++--- .github/mergify.yml | 16 ---------- .../e2e-compatibility-unreleased.yaml | 2 -- .github/workflows/e2e-compatibility.yaml | 4 --- .github/workflows/e2e-manual-simd.yaml | 8 ++--- .github/workflows/e2e-upgrade.yaml | 14 ++++---- CHANGELOG.md | 26 ++++++++++++++- RELEASES.md | 16 +++++----- modules/light-clients/08-wasm/CHANGELOG.md | 14 ++++++++ 231 files changed, 383 insertions(+), 1621 deletions(-) delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/client-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/connection-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/genesis-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-channel-upgrade-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-channel-upgrade-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-gov-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-gov-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-groups-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-groups-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-unordered-channel-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/ica-unordered-channel-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/incentivized-ica-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/incentivized-ica-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/incentivized-transfer-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/incentivized-transfer-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/localhost-ica-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/localhost-transfer-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/transfer-authz-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/transfer-authz-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/transfer-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/transfer-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/transfer-channel-upgrade-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.2.x/transfer-channel-upgrade-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/client-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/connection-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/genesis-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-channel-upgrade-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-channel-upgrade-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-gov-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-gov-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-groups-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-groups-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-queries-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-queries-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-unordered-channel-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/ica-unordered-channel-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/incentivized-ica-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/incentivized-ica-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/incentivized-transfer-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/incentivized-transfer-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/localhost-ica-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/localhost-transfer-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/transfer-authz-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/transfer-authz-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/transfer-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/transfer-chain-b.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/transfer-channel-upgrade-chain-a.json delete mode 100644 .github/compatibility-test-matrices/release-v8.3.x/transfer-channel-upgrade-chain-b.json diff --git a/.github/compatibility-test-matrices/main/ica-chain-a.json b/.github/compatibility-test-matrices/main/ica-chain-a.json index b7284b6619e..accc5fb3bd0 100644 --- a/.github/compatibility-test-matrices/main/ica-chain-a.json +++ b/.github/compatibility-test-matrices/main/ica-chain-a.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/ica-chain-b.json b/.github/compatibility-test-matrices/main/ica-chain-b.json index 112c59e8c37..fdcf30e4e82 100644 --- a/.github/compatibility-test-matrices/main/ica-chain-b.json +++ b/.github/compatibility-test-matrices/main/ica-chain-b.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/main/ica-channel-upgrade-chain-a.json index 551c34419da..d680802bdd6 100644 --- a/.github/compatibility-test-matrices/main/ica-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/main/ica-channel-upgrade-chain-a.json @@ -4,8 +4,7 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0" + "v8.4.0" ], "entrypoint": [ "TestInterchainAccountsChannelUpgradesTestSuite" diff --git a/.github/compatibility-test-matrices/main/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/main/ica-channel-upgrade-chain-b.json index 52cab2f11ac..659a0cfa58e 100644 --- a/.github/compatibility-test-matrices/main/ica-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/main/ica-channel-upgrade-chain-b.json @@ -1,8 +1,7 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0" + "v8.4.0" ], "chain-b": [ "main" diff --git a/.github/compatibility-test-matrices/main/ica-gov-chain-a.json b/.github/compatibility-test-matrices/main/ica-gov-chain-a.json index d5182b336f8..9827e6bd782 100644 --- a/.github/compatibility-test-matrices/main/ica-gov-chain-a.json +++ b/.github/compatibility-test-matrices/main/ica-gov-chain-a.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/ica-gov-chain-b.json b/.github/compatibility-test-matrices/main/ica-gov-chain-b.json index d91110942c5..e289097ceb8 100644 --- a/.github/compatibility-test-matrices/main/ica-gov-chain-b.json +++ b/.github/compatibility-test-matrices/main/ica-gov-chain-b.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/ica-groups-chain-a.json b/.github/compatibility-test-matrices/main/ica-groups-chain-a.json index 42aee2c7648..f5f803a2794 100644 --- a/.github/compatibility-test-matrices/main/ica-groups-chain-a.json +++ b/.github/compatibility-test-matrices/main/ica-groups-chain-a.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/ica-groups-chain-b.json b/.github/compatibility-test-matrices/main/ica-groups-chain-b.json index 53f8da877cd..84169c8b530 100644 --- a/.github/compatibility-test-matrices/main/ica-groups-chain-b.json +++ b/.github/compatibility-test-matrices/main/ica-groups-chain-b.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/main/ica-unordered-channel-chain-a.json index 9d5a1e7e675..5ebfe9ab01c 100644 --- a/.github/compatibility-test-matrices/main/ica-unordered-channel-chain-a.json +++ b/.github/compatibility-test-matrices/main/ica-unordered-channel-chain-a.json @@ -4,8 +4,7 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0" + "v8.4.0" ], "entrypoint": [ "TestInterchainAccountsTestSuite" diff --git a/.github/compatibility-test-matrices/main/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/main/ica-unordered-channel-chain-b.json index 279760bfb23..9e0e4bc3d17 100644 --- a/.github/compatibility-test-matrices/main/ica-unordered-channel-chain-b.json +++ b/.github/compatibility-test-matrices/main/ica-unordered-channel-chain-b.json @@ -1,8 +1,7 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0" + "v8.4.0" ], "chain-b": [ "main" diff --git a/.github/compatibility-test-matrices/main/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/main/incentivized-ica-chain-a.json index bd22d59d281..bd896fe9747 100644 --- a/.github/compatibility-test-matrices/main/incentivized-ica-chain-a.json +++ b/.github/compatibility-test-matrices/main/incentivized-ica-chain-a.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/main/incentivized-ica-chain-b.json index ef93e934600..8043b72b296 100644 --- a/.github/compatibility-test-matrices/main/incentivized-ica-chain-b.json +++ b/.github/compatibility-test-matrices/main/incentivized-ica-chain-b.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/main/incentivized-transfer-chain-a.json index e4cb5f85208..236c9bdc99f 100644 --- a/.github/compatibility-test-matrices/main/incentivized-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/main/incentivized-transfer-chain-a.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/main/incentivized-transfer-chain-b.json index a0c9d16a851..4204f3ced5e 100644 --- a/.github/compatibility-test-matrices/main/incentivized-transfer-chain-b.json +++ b/.github/compatibility-test-matrices/main/incentivized-transfer-chain-b.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/main/localhost-ica-chain-a.json index d1e581026ef..fc9607edf03 100644 --- a/.github/compatibility-test-matrices/main/localhost-ica-chain-a.json +++ b/.github/compatibility-test-matrices/main/localhost-ica-chain-a.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0" diff --git a/.github/compatibility-test-matrices/main/localhost-ica-chain-b.json b/.github/compatibility-test-matrices/main/localhost-ica-chain-b.json index f43721a3cbc..0e55effd4ec 100644 --- a/.github/compatibility-test-matrices/main/localhost-ica-chain-b.json +++ b/.github/compatibility-test-matrices/main/localhost-ica-chain-b.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0" diff --git a/.github/compatibility-test-matrices/main/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/main/localhost-transfer-chain-a.json index 67c6c5389fc..7f787f43e47 100644 --- a/.github/compatibility-test-matrices/main/localhost-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/main/localhost-transfer-chain-a.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0" diff --git a/.github/compatibility-test-matrices/main/localhost-transfer-chain-b.json b/.github/compatibility-test-matrices/main/localhost-transfer-chain-b.json index 96b1b61edc7..c9d763ab440 100644 --- a/.github/compatibility-test-matrices/main/localhost-transfer-chain-b.json +++ b/.github/compatibility-test-matrices/main/localhost-transfer-chain-b.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0" diff --git a/.github/compatibility-test-matrices/main/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/main/transfer-authz-chain-a.json index 5e159e067bc..3c3d3a9c461 100644 --- a/.github/compatibility-test-matrices/main/transfer-authz-chain-a.json +++ b/.github/compatibility-test-matrices/main/transfer-authz-chain-a.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0" diff --git a/.github/compatibility-test-matrices/main/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/main/transfer-authz-chain-b.json index c52513f91bb..1e038d5e97e 100644 --- a/.github/compatibility-test-matrices/main/transfer-authz-chain-b.json +++ b/.github/compatibility-test-matrices/main/transfer-authz-chain-b.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0" diff --git a/.github/compatibility-test-matrices/main/transfer-chain-a.json b/.github/compatibility-test-matrices/main/transfer-chain-a.json index 035c3868882..02472617a05 100644 --- a/.github/compatibility-test-matrices/main/transfer-chain-a.json +++ b/.github/compatibility-test-matrices/main/transfer-chain-a.json @@ -4,8 +4,8 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/transfer-chain-b.json b/.github/compatibility-test-matrices/main/transfer-chain-b.json index c7265999875..5228dd34b2c 100644 --- a/.github/compatibility-test-matrices/main/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/main/transfer-chain-b.json @@ -1,8 +1,8 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/main/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/main/transfer-channel-upgrade-chain-a.json index 664f0383ba8..cc46ed3ee95 100644 --- a/.github/compatibility-test-matrices/main/transfer-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/main/transfer-channel-upgrade-chain-a.json @@ -4,8 +4,7 @@ ], "chain-b": [ "main", - "v8.3.0", - "v8.2.0" + "v8.4.0" ], "entrypoint": [ "TestTransferChannelUpgradesTestSuite" diff --git a/.github/compatibility-test-matrices/main/transfer-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/main/transfer-channel-upgrade-chain-b.json index c0e18b16fcc..bb8368fdbf5 100644 --- a/.github/compatibility-test-matrices/main/transfer-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/main/transfer-channel-upgrade-chain-b.json @@ -1,8 +1,7 @@ { "chain-a": [ "main", - "v8.3.0", - "v8.2.0" + "v8.4.0" ], "chain-b": [ "main" diff --git a/.github/compatibility-test-matrices/release-v7.4.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/ica-chain-a.json index 0c6b4f6b793..171b0d4da34 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.4.x/ica-chain-b.json index 6b1a3ab2b1f..4bc1b377c5e 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/ica-gov-chain-a.json index 776396dcf40..d45f55b0484 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/ica-gov-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/ica-gov-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v7.4.x/ica-gov-chain-b.json index 9d13bc1ce0f..886887f3749 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/ica-gov-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/ica-gov-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/ica-groups-chain-a.json index 54be21c1a46..116123f9f54 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/ica-groups-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/ica-groups-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v7.4.x/ica-groups-chain-b.json index 4b5d39a81e2..de111da2d5d 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/ica-groups-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/ica-groups-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/incentivized-ica-chain-a.json index 6f9b6f0f99e..8017a70554f 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/incentivized-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/incentivized-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.4.x/incentivized-ica-chain-b.json index e0a1770cfc3..338cc48e7d1 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/incentivized-ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/incentivized-ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/incentivized-transfer-chain-a.json index 2db235123ef..ac3548e3223 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/incentivized-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/incentivized-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.4.x/incentivized-transfer-chain-b.json index 7479ac40b14..ab0cf62a1d2 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/incentivized-transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/incentivized-transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/localhost-ica-chain-a.json index e2ba7b95f61..e4dae956161 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/localhost-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/localhost-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/localhost-transfer-chain-a.json index b90ef734c96..8ba5dcb65a6 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/localhost-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/localhost-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/transfer-authz-chain-a.json index 84a7cee8019..a34c853084d 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/transfer-authz-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/transfer-authz-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v7.4.x/transfer-authz-chain-b.json index 6555def833d..bf2ef4ef3cd 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/transfer-authz-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/transfer-authz-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.4.x/transfer-chain-a.json index 82ca25985bd..efa486a0c30 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.4.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.4.x/transfer-chain-b.json index f71d9e07115..36b6a18144a 100644 --- a/.github/compatibility-test-matrices/release-v7.4.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.4.x/transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-chain-a.json index e89e3e06d57..d4bef90e990 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-chain-b.json index bf4634f8cee..05ddccf4f7e 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-gov-chain-a.json index 4adbe94c12c..aabeb85f75a 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-gov-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-gov-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-gov-chain-b.json index 7e22ecd07b7..fef5082408d 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-gov-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-gov-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-groups-chain-a.json index 006bf66db90..1c5db8d6d83 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-groups-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-groups-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-groups-chain-b.json index 8ded59f1ebf..b04991c3e3f 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-groups-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-groups-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-queries-chain-a.json index 30fb287d285..64434d9402d 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-queries-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-queries-chain-a.json @@ -3,6 +3,7 @@ "release-v7.5.x" ], "chain-b": [ + "v7.7.0", "v7.6.0", "v7.5.0", "release-v7.5.x" diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-queries-chain-b.json index 294b3e8c1ee..bff5a855527 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-queries-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-queries-chain-b.json @@ -1,5 +1,6 @@ { "chain-a": [ + "v7.7.0", "v7.6.0", "v7.5.0", "release-v7.5.x" diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-unordered-channel-chain-a.json index ee89cb349d1..998eedbdb89 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-unordered-channel-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-unordered-channel-chain-a.json @@ -3,8 +3,7 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v7.5.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v7.5.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/ica-unordered-channel-chain-b.json index c65d4efa747..fe39f5d01a7 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/ica-unordered-channel-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/ica-unordered-channel-chain-b.json @@ -1,7 +1,6 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v7.5.x" ], "chain-b": [ diff --git a/.github/compatibility-test-matrices/release-v7.5.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/incentivized-ica-chain-a.json index 2fd7f31a6a2..bbae3b088a9 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/incentivized-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/incentivized-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/incentivized-ica-chain-b.json index 1e9d033bbc7..78b325637c9 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/incentivized-ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/incentivized-ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/incentivized-transfer-chain-a.json index 548f58930bb..9482adbce8a 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/incentivized-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/incentivized-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/incentivized-transfer-chain-b.json index b6aa723583e..974d0fc0030 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/incentivized-transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/incentivized-transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/localhost-ica-chain-a.json index 19005cd6413..5d19ffce2ea 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/localhost-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/localhost-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/localhost-transfer-chain-a.json index fb861285ff1..f996c77320f 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/localhost-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/localhost-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/transfer-authz-chain-a.json index a638f6418dc..10897ce83dc 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/transfer-authz-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/transfer-authz-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/transfer-authz-chain-b.json index aa27ad03228..f05ab4752fc 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/transfer-authz-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/transfer-authz-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.5.x/transfer-chain-a.json index b1b7645ac06..aec7e763260 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.5.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.5.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.5.x/transfer-chain-b.json index c8e8e18418b..917bfa3a036 100644 --- a/.github/compatibility-test-matrices/release-v7.5.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.5.x/transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-chain-a.json index 9f961856ff7..10b1cc052df 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-chain-b.json index ed6cc6bb7ee..102ceb4bac4 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-gov-chain-a.json index a0bbf2cfe08..ffe9364edcb 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-gov-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-gov-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-gov-chain-b.json index f3db2ce66bc..2ac62b4b078 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-gov-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-gov-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-groups-chain-a.json index cba95a77529..0ea78151c47 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-groups-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-groups-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-groups-chain-b.json index af19619906d..0e2bbde6c68 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-groups-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-groups-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-queries-chain-a.json index dcc26f90c32..38aa5a35d17 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-queries-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-queries-chain-a.json @@ -3,6 +3,7 @@ "release-v7.6.x" ], "chain-b": [ + "v7.7.0", "v7.6.0", "v7.5.0", "release-v7.6.x" diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-queries-chain-b.json index 6af8c196a53..eb1aac66761 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-queries-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-queries-chain-b.json @@ -1,5 +1,6 @@ { "chain-a": [ + "v7.7.0", "v7.6.0", "v7.5.0", "release-v7.6.x" diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-unordered-channel-chain-a.json index c7c07a73416..8e3867a367b 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-unordered-channel-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-unordered-channel-chain-a.json @@ -3,8 +3,7 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v7.6.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v7.6.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/ica-unordered-channel-chain-b.json index 0c26bbc9bb7..316e6d0f6b8 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/ica-unordered-channel-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/ica-unordered-channel-chain-b.json @@ -1,7 +1,6 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v7.6.x" ], "chain-b": [ diff --git a/.github/compatibility-test-matrices/release-v7.6.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/incentivized-ica-chain-a.json index 7fa82de4f9e..c8c295d16f6 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/incentivized-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/incentivized-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/incentivized-ica-chain-b.json index 263d193950c..0ab23706aab 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/incentivized-ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/incentivized-ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/incentivized-transfer-chain-a.json index 94abdbbb353..2bf9b1258d6 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/incentivized-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/incentivized-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/incentivized-transfer-chain-b.json index d757bee7ec7..502a7508114 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/incentivized-transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/incentivized-transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/localhost-ica-chain-a.json index dfde494625e..0ecc112ed2b 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/localhost-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/localhost-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/localhost-transfer-chain-a.json index f2f0d094b7a..549e383cd96 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/localhost-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/localhost-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/transfer-authz-chain-a.json index 22c591375fa..daf611e30d8 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/transfer-authz-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/transfer-authz-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/transfer-authz-chain-b.json index 331014d58c4..13e626f0b15 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/transfer-authz-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/transfer-authz-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.6.x/transfer-chain-a.json index 0ea44f9345c..1a2feade5c2 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.6.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.6.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.6.x/transfer-chain-b.json index 6dca092b181..0f91e8fda80 100644 --- a/.github/compatibility-test-matrices/release-v7.6.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.6.x/transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-a.json index 87c09699b9c..f6bad312571 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-b.json index 44fcaf172c9..78aae8324ac 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-a.json index c63fbeddca1..e581afe014b 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-b.json index c277ecdcdf2..c35533d0034 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-gov-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-a.json index 013673b1b0b..5cddc334b48 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-b.json index 3d18035d861..32c4d2053e1 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-groups-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-a.json index acb7a91222e..5bbba38e88b 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-a.json @@ -3,6 +3,7 @@ "release-v7.7.x" ], "chain-b": [ + "v7.7.0", "v7.6.0", "v7.5.0", "release-v7.7.x" diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-b.json index a4655b231b5..b9ce2ae0a0b 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-queries-chain-b.json @@ -1,5 +1,6 @@ { "chain-a": [ + "v7.7.0", "v7.6.0", "v7.5.0", "release-v7.7.x" diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-a.json index 610cf77fdc7..48d340878fa 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-a.json @@ -3,8 +3,7 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v7.7.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-b.json index 62144562908..826f8ac5162 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/ica-unordered-channel-chain-b.json @@ -1,7 +1,6 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v7.7.x" ], "chain-b": [ diff --git a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-a.json index aa9fd58edb6..694d9bb2ab6 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-b.json index f11099a7d94..91dd3c9c77f 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-a.json index 131479dccca..22a055d93ea 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-b.json index 02f9a827bdb..832ccda7314 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/incentivized-transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/localhost-ica-chain-a.json index d1c298e0653..a7fb1c0ebc6 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/localhost-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/localhost-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/localhost-transfer-chain-a.json index b4d3b65ce14..9d9e73a564f 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/localhost-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/localhost-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-a.json index cfbe81f02d0..92ce80eb958 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-b.json index e86db0f3a17..818c5399071 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-authz-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-a.json index 2b77b52df0a..fa7e649af74 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v7.7.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json index add43b0c727..897edf47010 100644 --- a/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v7.7.x/transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.2.x/client-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/client-chain-a.json deleted file mode 100644 index fdc6c214842..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/client-chain-a.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestClientTestSuite" - ], - "test": [ - "TestRecoverClient_Succeeds", - "TestScheduleIBCUpgrade_Succeeds", - "TestClient_Update_Misbehaviour", - "TestAllowedClientsParam" - ], - "relayer-type": [ - "hermes" - ] -} diff --git a/.github/compatibility-test-matrices/release-v8.2.x/connection-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/connection-chain-a.json deleted file mode 100644 index cf0f8ce2904..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/connection-chain-a.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestConnectionTestSuite" - ], - "test": [ - "TestMaxExpectedTimePerBlockParam" - ], - "relayer-type": [ - "hermes" - ] -} diff --git a/.github/compatibility-test-matrices/release-v8.2.x/genesis-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/genesis-chain-a.json deleted file mode 100644 index a76b46fd824..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/genesis-chain-a.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestGenesisTestSuite" - ], - "test": [ - "TestIBCGenesis" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-chain-a.json deleted file mode 100644 index f4ad007f575..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-chain-a.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer", - "TestMsgSendTx_FailedTransfer_InsufficientFunds", - "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", - "TestControllerEnabledParam" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-chain-b.json deleted file mode 100644 index fced5951b45..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-chain-b.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer", - "TestMsgSendTx_FailedTransfer_InsufficientFunds", - "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", - "TestHostEnabledParam" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-channel-upgrade-chain-a.json deleted file mode 100644 index da95757d7ba..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-channel-upgrade-chain-a.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsChannelUpgradesTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer_AfterUpgradingOrdertoUnordered", - "TestChannelUpgrade_ICAChannelClosesAfterTimeout_Succeeds" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-channel-upgrade-chain-b.json deleted file mode 100644 index ab13dadcded..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-channel-upgrade-chain-b.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsChannelUpgradesTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer_AfterUpgradingOrdertoUnordered", - "TestChannelUpgrade_ICAChannelClosesAfterTimeout_Succeeds" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-gov-chain-a.json deleted file mode 100644 index e6f59a294c8..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-gov-chain-a.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsGovTestSuite" - ], - "test": [ - "TestInterchainAccountsGovIntegration" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-gov-chain-b.json deleted file mode 100644 index 41066ea2b87..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-gov-chain-b.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsGovTestSuite" - ], - "test": [ - "TestInterchainAccountsGovIntegration" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-groups-chain-a.json deleted file mode 100644 index f76dbe26942..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-groups-chain-a.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsGroupsTestSuite" - ], - "test": [ - "TestInterchainAccountsGroupsIntegration" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-groups-chain-b.json deleted file mode 100644 index 5a263d3f6bd..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-groups-chain-b.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsGroupsTestSuite" - ], - "test": [ - "TestInterchainAccountsGroupsIntegration" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-unordered-channel-chain-a.json deleted file mode 100644 index 742eb38ad89..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-unordered-channel-chain-a.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/ica-unordered-channel-chain-b.json deleted file mode 100644 index 41eed4dcbfa..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/ica-unordered-channel-chain-b.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/incentivized-ica-chain-a.json deleted file mode 100644 index 3396bdd51ea..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/incentivized-ica-chain-a.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestIncentivizedInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulBankSend_Incentivized", - "TestMsgSendTx_FailedBankSend_Incentivized" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/incentivized-ica-chain-b.json deleted file mode 100644 index 9922c1530a8..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/incentivized-ica-chain-b.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestIncentivizedInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulBankSend_Incentivized", - "TestMsgSendTx_FailedBankSend_Incentivized" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/incentivized-transfer-chain-a.json deleted file mode 100644 index dd26006ca48..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/incentivized-transfer-chain-a.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "v5.4.0", - "v4.6.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestIncentivizedTransferTestSuite" - ], - "test": [ - "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", - "TestMsgPayPacketFee_InvalidReceiverAccount", - "TestMultiMsg_MsgPayPacketFeeSingleSender", - "TestMsgPayPacketFee_SingleSender_TimesOut", - "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", - "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/incentivized-transfer-chain-b.json deleted file mode 100644 index 33418965ce3..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/incentivized-transfer-chain-b.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "v5.4.0", - "v4.6.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestIncentivizedTransferTestSuite" - ], - "test": [ - "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", - "TestMsgPayPacketFee_InvalidReceiverAccount", - "TestMultiMsg_MsgPayPacketFeeSingleSender", - "TestMsgPayPacketFee_SingleSender_TimesOut", - "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", - "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/localhost-ica-chain-a.json deleted file mode 100644 index 9da109132fc..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/localhost-ica-chain-a.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "release-v8.2.x" - ], - "entrypoint": [ - "LocalhostInterchainAccountsTestSuite" - ], - "test": [ - "TestInterchainAccounts_Localhost", - "TestInterchainAccounts_ReopenChannel_Localhost" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/localhost-transfer-chain-a.json deleted file mode 100644 index ae6655ad2ba..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/localhost-transfer-chain-a.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "release-v8.2.x" - ], - "entrypoint": [ - "LocalhostTransferTestSuite" - ], - "test": [ - "TestMsgTransfer_Localhost" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/transfer-authz-chain-a.json deleted file mode 100644 index 56459f815da..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/transfer-authz-chain-a.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestAuthzTransferTestSuite" - ], - "test": [ - "TestAuthz_MsgTransfer_Succeeds", - "TestAuthz_InvalidTransferAuthorizations" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/transfer-authz-chain-b.json deleted file mode 100644 index 870399d4479..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/transfer-authz-chain-b.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestAuthzTransferTestSuite" - ], - "test": [ - "TestAuthz_MsgTransfer_Succeeds", - "TestAuthz_InvalidTransferAuthorizations" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/transfer-chain-a.json deleted file mode 100644 index 211ce35b8a0..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/transfer-chain-a.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "v5.4.0", - "v4.6.0", - "v3.4.0", - "v2.5.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestTransferTestSuite" - ], - "test": [ - "TestMsgTransfer_Succeeds_Nonincentivized", - "TestMsgTransfer_Fails_InvalidAddress", - "TestMsgTransfer_Timeout_Nonincentivized", - "TestMsgTransfer_WithMemo", - "TestSendEnabledParam", - "TestReceiveEnabledParam" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/transfer-chain-b.json deleted file mode 100644 index 3456038d3fa..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/transfer-chain-b.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "v5.4.0", - "v4.6.0", - "v3.4.0", - "v2.5.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestTransferTestSuite" - ], - "test": [ - "TestMsgTransfer_Succeeds_Nonincentivized", - "TestMsgTransfer_Fails_InvalidAddress", - "TestMsgTransfer_Timeout_Nonincentivized", - "TestMsgTransfer_WithMemo" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v8.2.x/transfer-channel-upgrade-chain-a.json deleted file mode 100644 index e0ffaae4975..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/transfer-channel-upgrade-chain-a.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "chain-a": [ - "release-v8.2.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "release-v8.2.x" - ], - "entrypoint": [ - "TestTransferChannelUpgradesTestSuite" - ], - "test": [ - "TestChannelUpgrade_WithFeeMiddleware_Succeeds", - "TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds", - "TestChannelUpgrade_WithFeeMiddleware_FailsWithTimeoutOnAck" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.2.x/transfer-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v8.2.x/transfer-channel-upgrade-chain-b.json deleted file mode 100644 index 11002468020..00000000000 --- a/.github/compatibility-test-matrices/release-v8.2.x/transfer-channel-upgrade-chain-b.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "release-v8.2.x" - ], - "chain-b": [ - "release-v8.2.x" - ], - "entrypoint": [ - "TestTransferChannelUpgradesTestSuite" - ], - "test": [ - "TestChannelUpgrade_WithFeeMiddleware_Succeeds", - "TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds", - "TestChannelUpgrade_WithFeeMiddleware_FailsWithTimeoutOnAck" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/client-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/client-chain-a.json deleted file mode 100644 index 4aff7daf2c2..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/client-chain-a.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestClientTestSuite" - ], - "test": [ - "TestRecoverClient_Succeeds", - "TestScheduleIBCUpgrade_Succeeds", - "TestClient_Update_Misbehaviour", - "TestAllowedClientsParam" - ], - "relayer-type": [ - "hermes" - ] -} diff --git a/.github/compatibility-test-matrices/release-v8.3.x/connection-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/connection-chain-a.json deleted file mode 100644 index db5f790e539..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/connection-chain-a.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestConnectionTestSuite" - ], - "test": [ - "TestMaxExpectedTimePerBlockParam" - ], - "relayer-type": [ - "hermes" - ] -} diff --git a/.github/compatibility-test-matrices/release-v8.3.x/genesis-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/genesis-chain-a.json deleted file mode 100644 index 01a2728188f..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/genesis-chain-a.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestGenesisTestSuite" - ], - "test": [ - "TestIBCGenesis" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-chain-a.json deleted file mode 100644 index 42c97bc7e6a..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-chain-a.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer", - "TestMsgSendTx_FailedTransfer_InsufficientFunds", - "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", - "TestControllerEnabledParam" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-chain-b.json deleted file mode 100644 index 2170616f238..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-chain-b.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer", - "TestMsgSendTx_FailedTransfer_InsufficientFunds", - "TestMsgSendTx_SuccessfulTransfer_AfterReopeningICA", - "TestHostEnabledParam" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-channel-upgrade-chain-a.json deleted file mode 100644 index c91005eebca..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-channel-upgrade-chain-a.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsChannelUpgradesTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer_AfterUpgradingOrdertoUnordered", - "TestChannelUpgrade_ICAChannelClosesAfterTimeout_Succeeds" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-channel-upgrade-chain-b.json deleted file mode 100644 index fd64a4eef65..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-channel-upgrade-chain-b.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsChannelUpgradesTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer_AfterUpgradingOrdertoUnordered", - "TestChannelUpgrade_ICAChannelClosesAfterTimeout_Succeeds" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-gov-chain-a.json deleted file mode 100644 index be09007b20e..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-gov-chain-a.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsGovTestSuite" - ], - "test": [ - "TestInterchainAccountsGovIntegration" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-gov-chain-b.json deleted file mode 100644 index 12995885214..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-gov-chain-b.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsGovTestSuite" - ], - "test": [ - "TestInterchainAccountsGovIntegration" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-groups-chain-a.json deleted file mode 100644 index 822a623e6ff..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-groups-chain-a.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsGroupsTestSuite" - ], - "test": [ - "TestInterchainAccountsGroupsIntegration" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-groups-chain-b.json deleted file mode 100644 index 534436cf35b..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-groups-chain-b.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsGroupsTestSuite" - ], - "test": [ - "TestInterchainAccountsGroupsIntegration" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-queries-chain-a.json deleted file mode 100644 index 08dd386998d..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-queries-chain-a.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v7.6.0", - "v7.5.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsQueryTestSuite" - ], - "test": [ - "TestInterchainAccountsQuery" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-queries-chain-b.json deleted file mode 100644 index b765a3b3039..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-queries-chain-b.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "chain-a": [ - "v7.6.0", - "v7.5.0", - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsQueryTestSuite" - ], - "test": [ - "TestInterchainAccountsQuery" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-unordered-channel-chain-a.json deleted file mode 100644 index 20756935fd5..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-unordered-channel-chain-a.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/ica-unordered-channel-chain-b.json deleted file mode 100644 index 1d7be1e4e42..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/ica-unordered-channel-chain-b.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulTransfer_UnorderedChannel" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/incentivized-ica-chain-a.json deleted file mode 100644 index 28a2220e6d7..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/incentivized-ica-chain-a.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestIncentivizedInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulBankSend_Incentivized", - "TestMsgSendTx_FailedBankSend_Incentivized" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/incentivized-ica-chain-b.json deleted file mode 100644 index 0fac70de8e0..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/incentivized-ica-chain-b.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestIncentivizedInterchainAccountsTestSuite" - ], - "test": [ - "TestMsgSendTx_SuccessfulBankSend_Incentivized", - "TestMsgSendTx_FailedBankSend_Incentivized" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/incentivized-transfer-chain-a.json deleted file mode 100644 index 5b3ef3aa96f..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/incentivized-transfer-chain-a.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "v5.4.0", - "v4.6.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestIncentivizedTransferTestSuite" - ], - "test": [ - "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", - "TestMsgPayPacketFee_InvalidReceiverAccount", - "TestMultiMsg_MsgPayPacketFeeSingleSender", - "TestMsgPayPacketFee_SingleSender_TimesOut", - "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", - "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/incentivized-transfer-chain-b.json deleted file mode 100644 index bd3f1ef68fe..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/incentivized-transfer-chain-b.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "v5.4.0", - "v4.6.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestIncentivizedTransferTestSuite" - ], - "test": [ - "TestMsgPayPacketFee_AsyncSingleSender_Succeeds", - "TestMsgPayPacketFee_InvalidReceiverAccount", - "TestMultiMsg_MsgPayPacketFeeSingleSender", - "TestMsgPayPacketFee_SingleSender_TimesOut", - "TestPayPacketFeeAsync_SingleSender_NoCounterPartyAddress", - "TestMsgPayPacketFee_AsyncMultipleSenders_Succeeds" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/localhost-ica-chain-a.json deleted file mode 100644 index 99709115383..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/localhost-ica-chain-a.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "release-v8.3.x" - ], - "entrypoint": [ - "LocalhostInterchainAccountsTestSuite" - ], - "test": [ - "TestInterchainAccounts_Localhost", - "TestInterchainAccounts_ReopenChannel_Localhost" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/localhost-transfer-chain-a.json deleted file mode 100644 index c0da8083bbf..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/localhost-transfer-chain-a.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "release-v8.3.x" - ], - "entrypoint": [ - "LocalhostTransferTestSuite" - ], - "test": [ - "TestMsgTransfer_Localhost" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/transfer-authz-chain-a.json deleted file mode 100644 index ab0226f2137..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/transfer-authz-chain-a.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestAuthzTransferTestSuite" - ], - "test": [ - "TestAuthz_MsgTransfer_Succeeds", - "TestAuthz_InvalidTransferAuthorizations" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/transfer-authz-chain-b.json deleted file mode 100644 index 9ff167f696a..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/transfer-authz-chain-b.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestAuthzTransferTestSuite" - ], - "test": [ - "TestAuthz_MsgTransfer_Succeeds", - "TestAuthz_InvalidTransferAuthorizations" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/transfer-chain-a.json deleted file mode 100644 index 8c376ae4d8f..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/transfer-chain-a.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "v5.4.0", - "v4.6.0", - "v3.4.0", - "v2.5.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestTransferTestSuite" - ], - "test": [ - "TestMsgTransfer_Succeeds_Nonincentivized", - "TestMsgTransfer_Fails_InvalidAddress", - "TestMsgTransfer_Timeout_Nonincentivized", - "TestMsgTransfer_WithMemo", - "TestSendEnabledParam", - "TestReceiveEnabledParam" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/transfer-chain-b.json deleted file mode 100644 index 7fff446aba6..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/transfer-chain-b.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "v7.6.0", - "v7.5.0", - "v7.4.0", - "v6.3.0", - "v5.4.0", - "v4.6.0", - "v3.4.0", - "v2.5.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestTransferTestSuite" - ], - "test": [ - "TestMsgTransfer_Succeeds_Nonincentivized", - "TestMsgTransfer_Fails_InvalidAddress", - "TestMsgTransfer_Timeout_Nonincentivized", - "TestMsgTransfer_WithMemo" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v8.3.x/transfer-channel-upgrade-chain-a.json deleted file mode 100644 index cd9140406ca..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/transfer-channel-upgrade-chain-a.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "chain-a": [ - "release-v8.3.x" - ], - "chain-b": [ - "v8.3.0", - "v8.2.0", - "release-v8.3.x" - ], - "entrypoint": [ - "TestTransferChannelUpgradesTestSuite" - ], - "test": [ - "TestChannelUpgrade_WithFeeMiddleware_Succeeds", - "TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds", - "TestChannelUpgrade_WithFeeMiddleware_FailsWithTimeoutOnAck" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.3.x/transfer-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v8.3.x/transfer-channel-upgrade-chain-b.json deleted file mode 100644 index 8bba5a2bafa..00000000000 --- a/.github/compatibility-test-matrices/release-v8.3.x/transfer-channel-upgrade-chain-b.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "chain-a": [ - "v8.3.0", - "v8.2.0", - "release-v8.3.x" - ], - "chain-b": [ - "release-v8.3.x" - ], - "entrypoint": [ - "TestTransferChannelUpgradesTestSuite" - ], - "test": [ - "TestChannelUpgrade_WithFeeMiddleware_Succeeds", - "TestChannelUpgrade_WithFeeMiddleware_CrossingHello_Succeeds", - "TestChannelUpgrade_WithFeeMiddleware_FailsWithTimeoutOnAck" - ], - "relayer-type": [ - "hermes" - ] -} \ No newline at end of file diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-a.json index cd9bdf4e1ee..2627fb39fb1 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-b.json index 808aff7be7a..61daa9093e3 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-a.json index 95d6c0d0c5c..f21de132994 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-a.json @@ -3,8 +3,7 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v8.4.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-b.json index 338cb5131f5..46f45a76424 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-channel-upgrade-chain-b.json @@ -1,7 +1,6 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v8.4.x" ], "chain-b": [ diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-a.json index 5b5af16579f..92b58e5a51d 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-b.json index f975b83df95..db5179c5ec2 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-gov-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-a.json index 2b1ae3d2212..0beb1becbb3 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-b.json index c78160f6e70..c7911a45ae7 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-groups-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-a.json index 462c7c79261..4ef675e9722 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-a.json @@ -3,7 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "release-v8.4.x" diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-b.json index 328b2891d9d..f00e20ef1c9 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-queries-chain-b.json @@ -1,11 +1,12 @@ { "chain-a": [ + "v7.7.0", "v7.6.0", "v7.5.0", "release-v8.4.x" ], "chain-b": [ - "v8.3.0", + "v8.4.0", "release-v8.4.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-a.json index e62302c9f73..bf7f084ff12 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "release-v8.4.x" diff --git a/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-b.json index 1f0b2895bac..98ffb50155d 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/ica-unordered-channel-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "release-v8.4.x" diff --git a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-a.json index 006efc39495..8b21c2803a5 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-b.json index 12f2091d9b6..eee707b65c4 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-a.json index 5b972d6789b..df5d2ee73f2 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-b.json index bdf1c8e9c92..87ee616258c 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/incentivized-transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/localhost-ica-chain-a.json index daec8ba1521..aabb0286551 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/localhost-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/localhost-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/localhost-transfer-chain-a.json index 925c1b2d14b..13628f9a33e 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/localhost-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/localhost-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-a.json index 7de2827921e..c4feda55cfc 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-b.json index a5c2bca28a4..89787270b5f 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-authz-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-a.json index 9a7c0ca5618..5cfcf05918b 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json index 9fe1f87a992..946988ce250 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-a.json index 36a92661bd7..1e8c03b2371 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-a.json @@ -3,8 +3,7 @@ "release-v8.4.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v8.4.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-b.json index 311fa2bf2fe..af6e1012b3d 100644 --- a/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/release-v8.4.x/transfer-channel-upgrade-chain-b.json @@ -1,7 +1,6 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v8.4.x" ], "chain-b": [ diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-a.json index 0adbba595f6..030ef1df5c3 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-b.json index 4c041c294f6..29f6c00275c 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-a.json index 4fc8690c0c0..965c1898566 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-a.json @@ -3,8 +3,7 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v9.0.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-b.json index daac8125f04..09042140007 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-channel-upgrade-chain-b.json @@ -1,7 +1,6 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v9.0.x" ], "chain-b": [ diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-a.json index a0d414d5e42..9ef6b278761 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-b.json index e7255c99aaa..95fd953e515 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-gov-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-a.json index fbc29cd4e05..031db36d393 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-b.json index 29b7f8b2e86..1195bdc92a7 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-groups-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-a.json index da7d84f08f1..bfdee1a5d43 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-a.json @@ -3,7 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "release-v9.0.x" diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-b.json index 3b451c97fa8..e6efc3f6078 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-queries-chain-b.json @@ -1,11 +1,12 @@ { "chain-a": [ + "v7.7.0", "v7.6.0", "v7.5.0", "release-v9.0.x" ], "chain-b": [ - "v8.3.0", + "v8.4.0", "release-v9.0.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-a.json index 43f7f0df218..09d264544f1 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "release-v9.0.x" diff --git a/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-b.json index 32b111c6053..9614811e045 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/ica-unordered-channel-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "release-v9.0.x" diff --git a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-a.json index 0221f4d2e81..aeac0ea229f 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-b.json index 66372a7f44a..b3c718b99b6 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-ica-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-a.json index 9e10c3fce02..225e3f655db 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-b.json index b3fb85b3e11..3268abecb81 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/incentivized-transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/localhost-ica-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/localhost-ica-chain-a.json index c38819cb400..3380570888c 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/localhost-ica-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/localhost-ica-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/localhost-transfer-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/localhost-transfer-chain-a.json index ec935c77ce0..350b6040ac0 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/localhost-transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/localhost-transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-a.json index 1779cd427ba..a0b77abdd43 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-b.json index 5b98eb537f5..8b3451a6857 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-authz-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-a.json index 3ae998768e4..07af5b96a07 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-a.json @@ -3,8 +3,8 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json index f76ad22bb23..655ffb5101b 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-chain-b.json @@ -1,7 +1,7 @@ { "chain-a": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", + "v7.7.0", "v7.6.0", "v7.5.0", "v7.4.0", diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a copy.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a copy.json index 32719dab55a..69808e652f9 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a copy.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a copy.json @@ -3,8 +3,7 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v9.0.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a.json index 32719dab55a..69808e652f9 100644 --- a/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/release-v9.0.x/transfer-channel-upgrade-chain-a.json @@ -3,8 +3,7 @@ "release-v9.0.x" ], "chain-b": [ - "v8.3.0", - "v8.2.0", + "v8.4.0", "release-v9.0.x" ], "entrypoint": [ diff --git a/.github/compatibility-test-matrices/unreleased/client-1.json b/.github/compatibility-test-matrices/unreleased/client-1.json index 63b3ea6903a..7bc2bc6e477 100644 --- a/.github/compatibility-test-matrices/unreleased/client-1.json +++ b/.github/compatibility-test-matrices/unreleased/client-1.json @@ -1,13 +1,11 @@ { "chain-a": [ - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/client-2.json b/.github/compatibility-test-matrices/unreleased/client-2.json index d2fb086e90e..b3835740d5c 100644 --- a/.github/compatibility-test-matrices/unreleased/client-2.json +++ b/.github/compatibility-test-matrices/unreleased/client-2.json @@ -1,13 +1,11 @@ { "chain-a": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "chain-b": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "entrypoint": [ "TestClientTestSuite" diff --git a/.github/compatibility-test-matrices/unreleased/connection.json b/.github/compatibility-test-matrices/unreleased/connection.json index 82cae4afd0d..7751a0f7392 100644 --- a/.github/compatibility-test-matrices/unreleased/connection.json +++ b/.github/compatibility-test-matrices/unreleased/connection.json @@ -1,17 +1,15 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/genesis.json b/.github/compatibility-test-matrices/unreleased/genesis.json index a76b46fd824..6a4705f5cfc 100644 --- a/.github/compatibility-test-matrices/unreleased/genesis.json +++ b/.github/compatibility-test-matrices/unreleased/genesis.json @@ -1,9 +1,11 @@ { "chain-a": [ - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "chain-b": [ - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "entrypoint": [ "TestGenesisTestSuite" diff --git a/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-a.json index 1b975ef89fe..84c35854ee1 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-a.json @@ -1,13 +1,11 @@ { "chain-a": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "chain-b": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "entrypoint": [ "TestInterchainAccountsChannelUpgradesTestSuite" diff --git a/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-b.json index 1b975ef89fe..84c35854ee1 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/unreleased/ica-channel-upgrade-chain-b.json @@ -1,13 +1,11 @@ { "chain-a": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "chain-b": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "entrypoint": [ "TestInterchainAccountsChannelUpgradesTestSuite" diff --git a/.github/compatibility-test-matrices/unreleased/ica-gov.json b/.github/compatibility-test-matrices/unreleased/ica-gov.json index 8b5fbe95ac5..e5f7344cb99 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-gov.json +++ b/.github/compatibility-test-matrices/unreleased/ica-gov.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -10,9 +9,8 @@ "release-v6.3.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/ica-groups.json b/.github/compatibility-test-matrices/unreleased/ica-groups.json index be81c7e2989..62ccf3e57be 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-groups.json +++ b/.github/compatibility-test-matrices/unreleased/ica-groups.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -10,9 +9,8 @@ "release-v6.3.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/ica-queries.json b/.github/compatibility-test-matrices/unreleased/ica-queries.json index 0de8ff881d2..d03e10d5c86 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-queries.json +++ b/.github/compatibility-test-matrices/unreleased/ica-queries.json @@ -1,14 +1,14 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x" diff --git a/.github/compatibility-test-matrices/unreleased/ica-unordered-channel.json b/.github/compatibility-test-matrices/unreleased/ica-unordered-channel.json index 673ebd9de69..8f96c3dfb6a 100644 --- a/.github/compatibility-test-matrices/unreleased/ica-unordered-channel.json +++ b/.github/compatibility-test-matrices/unreleased/ica-unordered-channel.json @@ -1,16 +1,14 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x" diff --git a/.github/compatibility-test-matrices/unreleased/ica.json b/.github/compatibility-test-matrices/unreleased/ica.json index 3990b8f3fb7..b3d78978d14 100644 --- a/.github/compatibility-test-matrices/unreleased/ica.json +++ b/.github/compatibility-test-matrices/unreleased/ica.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -12,9 +11,8 @@ "release-v4.6.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/incentivized-ica.json b/.github/compatibility-test-matrices/unreleased/incentivized-ica.json index 685318a58dd..93cd6fd8bea 100644 --- a/.github/compatibility-test-matrices/unreleased/incentivized-ica.json +++ b/.github/compatibility-test-matrices/unreleased/incentivized-ica.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -10,9 +9,8 @@ "release-v6.3.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-1.json b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-1.json index 3268aed33d5..f2fd0385f86 100644 --- a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-1.json +++ b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-1.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -12,9 +11,8 @@ "release-v4.6.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-2.json b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-2.json index b9336a8d807..23f8b54acd5 100644 --- a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-2.json +++ b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-2.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -12,9 +11,8 @@ "release-v4.6.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-3.json b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-3.json index 21a66b7db1a..7939997adc1 100644 --- a/.github/compatibility-test-matrices/unreleased/incentivized-transfer-3.json +++ b/.github/compatibility-test-matrices/unreleased/incentivized-transfer-3.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -12,9 +11,8 @@ "release-v4.6.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/localhost-ica.json b/.github/compatibility-test-matrices/unreleased/localhost-ica.json index 05fbfe894ee..dfb422c1b5d 100644 --- a/.github/compatibility-test-matrices/unreleased/localhost-ica.json +++ b/.github/compatibility-test-matrices/unreleased/localhost-ica.json @@ -1,17 +1,15 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/localhost-transfer.json b/.github/compatibility-test-matrices/unreleased/localhost-transfer.json index 153ca4a43da..3641d271d03 100644 --- a/.github/compatibility-test-matrices/unreleased/localhost-transfer.json +++ b/.github/compatibility-test-matrices/unreleased/localhost-transfer.json @@ -1,17 +1,15 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/transfer-1.json b/.github/compatibility-test-matrices/unreleased/transfer-1.json index 4c63ab62717..e52ce4e837c 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-1.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-1.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -12,9 +11,8 @@ "release-v4.6.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/transfer-2.json b/.github/compatibility-test-matrices/unreleased/transfer-2.json index a63a9512151..751def47b31 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-2.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-2.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -12,9 +11,8 @@ "release-v4.6.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/transfer-3.json b/.github/compatibility-test-matrices/unreleased/transfer-3.json index a075f8fd93b..c25bed4085f 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-3.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-3.json @@ -1,8 +1,7 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", @@ -12,9 +11,8 @@ "release-v4.6.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/transfer-authz.json b/.github/compatibility-test-matrices/unreleased/transfer-authz.json index 9ec7ab6c857..2651a6b1901 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-authz.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-authz.json @@ -1,17 +1,15 @@ { "chain-a": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", "release-v7.4.x" ], "chain-b": [ + "release-v9.0.x", "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x", "release-v7.7.x", "release-v7.6.x", "release-v7.5.x", diff --git a/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-a.json b/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-a.json index 41ea4f9172f..8700e96671c 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-a.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-a.json @@ -1,13 +1,11 @@ { "chain-a": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "chain-b": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "entrypoint": [ "TestTransferChannelUpgradesTestSuite" diff --git a/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-b.json b/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-b.json index 41ea4f9172f..8700e96671c 100644 --- a/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-b.json +++ b/.github/compatibility-test-matrices/unreleased/transfer-channel-upgrade-chain-b.json @@ -1,13 +1,11 @@ { "chain-a": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "chain-b": [ - "release-v8.4.x", - "release-v8.3.x", - "release-v8.2.x" + "release-v9.0.x", + "release-v8.4.x" ], "entrypoint": [ "TestTransferChannelUpgradesTestSuite" diff --git a/.github/mergify.yml b/.github/mergify.yml index f48e64dc159..701d41b9220 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -98,22 +98,6 @@ pull_request_rules: backport: branches: - release/v7.7.x - - name: backport patches to v8.2.x branch - conditions: - - base=main - - label=backport-to-v8.2.x - actions: - backport: - branches: - - release/v8.2.x - - name: backport patches to v8.3.x branch - conditions: - - base=main - - label=backport-to-v8.3.x - actions: - backport: - branches: - - release/v8.3.x - name: backport patches to v8.4.x branch conditions: - base=main diff --git a/.github/workflows/e2e-compatibility-unreleased.yaml b/.github/workflows/e2e-compatibility-unreleased.yaml index db749502911..1e0cc54f5d5 100644 --- a/.github/workflows/e2e-compatibility-unreleased.yaml +++ b/.github/workflows/e2e-compatibility-unreleased.yaml @@ -19,8 +19,6 @@ jobs: - release/v7.5.x - release/v7.6.x - release/v7.7.x - - release/v8.2.x - - release/v8.3.x - release/v8.4.x - release/v9.0.x steps: diff --git a/.github/workflows/e2e-compatibility.yaml b/.github/workflows/e2e-compatibility.yaml index b22597b4a7e..58c3794ef78 100644 --- a/.github/workflows/e2e-compatibility.yaml +++ b/.github/workflows/e2e-compatibility.yaml @@ -17,8 +17,6 @@ on: - release/v7.5.x - release/v7.6.x - release/v7.7.x - - release/v8.2.x - - release/v8.3.x - release/v8.4.x - release/v9.0.x - main @@ -58,8 +56,6 @@ jobs: - release/v7.5.x - release/v7.6.x - release/v7.7.x - - release/v8.2.x - - release/v8.3.x - release/v8.4.x - release/v9.0.x - main diff --git a/.github/workflows/e2e-manual-simd.yaml b/.github/workflows/e2e-manual-simd.yaml index 819a9764d56..b50c813bb46 100644 --- a/.github/workflows/e2e-manual-simd.yaml +++ b/.github/workflows/e2e-manual-simd.yaml @@ -35,8 +35,7 @@ on: default: main options: - main - - v8.3.0 - - v8.2.0 + - v8.4.0 - v7.6.0 - v7.5.0 - v7.4.0 @@ -45,14 +44,13 @@ on: required: false type: string chain-b-tag: - default: v8.3.0 + default: v8.4.0 description: 'The tag to use for chain B' required: true type: choice options: - main - - v8.3.0 - - v8.2.0 + - v8.4.0 - v7.6.0 - v7.5.0 - v7.4.0 diff --git a/.github/workflows/e2e-upgrade.yaml b/.github/workflows/e2e-upgrade.yaml index ccc915d4282..25a906c966b 100644 --- a/.github/workflows/e2e-upgrade.yaml +++ b/.github/workflows/e2e-upgrade.yaml @@ -165,8 +165,8 @@ jobs: with: chain-image: ghcr.io/cosmos/ibc-go-simd chain-binary: simd - chain-a-tag: v8.3.2 - chain-b-tag: v8.3.2 + chain-a-tag: v8.4.0 + chain-b-tag: v8.4.0 chain-upgrade-tag: main # TODO: Update tag to v9.0.0 once it is (pre)released upgrade-plan-name: "v9" test-entry-point: "TestUpgradeTestSuite" @@ -179,8 +179,8 @@ jobs: with: chain-image: ghcr.io/cosmos/ibc-go-simd chain-binary: simd - chain-a-tag: v8.3.2 - chain-b-tag: v8.3.2 + chain-a-tag: v8.4.0 + chain-b-tag: v8.4.0 chain-upgrade-tag: main # TODO: Update tag to v9.0.0 once it is (pre)released upgrade-plan-name: "v9" test-entry-point: "TestUpgradeTestSuite" @@ -195,8 +195,8 @@ jobs: with: chain-image: ghcr.io/cosmos/ibc-go-simd chain-binary: simd - chain-a-tag: v8.3.2 - chain-b-tag: v8.3.2 + chain-a-tag: v8.4.0 + chain-b-tag: v8.4.0 chain-upgrade-tag: main # TODO: Update tag to v9.0.0 once it is (pre)released upgrade-plan-name: "v9" test-entry-point: "TestUpgradeTestSuite" @@ -209,7 +209,7 @@ jobs: with: chain-image: ghcr.io/cosmos/ibc-go-simd chain-binary: simd - chain-a-tag: v8.3.2 + chain-a-tag: v8.4.0 chain-b-tag: main # TODO: Update tag to v9.0.0 once it is (pre)released chain-upgrade-tag: main # TODO: Update tag to v9.0.0 once it is (pre)released upgrade-plan-name: "v9" diff --git a/CHANGELOG.md b/CHANGELOG.md index f79930b0594..54929b8e468 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,11 +90,23 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (apps/transfer) [\#6492](https://github.com/cosmos/ibc-go/pull/6492) Added new `Tokens` field to `MsgTransfer` to enable sending of multiple denoms, and deprecated the `Token` field. * (apps/transfer) [\#6693](https://github.com/cosmos/ibc-go/pull/6693) Added new `Forwarding` field to `MsgTransfer` to enable forwarding tokens through multiple intermediary chains with a single transaction. This also enables automatic unwinding of tokens to their native chain. `x/authz` support for transfer allows granters to specify a set of possible forwarding hops that are allowed for grantees. -* (apps/transfer) [\#6877](https://github.com/cosmos/ibc-go/pull/6877) Added the possibility to transfer the entire user balance of a particular denomination by using [`UnboundedSpendLimit`](https://github.com/cosmos/ibc-go/blob/715f00eef8727da41db25fdd4763b709bdbba07e/modules/apps/transfer/types/transfer_authorization.go#L253-L255) as the token amount. ### Bug Fixes * (apps/27-interchain-accounts) [\#6377](https://github.com/cosmos/ibc-go/pull/6377) Generate ICA simtest proposals only for provided keepers. + +## [v8.4.0](https://github.com/cosmos/ibc-go/releases/tag/v8.4.0) - 2024-07-29 + +### Improvements + +* (core/04-channel) [\#6871](https://github.com/cosmos/ibc-go/pull/6871) Add channel ordering to write acknowledgement event. + +### Features + +* (apps/transfer) [\#6877](https://github.com/cosmos/ibc-go/pull/6877) Added the possibility to transfer the entire user balance of a particular denomination by using [`UnboundedSpendLimit`](https://github.com/cosmos/ibc-go/blob/beb2d93b58835ddb9ed8e7624988f1e66b849251/modules/apps/transfer/types/token.go#L56-L58) as the token amount. + +### Bug Fixes + * (core/04-channel) [\#6935](https://github.com/cosmos/ibc-go/pull/6935) Check upgrade compatibility in `ChanUpgradeConfirm`. ## [v8.3.2](https://github.com/cosmos/ibc-go/releases/tag/v8.3.2) - 2024-06-20 @@ -284,6 +296,18 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (apps/transfer, apps/29-fee) [\#4570](https://github.com/cosmos/ibc-go/pull/4570) Remove `GetSignBytes` from 29-fee and transfer msgs. * [\#3630](https://github.com/cosmos/ibc-go/pull/3630) Add annotation to Msg service. +## [v7.7.0](https://github.com/cosmos/ibc-go/releases/tag/v7.7.0) - 2024-07-29 + +### Dependencies + +* [\#6943](https://github.com/cosmos/ibc-go/pull/6943) Update Cosmos SDK to v0.47.13. + +### Features + +* (apps/transfer) [\#6877](https://github.com/cosmos/ibc-go/pull/6877) Added the possibility to transfer the entire user balance of a particular denomination by using [`UnboundedSpendLimit`](https://github.com/cosmos/ibc-go/blob/715f00eef8727da41db25fdd4763b709bdbba07e/modules/apps/transfer/types/transfer_authorization.go#L253-L255) as the token amount. + +### Bug Fixes + ## [v7.6.0](https://github.com/cosmos/ibc-go/releases/tag/v7.6.0) - 2024-06-20 ### State Machine Breaking diff --git a/RELEASES.md b/RELEASES.md index 5c7f6aebbf4..1f86209cf6e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -74,8 +74,8 @@ We reserve the right to drop support for releases if they are deemed unused (for |`v7.4.x`|March 17, 2025| |`v7.5.x`|March 17, 2025| |`v7.6.x`|March 17, 2025| -|`v8.2.x`|May 10, 2025| -|`v8.3.x`|May 10, 2025| +|`v7.7.x`|March 17, 2025| +|`v8.4.x`|May 10, 2025| ### Callbacks middleware @@ -88,8 +88,8 @@ We reserve the right to drop support for releases if they are deemed unused (for |Release|End of Life Date| |-------|----------------| -|`v0.1.0+ibc-go-v7.3.x-wasmvm-v1.5.x`|September 17, 2024| -|`v0.2.x+ibc-go-v8.0.x-wasmvm-v1.5.x`|May 10, 2025| +|`v0.3.0+ibc-go-v7.3.x-wasmvm-v1.5.x`|September 17, 2024| +|`v0.4.x+ibc-go-v8.3.x-wasmvm-v2.0.x`|May 10, 2025| ### What pull requests will be included in stable patch-releases? @@ -127,8 +127,8 @@ Versions of Golang, Cosmos SDK and CometBFT used by ibc-go in the currently acti | 1.19 | v7.4.0 | v0.47.8 | v0.37.4 | | 1.19 | v7.5.0 | v0.47.11 | v0.37.5 | | 1.19 | v7.6.0 | v0.47.12 | v0.37.5 | -| 1.21 | v8.2.0 | v0.50.5 | v0.38.5 | -| 1.21 | v8.3.0 | v0.50.6 | v0.38.7 | +| 1.19 | v7.7.0 | v0.47.13 | v0.37.5 | +| 1.21 | v8.4.0 | v0.50.7 | v0.38.7 | ### Callbacks middleware @@ -145,8 +145,8 @@ Versions of Golang, ibc-go, Cosmos SDK and CometBFT used by `08-wasm` module in | Go | callbacks | ibc-go | Cosmos SDK | Tendermint/CometBFT | |----|-----------|--------|------------|---------------------| -| 1.19 | v0.1.0+ibc-go-v7.3-wasmvm-v1.5 | v7.3.0 | v0.47.6 | v0.37.2 | -| 1.21 | v0.1.0+ibc-go-v8.0-wasmvm-v1.5 | v8.0.0 | v0.50.1 | v0.38.0 | +| 1.19 | v0.3.0+ibc-go-v7.3-wasmvm-v1.5 | v7.3.0 | v0.47.6 | v0.37.2 | +| 1.21 | v0.4.0+ibc-go-v8.3-wasmvm-v2.0 | v8.3.0 | v0.50.6 | v0.38.9 | ## Graphics diff --git a/modules/light-clients/08-wasm/CHANGELOG.md b/modules/light-clients/08-wasm/CHANGELOG.md index fcc8961a0ed..b1fd665028e 100644 --- a/modules/light-clients/08-wasm/CHANGELOG.md +++ b/modules/light-clients/08-wasm/CHANGELOG.md @@ -50,6 +50,13 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes + +## [v0.4.0+ibc-go-v8.3-wasmvm-v2.0](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.4.0%2Bibc-go-v8.3-wasmvm-v2.0) - 2024-07-29 + +### API Breaking + +* [\#6923](https://github.com/cosmos/ibc-go/pull/6923) The JSON message API for `VerifyMembershipMsg` and `VerifyNonMembershipMsg` payloads for client contract `SudoMsg` has been updated. The field `path` has been changed to `merkle_path`. This change requires updates to 08-wasm client contracts for integration. + ## [v0.3.0+ibc-go-v8.3-wasmvm-v2.0](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.3.0%2Bibc-go-v8.3-wasmvm-v2.0) - 2024-07-17 @@ -73,6 +80,13 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [\#6815](https://github.com/cosmos/ibc-go/pull/6815) Decode to bytes the hex-encoded checksum argument of the `migrate-contract` CLI. + +## [v0.3.0+ibc-go-v7.3-wasmvm-v1.5](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.3.0%2Bibc-go-v7.3-wasmvm-v1.5) - 2024-07-29 + +### API Breaking + +* [\#6923](https://github.com/cosmos/ibc-go/pull/6923) The JSON message API for `VerifyMembershipMsg` and `VerifyNonMembershipMsg` payloads for client contract `SudoMsg` has been updated. The field `path` has been changed to `merkle_path`. This change requires updates to 08-wasm client contracts for integration. + ## [v0.2.0+ibc-go-v7.3-wasmvm-v1.5](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.2.0%2Bibc-go-v7.3-wasmvm-v1.5) - 2024-07-17 From 84de38dd87a348d794c418c4543372122da2e4bf Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Mon, 29 Jul 2024 16:05:50 +0200 Subject: [PATCH 47/78] api!: delete v1 merkle path and register v2 merkle path against interface on cdc (#6870) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: register codec v2.MerklePath against path interface * chore: delete merkle path v1 * docs: update migration doc for api removal * chore: update changelog * chore: make proto-swagger-gen * Update 13-v8-to-v9.md --------- Co-authored-by: Carlos Rodriguez Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- CHANGELOG.md | 4 +- docs/client/swagger-ui/swagger.yaml | 514 ++++-------------- docs/docs/05-migrations/13-v8-to-v9.md | 1 + modules/core/23-commitment/types/codec.go | 3 +- .../core/23-commitment/types/codec_test.go | 3 +- .../core/23-commitment/types/commitment.pb.go | 221 +------- modules/core/23-commitment/types/merkle.go | 18 - .../06-solomachine/misbehaviour_handle.go | 4 +- .../09-localhost/light_client_module.go | 4 +- proto/ibc/core/commitment/v1/commitment.proto | 8 - 10 files changed, 147 insertions(+), 633 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54929b8e468..0e9a76846a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -66,8 +66,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (apps/transfer) [\#6440](https://github.com/cosmos/ibc-go/pull/6440) Remove `GetPrefixedDenom`. * (apps/transfer) [\#6508](https://github.com/cosmos/ibc-go/pull/6508) Remove the `DenomTrace` type. * (apps/27-interchain-accounts) [\#6598](https://github.com/cosmos/ibc-go/pull/6598) Mark the `requests` repeated field of `MsgModuleQuerySafe` non-nullable. -* (23-commmitment) [\#6644](https://github.com/cosmos/ibc-go/pull/6644) Introduce commitment/v2 `MerklePath` to include `repeated bytes` in favour of `repeated string`. This supports using merkle path keys which include non UTF-8 encoded runes. -* (23-commmitment) [\#6633](https://github.com/cosmos/ibc-go/pull/6633) MerklePath has been changed to use `repeated bytes` in favour of `repeated strings`. +* (23-commmitment) [\#6644](https://github.com/cosmos/ibc-go/pull/6644) Introduce `commitment.v2.MerklePath` to include `repeated bytes` in favour of `repeated string`. This supports using merkle path keys which include non UTF-8 encoded runes. +* (23-commmitment) [\#6870](https://github.com/cosmos/ibc-go/pull/6870) Remove `commitment.v1.MerklePath` in favour of `commitment.v2.MerklePath`. * (apps/27-interchain-accounts) [\#6749](https://github.com/cosmos/ibc-go/pull/6749) The ICA controller `NewIBCMiddleware` constructor function sets by default the auth module to nil. * (core, core/02-client) [\#6763](https://github.com/cosmos/ibc-go/pull/6763) Move prometheus metric labels for 02-client and core into a separate `metrics` package on core. * (core/02-client) [\#6777](https://github.com/cosmos/ibc-go/pull/6777) The `NewClientProposalHandler` of `02-client` has been removed. diff --git a/docs/client/swagger-ui/swagger.yaml b/docs/client/swagger-ui/swagger.yaml index 96bfc103015..1ae230cad24 100644 --- a/docs/client/swagger-ui/swagger.yaml +++ b/docs/client/swagger-ui/swagger.yaml @@ -105,207 +105,6 @@ paths: type: string tags: - Query - /ibc/apps/transfer/v1/denom_traces: - get: - summary: DenomTraces queries all denomination traces. - operationId: DenomTraces - responses: - '200': - description: A successful response. - schema: - type: object - properties: - denom_traces: - type: array - items: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the - - source tracing information path. - description: denom_traces returns all denominations trace information. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryConnectionsResponse is the response type for the - Query/DenomTraces RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - Query - /ibc/apps/transfer/v1/denom_traces/{hash}: - get: - summary: DenomTrace queries a denomination trace information. - operationId: DenomTrace - responses: - '200': - description: A successful response. - schema: - type: object - properties: - denom_trace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the - - source tracing information path. - description: >- - QueryDenomTraceResponse is the response type for the - Query/DenomTrace RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: hash - description: >- - hash (in hex format) or denom (full denom with ibc prefix) of the - denomination trace information. - in: path - required: true - type: string - tags: - - Query /ibc/apps/transfer/v1/denoms/{denom}/total_escrow: get: summary: >- @@ -929,8 +728,10 @@ paths: was set, its value is undefined otherwise title: >- - QueryIncentivizedPacketsResponse defines the response type for the - incentivized packets RPC + QueryIncentivizedPacketsForChannelResponse defines the response + type for querying for all incentivized packets + + for a specific channel default: description: An unexpected error response. schema: @@ -1763,7 +1564,7 @@ paths: IdentifiedPacketFees contains a list of type PacketFee and associated PacketId title: >- - QueryIncentivizedPacketsResponse defines the response type for the + QueryIncentivizedPacketResponse defines the response type for the IncentivizedPacket rpc default: description: An unexpected error response. @@ -7157,6 +6958,18 @@ paths: of updating and freezing clients + value: + type: string + format: byte + description: the value which is proven. + time_delay: + type: string + format: uint64 + title: optional time delay + block_delay: + type: string + format: uint64 + title: optional block delay merkle_path: description: the commitment key path. type: object @@ -7165,6 +6978,7 @@ paths: type: array items: type: string + format: byte title: >- MerklePath is the path used to verify commitment proofs, which can be an @@ -7172,18 +6986,6 @@ paths: arbitrary structured object (defined by a commitment type). MerklePath is represented from root-to-leaf - value: - type: string - format: byte - description: the value which is proven. - time_delay: - type: string - format: uint64 - title: optional time delay - block_delay: - type: string - format: uint64 - title: optional block delay title: >- QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method @@ -15045,83 +14847,6 @@ paths: tags: - Query definitions: - cosmos.base.query.v1beta1.PageRequest: - type: object - properties: - key: - type: string - format: byte - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - offset: - type: string - format: uint64 - description: |- - offset is a numeric offset that can be used when key is unavailable. - It is less efficient than using key. Only one of offset or key should - be set. - limit: - type: string - format: uint64 - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - count_total: - type: boolean - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in UIs. - - count_total is only respected when offset is used. It is ignored when - key - - is set. - reverse: - type: boolean - description: >- - reverse is set to true if results are to be returned in the descending - order. - - - Since: cosmos-sdk 0.43 - description: |- - message SomeRequest { - Foo some_parameter = 1; - PageRequest pagination = 2; - } - title: |- - PageRequest is to be embedded in gRPC request messages for efficient - pagination. Ex: - cosmos.base.query.v1beta1.PageResponse: - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: |- - total is total number of results available if PageRequest.count_total - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } cosmos.base.v1beta1.Coin: type: object properties: @@ -15473,24 +15198,6 @@ definitions: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - ibc.applications.transfer.v1.DenomTrace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for tracing - the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens and - the - - source tracing information path. ibc.applications.transfer.v1.Params: type: object properties: @@ -15525,78 +15232,6 @@ definitions: description: hash (in hex format) of the denomination trace information. description: |- QueryDenomHashResponse is the response type for the Query/DenomHash RPC - method. - ibc.applications.transfer.v1.QueryDenomTraceResponse: - type: object - properties: - denom_trace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for - tracing the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens - and the - - source tracing information path. - description: |- - QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC - method. - ibc.applications.transfer.v1.QueryDenomTracesResponse: - type: object - properties: - denom_traces: - type: array - items: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for - tracing the - - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens - and the - - source tracing information path. - description: denom_traces returns all denominations trace information. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryConnectionsResponse is the response type for the Query/DenomTraces - RPC - method. ibc.applications.transfer.v1.QueryEscrowAddressResponse: type: object @@ -15709,6 +15344,83 @@ definitions: allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain. description: QueryParamsResponse is the response type for the Query/Params RPC method. + cosmos.base.query.v1beta1.PageRequest: + type: object + properties: + key: + type: string + format: byte + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + offset: + type: string + format: uint64 + description: |- + offset is a numeric offset that can be used when key is unavailable. + It is less efficient than using key. Only one of offset or key should + be set. + limit: + type: string + format: uint64 + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + count_total: + type: boolean + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in UIs. + + count_total is only respected when offset is used. It is ignored when + key + + is set. + reverse: + type: boolean + description: >- + reverse is set to true if results are to be returned in the descending + order. + + + Since: cosmos-sdk 0.43 + description: |- + message SomeRequest { + Foo some_parameter = 1; + PageRequest pagination = 2; + } + title: |- + PageRequest is to be embedded in gRPC request messages for efficient + pagination. Ex: + cosmos.base.query.v1beta1.PageResponse: + type: object + properties: + next_key: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: |- + total is total number of results available if PageRequest.count_total + was set, its value is undefined otherwise + description: |- + PageResponse is to be embedded in gRPC response messages where the + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } ibc.applications.fee.v1.Fee: type: object properties: @@ -16107,7 +15819,7 @@ definitions: IdentifiedPacketFees contains a list of type PacketFee and associated PacketId title: >- - QueryIncentivizedPacketsResponse defines the response type for the + QueryIncentivizedPacketResponse defines the response type for the IncentivizedPacket rpc ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelResponse: type: object @@ -16237,8 +15949,10 @@ definitions: was set, its value is undefined otherwise title: >- - QueryIncentivizedPacketsResponse defines the response type for the - incentivized packets RPC + QueryIncentivizedPacketsForChannelResponse defines the response type for + querying for all incentivized packets + + for a specific channel ibc.applications.fee.v1.QueryIncentivizedPacketsResponse: type: object properties: @@ -18256,6 +17970,18 @@ definitions: updating and freezing clients + value: + type: string + format: byte + description: the value which is proven. + time_delay: + type: string + format: uint64 + title: optional time delay + block_delay: + type: string + format: uint64 + title: optional block delay merkle_path: description: the commitment key path. type: object @@ -18264,6 +17990,7 @@ definitions: type: array items: type: string + format: byte title: >- MerklePath is the path used to verify commitment proofs, which can be an @@ -18271,18 +17998,6 @@ definitions: arbitrary structured object (defined by a commitment type). MerklePath is represented from root-to-leaf - value: - type: string - format: byte - description: the value which is proven. - time_delay: - type: string - format: uint64 - title: optional time delay - block_delay: - type: string - format: uint64 - title: optional block delay title: >- QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method @@ -18295,13 +18010,14 @@ definitions: title: >- QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method - ibc.core.commitment.v1.MerklePath: + ibc.core.commitment.v2.MerklePath: type: object properties: key_path: type: array items: type: string + format: byte title: |- MerklePath is the path used to verify commitment proofs, which can be an arbitrary structured object (defined by a commitment type). diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 0e77dda94bb..1dc3e7c3dc6 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -193,6 +193,7 @@ type PacketDataUnmarshaler interface { - The [`exported.Proof`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/commitment.go#L34-L44) interface has been removed. Please use the [`MerkleProof`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/23-commitment/types/commitment.pb.go#L161-L168) concrete type. - The [`MerklePath` type](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/23-commitment/types/commitment.pb.go#L113-L119) has been deprecated and a new [`commitment.v2.MerklePath` type](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/23-commitment/types/v2/commitment.pb.go#L25-L30) has been introduced in [#6644](https://github.com/cosmos/ibc-go/pull/6644). The new `commitment.v2.MerklePath` contains `repeated bytes` in favour of `repeated string`. This allows users to prove values stored under keys which contain non-utf8 encoded symbols. As a result, changes have been made to the 02-client `Query` service and 08-wasm contract API messages for JSON blobs. See [02-client](#02-client) and [08-wasm](#08-wasm), respectively. +- The `commitment.v1.MerklePath` type has been removed and a new `commitment.v2.MerklePath` type has been introduced in [#6644](https://github.com/cosmos/ibc-go/pull/6644). The new `commitment.v2.MerklePath` contains `repeated bytes` in favour of `repeated string`. This allows users to prove values stored under keys which contain non-utf8 encoded symbols. As a result, changes have been made to the 02-client `Query` service and 08-wasm contract API messages for JSON blobs. See [02-client](#02-client) and [08-wasm](#08-wasm), respectively. ## IBC Apps diff --git a/modules/core/23-commitment/types/codec.go b/modules/core/23-commitment/types/codec.go index bf72c2cbbdb..28a429d0f9f 100644 --- a/modules/core/23-commitment/types/codec.go +++ b/modules/core/23-commitment/types/codec.go @@ -3,6 +3,7 @@ package types import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types/v2" "github.com/cosmos/ibc-go/v9/modules/core/exported" ) @@ -31,6 +32,6 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { ) registry.RegisterImplementations( (*exported.Path)(nil), - &MerklePath{}, + &v2.MerklePath{}, ) } diff --git a/modules/core/23-commitment/types/codec_test.go b/modules/core/23-commitment/types/codec_test.go index 1c7f48da47b..7ceab30a918 100644 --- a/modules/core/23-commitment/types/codec_test.go +++ b/modules/core/23-commitment/types/codec_test.go @@ -6,6 +6,7 @@ import ( ibc "github.com/cosmos/ibc-go/v9/modules/core" "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types" + "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types/v2" ) func (suite *MerkleTestSuite) TestCodecTypeRegistration() { @@ -26,7 +27,7 @@ func (suite *MerkleTestSuite) TestCodecTypeRegistration() { }, { "success: MerklePath", - sdk.MsgTypeURL(&types.MerklePath{}), + sdk.MsgTypeURL(&v2.MerklePath{}), true, }, { diff --git a/modules/core/23-commitment/types/commitment.pb.go b/modules/core/23-commitment/types/commitment.pb.go index f325e586439..293d56effed 100644 --- a/modules/core/23-commitment/types/commitment.pb.go +++ b/modules/core/23-commitment/types/commitment.pb.go @@ -110,54 +110,6 @@ func (m *MerklePrefix) GetKeyPrefix() []byte { return nil } -// MerklePath is the path used to verify commitment proofs, which can be an -// arbitrary structured object (defined by a commitment type). -// MerklePath is represented from root-to-leaf -// Deprecated: Please use commitment/v2 MerklePath instead which supports non UTF-8 key paths. -type MerklePath struct { - KeyPath []string `protobuf:"bytes,1,rep,name=key_path,json=keyPath,proto3" json:"key_path,omitempty"` -} - -func (m *MerklePath) Reset() { *m = MerklePath{} } -func (m *MerklePath) String() string { return proto.CompactTextString(m) } -func (*MerklePath) ProtoMessage() {} -func (*MerklePath) Descriptor() ([]byte, []int) { - return fileDescriptor_7921d88972a41469, []int{2} -} -func (m *MerklePath) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MerklePath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MerklePath.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MerklePath) XXX_Merge(src proto.Message) { - xxx_messageInfo_MerklePath.Merge(m, src) -} -func (m *MerklePath) XXX_Size() int { - return m.Size() -} -func (m *MerklePath) XXX_DiscardUnknown() { - xxx_messageInfo_MerklePath.DiscardUnknown(m) -} - -var xxx_messageInfo_MerklePath proto.InternalMessageInfo - -func (m *MerklePath) GetKeyPath() []string { - if m != nil { - return m.KeyPath - } - return nil -} - // MerkleProof is a wrapper type over a chain of CommitmentProofs. // It demonstrates membership or non-membership for an element or set of // elements, verifiable in conjunction with a known commitment root. Proofs @@ -171,7 +123,7 @@ func (m *MerkleProof) Reset() { *m = MerkleProof{} } func (m *MerkleProof) String() string { return proto.CompactTextString(m) } func (*MerkleProof) ProtoMessage() {} func (*MerkleProof) Descriptor() ([]byte, []int) { - return fileDescriptor_7921d88972a41469, []int{3} + return fileDescriptor_7921d88972a41469, []int{2} } func (m *MerkleProof) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -210,7 +162,6 @@ func (m *MerkleProof) GetProofs() []*_go.CommitmentProof { func init() { proto.RegisterType((*MerkleRoot)(nil), "ibc.core.commitment.v1.MerkleRoot") proto.RegisterType((*MerklePrefix)(nil), "ibc.core.commitment.v1.MerklePrefix") - proto.RegisterType((*MerklePath)(nil), "ibc.core.commitment.v1.MerklePath") proto.RegisterType((*MerkleProof)(nil), "ibc.core.commitment.v1.MerkleProof") } @@ -219,27 +170,26 @@ func init() { } var fileDescriptor_7921d88972a41469 = []byte{ - // 312 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xb1, 0x4e, 0xeb, 0x30, - 0x14, 0x86, 0x13, 0xdd, 0xaa, 0x97, 0xba, 0x9d, 0x2c, 0x84, 0xa0, 0x02, 0x53, 0x65, 0xa0, 0x5d, - 0x6a, 0xab, 0xed, 0x02, 0x88, 0x09, 0x06, 0x26, 0xa4, 0x2a, 0x03, 0x03, 0x0b, 0x4a, 0x8c, 0x9b, - 0x58, 0x6d, 0x38, 0x51, 0xec, 0x46, 0xf4, 0x0d, 0x18, 0x79, 0x04, 0x1e, 0x87, 0xb1, 0x23, 0x23, - 0x6a, 0x5e, 0x04, 0xd9, 0x6e, 0x50, 0xb6, 0x73, 0x74, 0x3e, 0xff, 0xfa, 0xfd, 0xa1, 0xa1, 0x8c, - 0x39, 0xe3, 0x50, 0x08, 0xc6, 0x21, 0xcb, 0xa4, 0xce, 0xc4, 0xab, 0x66, 0xe5, 0xa4, 0xb1, 0xd1, - 0xbc, 0x00, 0x0d, 0xf8, 0x48, 0xc6, 0x9c, 0x1a, 0x90, 0x36, 0x4e, 0xe5, 0xa4, 0x7f, 0x98, 0x40, - 0x02, 0x16, 0x61, 0x66, 0x72, 0x74, 0xff, 0x94, 0x83, 0xca, 0x40, 0x31, 0xc9, 0xd5, 0x74, 0x66, - 0xf2, 0xf2, 0x02, 0x60, 0xa1, 0xdc, 0x35, 0xb8, 0x40, 0xe8, 0x41, 0x14, 0xcb, 0x95, 0x08, 0x01, - 0x34, 0xc6, 0xa8, 0x95, 0x46, 0x2a, 0x3d, 0xf6, 0x07, 0xfe, 0xa8, 0x17, 0xda, 0xf9, 0xba, 0xf5, - 0xfe, 0x79, 0xee, 0x05, 0x63, 0xd4, 0x73, 0xdc, 0xbc, 0x10, 0x0b, 0xf9, 0x86, 0xcf, 0x10, 0x5a, - 0x8a, 0xcd, 0x73, 0x6e, 0xb7, 0x3d, 0xdf, 0x59, 0x8a, 0x8d, 0x3b, 0x07, 0xc3, 0x3a, 0x76, 0x1e, - 0xe9, 0x14, 0x9f, 0xa0, 0x03, 0x0b, 0x47, 0xda, 0x44, 0xff, 0x1b, 0x75, 0xc2, 0xff, 0x06, 0x8d, - 0x74, 0x1a, 0xdc, 0xa3, 0x6e, 0x9d, 0x0b, 0xb0, 0xc0, 0x97, 0xa8, 0xed, 0xea, 0x59, 0xae, 0x3b, - 0x1d, 0x50, 0xd7, 0x9e, 0xda, 0xf6, 0xb4, 0x9c, 0xd0, 0xbb, 0xbf, 0x2f, 0xdb, 0x17, 0xe1, 0x9e, - 0xbf, 0x7d, 0xfc, 0xda, 0x11, 0x7f, 0xbb, 0x23, 0xfe, 0xcf, 0x8e, 0xf8, 0x1f, 0x15, 0xf1, 0xb6, - 0x15, 0xf1, 0xbe, 0x2b, 0xe2, 0x3d, 0xdd, 0x24, 0x52, 0xa7, 0xeb, 0xd8, 0xc8, 0x62, 0xb5, 0x8b, - 0x98, 0x8f, 0x13, 0x60, 0xe5, 0x15, 0xcb, 0xe0, 0x65, 0xbd, 0x12, 0xca, 0x79, 0x9f, 0xce, 0xc6, - 0x0d, 0xf5, 0x7a, 0x93, 0x0b, 0x15, 0xb7, 0xad, 0xa7, 0xd9, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xbb, 0x86, 0x2e, 0x40, 0x9e, 0x01, 0x00, 0x00, + // 290 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x4c, 0x4a, 0xd6, + 0x4f, 0xce, 0x2f, 0x4a, 0xd5, 0x4f, 0xce, 0xcf, 0xcd, 0xcd, 0x2c, 0xc9, 0x4d, 0xcd, 0x2b, 0xd1, + 0x2f, 0x33, 0x44, 0xe2, 0xe9, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0x89, 0x65, 0x26, 0x25, 0xeb, + 0x81, 0x14, 0xea, 0x21, 0x49, 0x95, 0x19, 0x4a, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, 0x95, 0xe8, + 0x83, 0x58, 0x10, 0xd5, 0x52, 0x32, 0xc9, 0xf9, 0xc5, 0xb9, 0xf9, 0xc5, 0xfa, 0x99, 0xc9, 0xc5, + 0x46, 0xc6, 0x20, 0xf3, 0x0a, 0x8a, 0xf2, 0xf3, 0xd3, 0x8a, 0x21, 0xb2, 0x4a, 0x6a, 0x5c, 0x5c, + 0xbe, 0xa9, 0x45, 0xd9, 0x39, 0xa9, 0x41, 0xf9, 0xf9, 0x25, 0x42, 0x42, 0x5c, 0x2c, 0x19, 0x89, + 0xc5, 0x19, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x3c, 0x41, 0x60, 0xb6, 0x15, 0x4b, 0xc7, 0x02, 0x79, + 0x06, 0x25, 0x5d, 0x2e, 0x1e, 0x88, 0xba, 0x80, 0xa2, 0xd4, 0xb4, 0xcc, 0x0a, 0x21, 0x59, 0x2e, + 0xae, 0xec, 0xd4, 0xca, 0xf8, 0x02, 0x30, 0x0f, 0xaa, 0x9e, 0x33, 0x3b, 0xb5, 0x12, 0x22, 0xad, + 0xe4, 0xce, 0xc5, 0x0d, 0x53, 0x9e, 0x9f, 0x9f, 0x26, 0x64, 0xc1, 0xc5, 0x06, 0xb1, 0x55, 0x82, + 0x51, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x41, 0x0f, 0xe2, 0x28, 0x3d, 0xb0, 0xa3, 0xf4, 0xca, 0x0c, + 0xf5, 0x9c, 0xe1, 0x3e, 0x01, 0xeb, 0x08, 0x82, 0xaa, 0x77, 0x0a, 0x3b, 0xf1, 0x48, 0x8e, 0xf1, + 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, + 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0x9b, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0x50, 0x18, 0xe8, + 0xc3, 0xbc, 0x98, 0x94, 0xac, 0x9b, 0x9e, 0xaf, 0x5f, 0x66, 0xa9, 0x9f, 0x9b, 0x9f, 0x52, 0x9a, + 0x93, 0x5a, 0x0c, 0x09, 0x4e, 0x23, 0x63, 0x5d, 0xa4, 0x10, 0x2d, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, + 0x62, 0x03, 0x7b, 0xdf, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x21, 0xe6, 0xb9, 0x75, 0x01, + 0x00, 0x00, } func (m *MerkleRoot) Marshal() (dAtA []byte, err error) { @@ -302,38 +252,6 @@ func (m *MerklePrefix) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MerklePath) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MerklePath) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MerklePath) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.KeyPath) > 0 { - for iNdEx := len(m.KeyPath) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.KeyPath[iNdEx]) - copy(dAtA[i:], m.KeyPath[iNdEx]) - i = encodeVarintCommitment(dAtA, i, uint64(len(m.KeyPath[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - func (m *MerkleProof) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -408,21 +326,6 @@ func (m *MerklePrefix) Size() (n int) { return n } -func (m *MerklePath) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.KeyPath) > 0 { - for _, s := range m.KeyPath { - l = len(s) - n += 1 + l + sovCommitment(uint64(l)) - } - } - return n -} - func (m *MerkleProof) Size() (n int) { if m == nil { return 0 @@ -612,88 +515,6 @@ func (m *MerklePrefix) Unmarshal(dAtA []byte) error { } return nil } -func (m *MerklePath) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommitment - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MerklePath: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MerklePath: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KeyPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommitment - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCommitment - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCommitment - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.KeyPath = append(m.KeyPath, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCommitment(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCommitment - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *MerkleProof) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/modules/core/23-commitment/types/merkle.go b/modules/core/23-commitment/types/merkle.go index 58c849a66c7..a53452c43b3 100644 --- a/modules/core/23-commitment/types/merkle.go +++ b/modules/core/23-commitment/types/merkle.go @@ -2,7 +2,6 @@ package types import ( "bytes" - "fmt" "github.com/cosmos/gogoproto/proto" ics23 "github.com/cosmos/ics23/go" @@ -67,28 +66,11 @@ func (mp MerklePrefix) Empty() bool { return len(mp.Bytes()) == 0 } -var _ exported.Path = (*MerklePath)(nil) - // NewMerklePath creates a new MerklePath instance // The keys must be passed in from root-to-leaf order. // NOTE: NewMerklePath returns a commitment/v2 MerklePath. var NewMerklePath = v2.NewMerklePath -// GetKey will return a byte representation of the key -// Deprecated: Please use commitment/v2 MerklePath instead. -func (mp MerklePath) GetKey(i uint64) (string, error) { - if i >= uint64(len(mp.KeyPath)) { - return "", fmt.Errorf("index out of range. %d (index) >= %d (len)", i, len(mp.KeyPath)) - } - return mp.KeyPath[i], nil -} - -// Empty returns true if the path is empty -// Deprecated: Please use commitment/v2 MerklePath instead. -func (mp MerklePath) Empty() bool { - return len(mp.KeyPath) == 0 -} - // ApplyPrefix constructs a new commitment path from the arguments. It prepends the prefix key // with the given path. func ApplyPrefix(prefix exported.Prefix, path v2.MerklePath) (v2.MerklePath, error) { diff --git a/modules/light-clients/06-solomachine/misbehaviour_handle.go b/modules/light-clients/06-solomachine/misbehaviour_handle.go index b6bb1323399..0b38a4cbc88 100644 --- a/modules/light-clients/06-solomachine/misbehaviour_handle.go +++ b/modules/light-clients/06-solomachine/misbehaviour_handle.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - commitmenttypes "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types" + commitmenttypesv2 "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types/v2" "github.com/cosmos/ibc-go/v9/modules/core/exported" ) @@ -41,7 +41,7 @@ func (cs ClientState) verifyMisbehaviour(cdc codec.BinaryCodec, misbehaviour *Mi // unmarshaled into the specified data type. func (cs ClientState) verifySignatureAndData(cdc codec.BinaryCodec, misbehaviour *Misbehaviour, sigAndData *SignatureAndData) error { // do not check misbehaviour timestamp since we want to allow processing of past misbehaviour - if err := cdc.Unmarshal(sigAndData.Path, new(commitmenttypes.MerklePath)); err != nil { + if err := cdc.Unmarshal(sigAndData.Path, new(commitmenttypesv2.MerklePath)); err != nil { return err } diff --git a/modules/light-clients/09-localhost/light_client_module.go b/modules/light-clients/09-localhost/light_client_module.go index 78eb4f1916a..3095503d985 100644 --- a/modules/light-clients/09-localhost/light_client_module.go +++ b/modules/light-clients/09-localhost/light_client_module.go @@ -91,7 +91,7 @@ func (l LightClientModule) VerifyMembership( merklePath, ok := path.(commitmenttypesv2.MerklePath) if !ok { - return errorsmod.Wrapf(ibcerrors.ErrInvalidType, "expected %T, got %T", commitmenttypes.MerklePath{}, path) + return errorsmod.Wrapf(ibcerrors.ErrInvalidType, "expected %T, got %T", commitmenttypesv2.MerklePath{}, path) } if len(merklePath.GetKeyPath()) != 2 { @@ -132,7 +132,7 @@ func (l LightClientModule) VerifyNonMembership( merklePath, ok := path.(commitmenttypesv2.MerklePath) if !ok { - return errorsmod.Wrapf(ibcerrors.ErrInvalidType, "expected %T, got %T", commitmenttypes.MerklePath{}, path) + return errorsmod.Wrapf(ibcerrors.ErrInvalidType, "expected %T, got %T", commitmenttypesv2.MerklePath{}, path) } if len(merklePath.GetKeyPath()) != 2 { diff --git a/proto/ibc/core/commitment/v1/commitment.proto b/proto/ibc/core/commitment/v1/commitment.proto index f0b258c4ff7..d3431f71ab1 100644 --- a/proto/ibc/core/commitment/v1/commitment.proto +++ b/proto/ibc/core/commitment/v1/commitment.proto @@ -22,14 +22,6 @@ message MerklePrefix { bytes key_prefix = 1; } -// MerklePath is the path used to verify commitment proofs, which can be an -// arbitrary structured object (defined by a commitment type). -// MerklePath is represented from root-to-leaf -// Deprecated: Please use commitment/v2 MerklePath instead which supports non UTF-8 key paths. -message MerklePath { - repeated string key_path = 1; -} - // MerkleProof is a wrapper type over a chain of CommitmentProofs. // It demonstrates membership or non-membership for an element or set of // elements, verifiable in conjunction with a known commitment root. Proofs From 5a6b4ae00ccea1272967983685c37782336c1d6d Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 29 Jul 2024 16:32:11 +0200 Subject: [PATCH 48/78] api!: rename path to merkle path for contract api json msgs (#6962) * api!: rename path to merkle path for contract api json msgs * fix --------- Co-authored-by: DimitrisJim --- modules/light-clients/08-wasm/CHANGELOG.md | 2 ++ modules/light-clients/08-wasm/types/contract_api.go | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/light-clients/08-wasm/CHANGELOG.md b/modules/light-clients/08-wasm/CHANGELOG.md index b1fd665028e..a2f23cf2635 100644 --- a/modules/light-clients/08-wasm/CHANGELOG.md +++ b/modules/light-clients/08-wasm/CHANGELOG.md @@ -42,6 +42,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking + * [\#6923](https://github.com/cosmos/ibc-go/pull/6923) The JSON msg API for `VerifyMembershipMsg` and `VerifyNonMembershipMsg` payloads for client contract `SudoMsg` has been updated. The field `path` has been changed to `merkle_path`. This change requires updates to 08-wasm client contracts for integration. + ### State Machine Breaking ### Improvements diff --git a/modules/light-clients/08-wasm/types/contract_api.go b/modules/light-clients/08-wasm/types/contract_api.go index 7bc9f58b226..5e987738b9e 100644 --- a/modules/light-clients/08-wasm/types/contract_api.go +++ b/modules/light-clients/08-wasm/types/contract_api.go @@ -70,7 +70,7 @@ type VerifyMembershipMsg struct { DelayTimePeriod uint64 `json:"delay_time_period"` DelayBlockPeriod uint64 `json:"delay_block_period"` Proof []byte `json:"proof"` - Path commitmenttypesv2.MerklePath `json:"path"` + Path commitmenttypesv2.MerklePath `json:"merkle_path"` Value []byte `json:"value"` } @@ -80,7 +80,7 @@ type VerifyNonMembershipMsg struct { DelayTimePeriod uint64 `json:"delay_time_period"` DelayBlockPeriod uint64 `json:"delay_block_period"` Proof []byte `json:"proof"` - Path commitmenttypesv2.MerklePath `json:"path"` + Path commitmenttypesv2.MerklePath `json:"merkle_path"` } // VerifyUpgradeAndUpdateStateMsg is a sudoMsg sent to the contract to verify an upgrade and update its state. From 95beb764a991fcfa64b4ab63697b188fc4bbb37e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 16:48:39 +0300 Subject: [PATCH 49/78] chore(deps): bump golangci/golangci-lint-action from 6.0.1 to 6.1.0 (#6991) Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 6.0.1 to 6.1.0. - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/v6.0.1...v6.1.0) --- updated-dependencies: - dependency-name: golangci/golangci-lint-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/callbacks.yml | 2 +- .github/workflows/e2emodule.yml | 2 +- .github/workflows/golangci-feature.yml | 2 +- .github/workflows/golangci.yml | 2 +- .github/workflows/wasm-client.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/callbacks.yml b/.github/workflows/callbacks.yml index cd1540fb3e9..32cee5708f0 100644 --- a/.github/workflows/callbacks.yml +++ b/.github/workflows/callbacks.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: golangci/golangci-lint-action@v6.0.1 + - uses: golangci/golangci-lint-action@v6.1.0 with: version: v1.57.2 only-new-issues: true diff --git a/.github/workflows/e2emodule.yml b/.github/workflows/e2emodule.yml index 8c996a9cbe9..3554d6ce99f 100644 --- a/.github/workflows/e2emodule.yml +++ b/.github/workflows/e2emodule.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: golangci/golangci-lint-action@v6.0.1 + - uses: golangci/golangci-lint-action@v6.1.0 with: version: v1.57.2 only-new-issues: true diff --git a/.github/workflows/golangci-feature.yml b/.github/workflows/golangci-feature.yml index 39b33404b91..9476a8a35db 100644 --- a/.github/workflows/golangci-feature.yml +++ b/.github/workflows/golangci-feature.yml @@ -27,7 +27,7 @@ jobs: with: fetch-depth: 0 - name: golangci-lint - uses: golangci/golangci-lint-action@v6.0.1 + uses: golangci/golangci-lint-action@v6.1.0 with: version: v1.57.2 only-new-issues: true diff --git a/.github/workflows/golangci.yml b/.github/workflows/golangci.yml index 1f2485ca988..4097aa3e081 100644 --- a/.github/workflows/golangci.yml +++ b/.github/workflows/golangci.yml @@ -23,7 +23,7 @@ jobs: with: fetch-depth: 0 - name: golangci-lint - uses: golangci/golangci-lint-action@v6.0.1 + uses: golangci/golangci-lint-action@v6.1.0 with: version: v1.57.2 only-new-issues: true diff --git a/.github/workflows/wasm-client.yml b/.github/workflows/wasm-client.yml index ce8456dd034..34d2e29e208 100644 --- a/.github/workflows/wasm-client.yml +++ b/.github/workflows/wasm-client.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: golangci/golangci-lint-action@v6.0.1 + - uses: golangci/golangci-lint-action@v6.1.0 with: version: v1.57.2 only-new-issues: true From d3819067b4b4c505969dc00e3573874bb2e1384e Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Tue, 30 Jul 2024 15:04:59 +0100 Subject: [PATCH 50/78] chore: fix transfer entire balance E2E (#6993) --- e2e/tests/transfer/base_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests/transfer/base_test.go b/e2e/tests/transfer/base_test.go index 63cc7a51757..3ea208d145e 100644 --- a/e2e/tests/transfer/base_test.go +++ b/e2e/tests/transfer/base_test.go @@ -612,7 +612,7 @@ func (s *TransferTestSuite) TestMsgTransfer_EntireBalance() { t.Run("send entire balance from B to A", func(t *testing.T) { transferCoins := sdk.NewCoins(sdk.NewCoin(chainBIBCToken.IBCDenom(), transfertypes.UnboundedSpendLimit())) if channelA.Version == transfertypes.V2 { - transferCoins.Add(sdk.NewCoin(chainB.Config().Denom, transfertypes.UnboundedSpendLimit())) + transferCoins = transferCoins.Add(sdk.NewCoin(chainB.Config().Denom, transfertypes.UnboundedSpendLimit())) } transferTxResp := s.Transfer(ctx, chainB, chainBWallet, channelA.Counterparty.PortID, channelA.Counterparty.ChannelID, transferCoins, chainBAddress, chainAAddress, s.GetTimeoutHeight(ctx, chainB), 0, "", nil) From 6daa24c3ff79b10cc199e26def56e48be35b9e69 Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Tue, 30 Jul 2024 17:15:03 +0300 Subject: [PATCH 51/78] chore: make handleFlushing return void. (#6979) --- modules/core/04-channel/keeper/packet.go | 44 +++++++++-------------- modules/core/04-channel/keeper/timeout.go | 5 +-- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/modules/core/04-channel/keeper/packet.go b/modules/core/04-channel/keeper/packet.go index 04f8768a712..c73ff4ce073 100644 --- a/modules/core/04-channel/keeper/packet.go +++ b/modules/core/04-channel/keeper/packet.go @@ -489,10 +489,7 @@ func (k *Keeper) AcknowledgePacket( // if an upgrade is in progress, handling packet flushing and update channel state appropriately if channel.State == types.FLUSHING { - if aborted := k.handleFlushState(ctx, packet, channel); aborted { - k.Logger(ctx).Info("upgrade aborted", "port_id", packet.GetSourcePort(), "channel_id", packet.GetSourceChannel(), "upgrade_sequence", channel.UpgradeSequence) - return channel.Version, nil - } + k.handleFlushState(ctx, packet, channel) } return channel.Version, nil @@ -502,28 +499,21 @@ func (k *Keeper) AcknowledgePacket( // FLUSHING state. It checks if the upgrade has timed out and if so, aborts the upgrade. If all // packets have completed their lifecycle, it sets the channel state to FLUSHCOMPLETE and // emits a channel_flush_complete event. Returns true if the upgrade was aborted, false otherwise. -func (k *Keeper) handleFlushState(ctx sdk.Context, packet types.Packet, channel types.Channel) bool { - counterpartyUpgrade, found := k.GetCounterpartyUpgrade(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) - if !found { - return false - } - - timeout := counterpartyUpgrade.Timeout - selfHeight, selfTimestamp := clienttypes.GetSelfHeight(ctx), uint64(ctx.BlockTime().UnixNano()) - - if timeout.Elapsed(selfHeight, selfTimestamp) { - // packet flushing timeout has expired, abort the upgrade - // committing an error receipt to state, deleting upgrade information and restoring the channel. - k.MustAbortUpgrade(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), timeout.ErrTimeoutElapsed(selfHeight, selfTimestamp)) - return true - } - - // set the channel state to flush complete if all packets have been acknowledged/flushed. - if !k.HasInflightPackets(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) { - channel.State = types.FLUSHCOMPLETE - k.SetChannel(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), channel) - emitChannelFlushCompleteEvent(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), channel) +func (k *Keeper) handleFlushState(ctx sdk.Context, packet types.Packet, channel types.Channel) { + if counterpartyUpgrade, found := k.GetCounterpartyUpgrade(ctx, packet.GetSourcePort(), packet.GetSourceChannel()); found { + timeout := counterpartyUpgrade.Timeout + selfHeight, selfTimestamp := clienttypes.GetSelfHeight(ctx), uint64(ctx.BlockTime().UnixNano()) + + if timeout.Elapsed(selfHeight, selfTimestamp) { + // packet flushing timeout has expired, abort the upgrade + // committing an error receipt to state, deleting upgrade information and restoring the channel. + k.Logger(ctx).Info("upgrade aborted", "port_id", packet.GetSourcePort(), "channel_id", packet.GetSourceChannel(), "upgrade_sequence", channel.UpgradeSequence) + k.MustAbortUpgrade(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), timeout.ErrTimeoutElapsed(selfHeight, selfTimestamp)) + } else if !k.HasInflightPackets(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) { + // set the channel state to flush complete if all packets have been acknowledged/flushed. + channel.State = types.FLUSHCOMPLETE + k.SetChannel(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), channel) + emitChannelFlushCompleteEvent(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), channel) + } } - - return false } diff --git a/modules/core/04-channel/keeper/timeout.go b/modules/core/04-channel/keeper/timeout.go index 36d82873707..99d38a9657e 100644 --- a/modules/core/04-channel/keeper/timeout.go +++ b/modules/core/04-channel/keeper/timeout.go @@ -152,10 +152,7 @@ func (k *Keeper) TimeoutExecuted( // if an upgrade is in progress, handling packet flushing and update channel state appropriately if channel.State == types.FLUSHING && channel.Ordering == types.UNORDERED { - if aborted := k.handleFlushState(ctx, packet, channel); aborted { - k.Logger(ctx).Info("upgrade aborted", "port_id", packet.GetSourcePort(), "channel_id", packet.GetSourceChannel(), "upgrade_sequence", channel.UpgradeSequence) - return nil - } + k.handleFlushState(ctx, packet, channel) } if channel.Ordering == types.ORDERED { From 75ec6e95b7178f1581af832fcb93e3bf405a72ea Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Tue, 30 Jul 2024 15:28:01 +0100 Subject: [PATCH 52/78] Adding version to UnmarshalPacketData interface (#6988) * chore: adding version to UnmarshalPacketData interface * chore: addressing PR feedback --- .../controller/ibc_middleware.go | 12 +++++++++--- .../controller/ibc_middleware_test.go | 8 +++++--- .../apps/27-interchain-accounts/host/ibc_module.go | 12 +++++++++--- .../27-interchain-accounts/host/ibc_module_test.go | 7 +++++-- modules/apps/29-fee/ibc_middleware.go | 4 ++-- modules/apps/29-fee/ibc_middleware_test.go | 5 +++-- modules/apps/callbacks/ibc_middleware.go | 2 +- modules/apps/callbacks/ibc_middleware_test.go | 6 ++++-- modules/apps/callbacks/types/callbacks.go | 4 ++-- modules/apps/transfer/ibc_module.go | 7 ++++--- modules/apps/transfer/ibc_module_test.go | 3 ++- modules/core/05-port/types/module.go | 2 +- testing/mock/ibc_module.go | 6 +++--- 13 files changed, 50 insertions(+), 28 deletions(-) diff --git a/modules/apps/27-interchain-accounts/controller/ibc_middleware.go b/modules/apps/27-interchain-accounts/controller/ibc_middleware.go index 595930b231b..db7db8bc4e8 100644 --- a/modules/apps/27-interchain-accounts/controller/ibc_middleware.go +++ b/modules/apps/27-interchain-accounts/controller/ibc_middleware.go @@ -353,11 +353,17 @@ func (im IBCMiddleware) GetAppVersion(ctx sdk.Context, portID, channelID string) // UnmarshalPacketData attempts to unmarshal the provided packet data bytes // into an InterchainAccountPacketData. This function implements the optional // PacketDataUnmarshaler interface required for ADR 008 support. -func (IBCMiddleware) UnmarshalPacketData(_ sdk.Context, _, _ string, bz []byte) (interface{}, error) { +func (im IBCMiddleware) UnmarshalPacketData(ctx sdk.Context, portID string, channelID string, bz []byte) (interface{}, string, error) { var data icatypes.InterchainAccountPacketData err := data.UnmarshalJSON(bz) if err != nil { - return nil, err + return nil, "", err } - return data, nil + + version, ok := im.GetAppVersion(ctx, portID, channelID) + if !ok { + return nil, "", errorsmod.Wrapf(ibcerrors.ErrNotFound, "app version not found for port %s and channel %s", portID, channelID) + } + + return data, version, nil } diff --git a/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go b/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go index afaf5c487ce..d76b26c064b 100644 --- a/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go +++ b/modules/apps/27-interchain-accounts/controller/ibc_middleware_test.go @@ -1314,16 +1314,18 @@ func (suite *InterchainAccountsTestSuite) TestPacketDataUnmarshalerInterface() { Memo: "", } - // Context, port identifier and channel identifier are unused for controller. - packetData, err := controller.IBCMiddleware{}.UnmarshalPacketData(suite.chainA.GetContext(), "", "", expPacketData.GetBytes()) + controllerMiddleware := controller.NewIBCMiddleware(suite.chainA.GetSimApp().ICAControllerKeeper) + packetData, version, err := controllerMiddleware.UnmarshalPacketData(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, expPacketData.GetBytes()) suite.Require().NoError(err) + suite.Require().Equal(version, path.EndpointA.ChannelConfig.Version) suite.Require().Equal(expPacketData, packetData) // test invalid packet data invalidPacketData := []byte("invalid packet data") // Context, port identifier and channel identifier are not used for controller. - packetData, err = controller.IBCMiddleware{}.UnmarshalPacketData(suite.chainA.GetContext(), "", "", invalidPacketData) + packetData, version, err = controllerMiddleware.UnmarshalPacketData(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, invalidPacketData) suite.Require().Error(err) + suite.Require().Empty(version) suite.Require().Nil(packetData) } } diff --git a/modules/apps/27-interchain-accounts/host/ibc_module.go b/modules/apps/27-interchain-accounts/host/ibc_module.go index 18339a7f9f8..65af63a3a30 100644 --- a/modules/apps/27-interchain-accounts/host/ibc_module.go +++ b/modules/apps/27-interchain-accounts/host/ibc_module.go @@ -186,11 +186,17 @@ func (IBCModule) OnChanUpgradeOpen(_ sdk.Context, _, _ string, _ channeltypes.Or // UnmarshalPacketData attempts to unmarshal the provided packet data bytes // into an InterchainAccountPacketData. This function implements the optional // PacketDataUnmarshaler interface required for ADR 008 support. -func (IBCModule) UnmarshalPacketData(_ sdk.Context, _, _ string, bz []byte) (interface{}, error) { +func (im IBCModule) UnmarshalPacketData(ctx sdk.Context, portID string, channelID string, bz []byte) (interface{}, string, error) { var data icatypes.InterchainAccountPacketData err := data.UnmarshalJSON(bz) if err != nil { - return nil, err + return nil, "", err } - return data, nil + + version, ok := im.keeper.GetAppVersion(ctx, portID, channelID) + if !ok { + return nil, "", errorsmod.Wrapf(ibcerrors.ErrNotFound, "app version not found for port %s and channel %s", portID, channelID) + } + + return data, version, nil } diff --git a/modules/apps/27-interchain-accounts/host/ibc_module_test.go b/modules/apps/27-interchain-accounts/host/ibc_module_test.go index cba05393f9b..07699ee0da0 100644 --- a/modules/apps/27-interchain-accounts/host/ibc_module_test.go +++ b/modules/apps/27-interchain-accounts/host/ibc_module_test.go @@ -917,15 +917,18 @@ func (suite *InterchainAccountsTestSuite) TestPacketDataUnmarshalerInterface() { } // Context, port identifier and channel identifier are unused for host. - packetData, err := icahost.IBCModule{}.UnmarshalPacketData(suite.chainA.GetContext(), "", "", expPacketData.GetBytes()) + icaHostModule := icahost.NewIBCModule(suite.chainA.GetSimApp().ICAHostKeeper) + packetData, version, err := icaHostModule.UnmarshalPacketData(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, expPacketData.GetBytes()) suite.Require().NoError(err) + suite.Require().Equal(version, path.EndpointA.ChannelConfig.Version) suite.Require().Equal(expPacketData, packetData) // test invalid packet data invalidPacketData := []byte("invalid packet data") // Context, port identifier and channel identifier are unused for host. - packetData, err = icahost.IBCModule{}.UnmarshalPacketData(suite.chainA.GetContext(), "", "", invalidPacketData) + packetData, version, err = icaHostModule.UnmarshalPacketData(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, invalidPacketData) suite.Require().Error(err) + suite.Require().Empty(version) suite.Require().Nil(packetData) } } diff --git a/modules/apps/29-fee/ibc_middleware.go b/modules/apps/29-fee/ibc_middleware.go index be979487ddb..dce52a87cdc 100644 --- a/modules/apps/29-fee/ibc_middleware.go +++ b/modules/apps/29-fee/ibc_middleware.go @@ -486,10 +486,10 @@ func (im IBCMiddleware) GetAppVersion(ctx sdk.Context, portID, channelID string) // UnmarshalPacketData attempts to use the underlying app to unmarshal the packet data. // If the underlying app does not support the PacketDataUnmarshaler interface, an error is returned. // This function implements the optional PacketDataUnmarshaler interface required for ADR 008 support. -func (im IBCMiddleware) UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, error) { +func (im IBCMiddleware) UnmarshalPacketData(ctx sdk.Context, portID string, channelID string, bz []byte) (interface{}, string, error) { unmarshaler, ok := im.app.(porttypes.PacketDataUnmarshaler) if !ok { - return nil, errorsmod.Wrapf(types.ErrUnsupportedAction, "underlying app does not implement %T", (*porttypes.PacketDataUnmarshaler)(nil)) + return nil, "", errorsmod.Wrapf(types.ErrUnsupportedAction, "underlying app does not implement %T", (*porttypes.PacketDataUnmarshaler)(nil)) } return unmarshaler.UnmarshalPacketData(ctx, portID, channelID, bz) diff --git a/modules/apps/29-fee/ibc_middleware_test.go b/modules/apps/29-fee/ibc_middleware_test.go index 7f1948482ba..4e2a9c27280 100644 --- a/modules/apps/29-fee/ibc_middleware_test.go +++ b/modules/apps/29-fee/ibc_middleware_test.go @@ -1580,8 +1580,9 @@ func (suite *FeeTestSuite) TestPacketDataUnmarshalerInterface() { suite.Require().True(ok) // Context, port identifier, channel identifier are not used in current wiring of fee. - packetData, err := feeModule.UnmarshalPacketData(suite.chainA.GetContext(), "", "", ibcmock.MockPacketData) + packetData, version, err := feeModule.UnmarshalPacketData(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, ibcmock.MockPacketData) suite.Require().NoError(err) + suite.Require().NotEmpty(version) suite.Require().Equal(ibcmock.MockPacketData, packetData) } @@ -1590,7 +1591,7 @@ func (suite *FeeTestSuite) TestPacketDataUnmarshalerInterfaceError() { mockFeeMiddleware := ibcfee.NewIBCMiddleware(nil, feekeeper.Keeper{}) // Context, port identifier, channel identifier are not used in mockFeeMiddleware. - _, err := mockFeeMiddleware.UnmarshalPacketData(suite.chainA.GetContext(), "", "", ibcmock.MockPacketData) + _, _, err := mockFeeMiddleware.UnmarshalPacketData(suite.chainA.GetContext(), "", "", ibcmock.MockPacketData) expError := errorsmod.Wrapf(types.ErrUnsupportedAction, "underlying app does not implement %T", (*porttypes.PacketDataUnmarshaler)(nil)) suite.Require().ErrorIs(err, expError) } diff --git a/modules/apps/callbacks/ibc_middleware.go b/modules/apps/callbacks/ibc_middleware.go index dfe21cc8547..f3cf521dd1b 100644 --- a/modules/apps/callbacks/ibc_middleware.go +++ b/modules/apps/callbacks/ibc_middleware.go @@ -426,6 +426,6 @@ func (im IBCMiddleware) GetAppVersion(ctx sdk.Context, portID, channelID string) // UnmarshalPacketData defers to the underlying app to unmarshal the packet data. // This function implements the optional PacketDataUnmarshaler interface. -func (im IBCMiddleware) UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, error) { +func (im IBCMiddleware) UnmarshalPacketData(ctx sdk.Context, portID string, channelID string, bz []byte) (interface{}, string, error) { return im.app.UnmarshalPacketData(ctx, portID, channelID, bz) } diff --git a/modules/apps/callbacks/ibc_middleware_test.go b/modules/apps/callbacks/ibc_middleware_test.go index e87c2317fd0..46aab6ed33c 100644 --- a/modules/apps/callbacks/ibc_middleware_test.go +++ b/modules/apps/callbacks/ibc_middleware_test.go @@ -1027,8 +1027,9 @@ func (s *CallbacksTestSuite) TestUnmarshalPacketDataV1() { // Unmarshal ICS20 v1 packet data into v2 packet data data := expPacketDataICS20V1.GetBytes() - packetData, err := unmarshalerStack.UnmarshalPacketData(s.chainA.GetContext(), portID, channelID, data) + packetData, version, err := unmarshalerStack.UnmarshalPacketData(s.chainA.GetContext(), portID, channelID, data) s.Require().NoError(err) + s.Require().Equal(s.path.EndpointA.ChannelConfig.Version, version) s.Require().Equal(expPacketDataICS20V2, packetData) } @@ -1060,9 +1061,10 @@ func (s *CallbacksTestSuite) TestUnmarshalPacketDataV2() { // Unmarshal ICS20 v2 packet data data := expPacketDataICS20V2.GetBytes() - packetData, err := unmarshalerStack.UnmarshalPacketData(s.chainA.GetContext(), portID, channelID, data) + packetData, version, err := unmarshalerStack.UnmarshalPacketData(s.chainA.GetContext(), portID, channelID, data) s.Require().NoError(err) s.Require().Equal(expPacketDataICS20V2, packetData) + s.Require().Equal(s.path.EndpointA.ChannelConfig.Version, version) } func (s *CallbacksTestSuite) TestGetAppVersion() { diff --git a/modules/apps/callbacks/types/callbacks.go b/modules/apps/callbacks/types/callbacks.go index 658887a47ac..7d107db1a0f 100644 --- a/modules/apps/callbacks/types/callbacks.go +++ b/modules/apps/callbacks/types/callbacks.go @@ -75,7 +75,7 @@ func GetSourceCallbackData( packet channeltypes.Packet, maxGas uint64, ) (CallbackData, error) { - packetData, err := packetDataUnmarshaler.UnmarshalPacketData(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetData()) + packetData, _, err := packetDataUnmarshaler.UnmarshalPacketData(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetData()) if err != nil { return CallbackData{}, errorsmod.Wrap(ErrCannotUnmarshalPacketData, err.Error()) } @@ -89,7 +89,7 @@ func GetDestCallbackData( packetDataUnmarshaler porttypes.PacketDataUnmarshaler, packet channeltypes.Packet, maxGas uint64, ) (CallbackData, error) { - packetData, err := packetDataUnmarshaler.UnmarshalPacketData(ctx, packet.GetDestPort(), packet.GetDestChannel(), packet.GetData()) + packetData, _, err := packetDataUnmarshaler.UnmarshalPacketData(ctx, packet.GetDestPort(), packet.GetDestChannel(), packet.GetData()) if err != nil { return CallbackData{}, errorsmod.Wrap(ErrCannotUnmarshalPacketData, err.Error()) } diff --git a/modules/apps/transfer/ibc_module.go b/modules/apps/transfer/ibc_module.go index 4af345c339a..39220cc75eb 100644 --- a/modules/apps/transfer/ibc_module.go +++ b/modules/apps/transfer/ibc_module.go @@ -312,11 +312,12 @@ func (IBCModule) OnChanUpgradeOpen(ctx sdk.Context, portID, channelID string, pr // UnmarshalPacketData attempts to unmarshal the provided packet data bytes // into a FungibleTokenPacketData. This function implements the optional // PacketDataUnmarshaler interface required for ADR 008 support. -func (im IBCModule) UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, error) { +func (im IBCModule) UnmarshalPacketData(ctx sdk.Context, portID string, channelID string, bz []byte) (interface{}, string, error) { ics20Version, found := im.keeper.GetICS4Wrapper().GetAppVersion(ctx, portID, channelID) if !found { - return types.FungibleTokenPacketDataV2{}, errorsmod.Wrapf(ibcerrors.ErrNotFound, "app version not found for port %s and channel %s", portID, channelID) + return types.FungibleTokenPacketDataV2{}, "", errorsmod.Wrapf(ibcerrors.ErrNotFound, "app version not found for port %s and channel %s", portID, channelID) } - return types.UnmarshalPacketData(bz, ics20Version) + ftpd, err := types.UnmarshalPacketData(bz, ics20Version) + return ftpd, ics20Version, err } diff --git a/modules/apps/transfer/ibc_module_test.go b/modules/apps/transfer/ibc_module_test.go index 4dd4a505fd5..0a22a96e8bd 100644 --- a/modules/apps/transfer/ibc_module_test.go +++ b/modules/apps/transfer/ibc_module_test.go @@ -889,7 +889,7 @@ func (suite *TransferTestSuite) TestPacketDataUnmarshalerInterface() { unmarshalerStack, ok := transferStack.(porttypes.PacketDataUnmarshaler) suite.Require().True(ok) - packetData, err := unmarshalerStack.UnmarshalPacketData(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, data) + packetData, version, err := unmarshalerStack.UnmarshalPacketData(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, data) expPass := tc.expError == nil if expPass { @@ -897,6 +897,7 @@ func (suite *TransferTestSuite) TestPacketDataUnmarshalerInterface() { v2PacketData, ok := packetData.(types.FungibleTokenPacketDataV2) suite.Require().True(ok) + suite.Require().Equal(path.EndpointA.ChannelConfig.Version, version) if v1PacketData, ok := initialPacketData.(types.FungibleTokenPacketData); ok { // Note: testing of the denom trace parsing/conversion should be done as part of testing internal conversion functions diff --git a/modules/core/05-port/types/module.go b/modules/core/05-port/types/module.go index 8b2ccf94248..d1afbf5820e 100644 --- a/modules/core/05-port/types/module.go +++ b/modules/core/05-port/types/module.go @@ -199,5 +199,5 @@ type PacketDataUnmarshaler interface { // UnmarshalPacketData unmarshals the packet data into a concrete type // ctx, portID, channelID are provided as arguments, so that (if needed) // the packet data can be unmarshaled based on the channel version. - UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, error) + UnmarshalPacketData(ctx sdk.Context, portID string, channelID string, bz []byte) (interface{}, string, error) } diff --git a/testing/mock/ibc_module.go b/testing/mock/ibc_module.go index c698c05d1bd..03c21ffce4a 100644 --- a/testing/mock/ibc_module.go +++ b/testing/mock/ibc_module.go @@ -219,11 +219,11 @@ func (im IBCModule) OnChanUpgradeOpen(ctx sdk.Context, portID, channelID string, // UnmarshalPacketData returns the MockPacketData. This function implements the optional // PacketDataUnmarshaler interface required for ADR 008 support. -func (IBCModule) UnmarshalPacketData(_ sdk.Context, _, _ string, bz []byte) (interface{}, error) { +func (IBCModule) UnmarshalPacketData(ctx sdk.Context, portID string, channelID string, bz []byte) (interface{}, string, error) { if reflect.DeepEqual(bz, MockPacketData) { - return MockPacketData, nil + return MockPacketData, Version, nil } - return nil, MockApplicationCallbackError + return nil, "", MockApplicationCallbackError } // GetMockRecvCanaryCapabilityName generates a capability name for testing OnRecvPacket functionality. From 4a0da8f37d309ea52e089b67c6eda929ccad35ae Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Wed, 31 Jul 2024 09:28:04 +0100 Subject: [PATCH 53/78] Update changelog for unmarshal packet data interface change (#7001) * chore: update changelog for unmarshal packet data interface change * docs: updating docs to include note about version return * docs: just grep-foo thangs --------- Co-authored-by: DimitrisJim --- CHANGELOG.md | 1 + docs/architecture/adr-008-app-caller-cbs.md | 3 ++- docs/docs/01-ibc/03-apps/02-ibcmodule.md | 3 ++- docs/docs/04-middleware/02-callbacks/03-interfaces.md | 3 ++- docs/docs/05-migrations/13-v8-to-v9.md | 4 ++-- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e9a76846a3..0dc1dec2208 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (core/04-channel) [\#6023](https://github.com/cosmos/ibc-go/pull/6023) Remove emission of non-hexlified event attributes `packet_data` and `packet_ack`. * (core) [\#6320](https://github.com/cosmos/ibc-go/pull/6320) Remove unnecessary `Proof` interface from `exported` package. * (core/05-port) [\#6341](https://github.com/cosmos/ibc-go/pull/6341) Modify `UnmarshalPacketData` interface to take in the context, portID, and channelID. This allows for packet data's to be unmarshaled based on the channel version. +* (core/05-port) [\#6341](https://github.com/cosmos/ibc-go/pull/6988) Modify `UnmarshalPacketData` interface to return the underlying application version. * (apps/27-interchain-accounts) [\#6433](https://github.com/cosmos/ibc-go/pull/6433) Use UNORDERED as the default ordering for new ICA channels. * (apps/transfer) [\#6440](https://github.com/cosmos/ibc-go/pull/6440) Remove `GetPrefixedDenom`. * (apps/transfer) [\#6508](https://github.com/cosmos/ibc-go/pull/6508) Remove the `DenomTrace` type. diff --git a/docs/architecture/adr-008-app-caller-cbs.md b/docs/architecture/adr-008-app-caller-cbs.md index 027fb827f5e..7e9971b4069 100644 --- a/docs/architecture/adr-008-app-caller-cbs.md +++ b/docs/architecture/adr-008-app-caller-cbs.md @@ -96,7 +96,8 @@ type PacketDataUnmarshaler interface { // UnmarshalPacketData unmarshals the packet data into a concrete type // ctx, portID, channelID are provided as arguments, so that (if needed) // the packet data can be unmarshaled based on the channel version. - UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, error) + // the version of the underlying app is also returned. + UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, string, error) } ``` diff --git a/docs/docs/01-ibc/03-apps/02-ibcmodule.md b/docs/docs/01-ibc/03-apps/02-ibcmodule.md index 3b4ebc73f77..0f1b4d1ae21 100644 --- a/docs/docs/01-ibc/03-apps/02-ibcmodule.md +++ b/docs/docs/01-ibc/03-apps/02-ibcmodule.md @@ -374,7 +374,8 @@ type PacketDataUnmarshaler interface { // UnmarshalPacketData unmarshals the packet data into a concrete type // ctx, portID, channelID are provided as arguments, so that (if needed) // the packet data can be unmarshaled based on the channel version. - UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, error) + // The version of the underlying app is also returned. + UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, string, error) } ``` diff --git a/docs/docs/04-middleware/02-callbacks/03-interfaces.md b/docs/docs/04-middleware/02-callbacks/03-interfaces.md index 87e2aaed1ae..6ec44417757 100644 --- a/docs/docs/04-middleware/02-callbacks/03-interfaces.md +++ b/docs/docs/04-middleware/02-callbacks/03-interfaces.md @@ -20,7 +20,8 @@ type PacketDataUnmarshaler interface { // UnmarshalPacketData unmarshals the packet data into a concrete type // ctx, portID, channelID are provided as arguments, so that (if needed) // the packet data can be unmarshaled based on the channel version. - UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, error) + // The version of the underlying app is also returned. + UnmarshalPacketData(ctx sdk.Context, portID, channelID string, bz []byte) (interface{}, string, error) } ``` diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 1dc3e7c3dc6..e06b79e3b44 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -176,7 +176,7 @@ OnTimeoutPacket func( ### 05-port -- The signature of the `UnmarshalPacketData` function of the `PacketDataUnmarshaler` interface takes now extra arguments for the context and the port and channel identifiers. These parameters have been added so that implementations of the interface function can retrieve the channel version, which allows the provided packet data to be unmarshaled based on the channel version: +- The signature of the `UnmarshalPacketData` function of the `PacketDataUnmarshaler` interface takes now extra arguments for the context and the port and channel identifiers. These parameters have been added so that implementations of the interface function can retrieve the channel version, which allows the provided packet data to be unmarshaled based on the channel version. In addition to these, `UnmarshalPacketData` now also returns the underlying application's version: ```diff type PacketDataUnmarshaler interface { @@ -185,7 +185,7 @@ type PacketDataUnmarshaler interface { + portID, + channelID string, bz []byte, - ) (interface{}, error) ++ ) (interface{}, string, error) } ``` From e9a85181aa1d7f16b81b9bd9752b49e5dbb0b5eb Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Wed, 31 Jul 2024 17:26:33 +0300 Subject: [PATCH 54/78] Update mergify.yml for new 08-wasm release branches (#6998) --- .github/mergify.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/mergify.yml b/.github/mergify.yml index 701d41b9220..724a0898bce 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -57,7 +57,7 @@ pull_request_rules: actions: backport: branches: - - 08-wasm/release/v0.3.x+ibc-go-v7.3.x-wasmvm-v1.5.x + - 08-wasm/release/v0.3.x+ibc-go-v7.4.x-wasmvm-v1.5.x - name: backport patches to v0.4.x wasm ibc-go v8.3.x & wasmvm 2.0.x branch conditions: - base=main @@ -65,7 +65,7 @@ pull_request_rules: actions: backport: branches: - - 08-wasm/release/v0.4.x+ibc-go-v8.3.x-wasmvm-v2.0.x + - 08-wasm/release/v0.4.x+ibc-go-v8.4.x-wasmvm-v2.0.x - name: backport patches to v7.4.x branch conditions: - base=main From 1a5ccdd5e98d234d6274ae54a79b00b5e1720538 Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Wed, 31 Jul 2024 19:54:11 +0300 Subject: [PATCH 55/78] docs: amend docs for 08 wasm releases (#7002) * docs: amend docs best to my knowledge. * chore: add commits to compat matrix --- RELEASES.md | 8 ++++---- .../03-light-clients/04-wasm/03-integration.md | 6 ++---- .../docs/03-light-clients/04-wasm/09-migrations.md | 6 +++--- modules/light-clients/08-wasm/CHANGELOG.md | 14 ++++++++++---- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/RELEASES.md b/RELEASES.md index 1f86209cf6e..40970c2d135 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -88,8 +88,8 @@ We reserve the right to drop support for releases if they are deemed unused (for |Release|End of Life Date| |-------|----------------| -|`v0.3.0+ibc-go-v7.3.x-wasmvm-v1.5.x`|September 17, 2024| -|`v0.4.x+ibc-go-v8.3.x-wasmvm-v2.0.x`|May 10, 2025| +|`v0.3.x+ibc-go-v7.4.x-wasmvm-v1.5.x`|September 17, 2024| +|`v0.4.x+ibc-go-v8.4.x-wasmvm-v2.0.x`|May 10, 2025| ### What pull requests will be included in stable patch-releases? @@ -145,8 +145,8 @@ Versions of Golang, ibc-go, Cosmos SDK and CometBFT used by `08-wasm` module in | Go | callbacks | ibc-go | Cosmos SDK | Tendermint/CometBFT | |----|-----------|--------|------------|---------------------| -| 1.19 | v0.3.0+ibc-go-v7.3-wasmvm-v1.5 | v7.3.0 | v0.47.6 | v0.37.2 | -| 1.21 | v0.4.0+ibc-go-v8.3-wasmvm-v2.0 | v8.3.0 | v0.50.6 | v0.38.9 | +| 1.19 | v0.3.1+ibc-go-v7.4-wasmvm-v1.5 | v7.4.0 | v0.47.8 | v0.37.4 | +| 1.21 | v0.4.1+ibc-go-v8.4-wasmvm-v2.0 | v8.4.0 | v0.50.7 | v0.38.9 | ## Graphics diff --git a/docs/docs/03-light-clients/04-wasm/03-integration.md b/docs/docs/03-light-clients/04-wasm/03-integration.md index 269a80b1a5a..e005cd5ae4c 100644 --- a/docs/docs/03-light-clients/04-wasm/03-integration.md +++ b/docs/docs/03-light-clients/04-wasm/03-integration.md @@ -21,10 +21,8 @@ The following table shows the compatibility matrix between the `08-wasm` module, | **Version** | **Git commit to import** | |:--------------------------------:|:----------------------------------------:| -| `v0.2.0+ibc-go-v8.3-wasmvm-v2.0` | 4b45d1822fb6a0698e7621112b92c13679061c40 | -| `v0.1.1+ibc-go-v7.3-wasmvm-v1.5` | 7ee2a2452b79d0bc8316dc622a1243afa058e8cb | -| `v0.1.0+ibc-go-v8.0-wasmvm-v1.5` | 57fcdb9a9a9db9b206f7df2f955866dc4e10fef4 | -| `v0.1.0+ibc-go-v7.3-wasmvm-v1.5` | b306e7a706e1f84a5e11af0540987bd68de9bae5 | +| `v0.4.1+ibc-go-v8.4-wasmvm-v2.0` | ccd4dc278e720be87418028026ebd93a80fa5ac0 | +| `v0.3.1+ibc-go-v7.4-wasmvm-v1.5` | 13c071f0b34d67342f0b7a8874d84d2e68b887e1 | ## `app.go` setup diff --git a/docs/docs/03-light-clients/04-wasm/09-migrations.md b/docs/docs/03-light-clients/04-wasm/09-migrations.md index be7812e8c91..35c43bd6721 100644 --- a/docs/docs/03-light-clients/04-wasm/09-migrations.md +++ b/docs/docs/03-light-clients/04-wasm/09-migrations.md @@ -20,7 +20,7 @@ v0.1.1-0.20231213092650-57fcdb9a9a9d => v0.1.0+ibc-go-v8.0-wasmvm-v1.5 v0.1.1-0.20231213092633-b306e7a706e1 => v0.1.0+ibc-go-v7.3-wasmvm-v1.5 ``` -## From ibc-go v8.3.x to ibc-go v9.0.x +## From ibc-go v8.4.x to ibc-go v9.0.x ### Chains @@ -39,7 +39,7 @@ v0.1.1-0.20231213092633-b306e7a706e1 => v0.1.0+ibc-go-v7.3-wasmvm-v1.5 - The `WithQueryPlugins` function signature has changed to take in the `QueryPlugins` type from the `keeper` package (previously from the `types` package). - The `VMGasRegister` variable has been moved from the `types` package to the `keeper` package. -## From v0.3.0+ibc-go-v8.3-wasmvm-v2.0 to v0.4.0-ibc-go-v8.3-wasmvm-v2.0 +## From v0.3.0+ibc-go-v8.3-wasmvm-v2.0 to v0.4.1-ibc-go-v8.4-wasmvm-v2.0 ### Contract developers @@ -48,7 +48,7 @@ The `path` field on both JSON API messages has been renamed to `merkle_path`. A migration is required for existing 08-wasm client contracts in order to correctly handle the deserialisation of these fields. -## From v0.2.0+ibc-go-v7.3-wasmvm-v1.5 to v0.3.0-ibc-go-v7.3-wasmvm-v1.5 +## From v0.2.0+ibc-go-v7.3-wasmvm-v1.5 to v0.3.1-ibc-go-v7.4-wasmvm-v1.5 ### Contract developers diff --git a/modules/light-clients/08-wasm/CHANGELOG.md b/modules/light-clients/08-wasm/CHANGELOG.md index a2f23cf2635..f07b5e94080 100644 --- a/modules/light-clients/08-wasm/CHANGELOG.md +++ b/modules/light-clients/08-wasm/CHANGELOG.md @@ -42,8 +42,6 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking - * [\#6923](https://github.com/cosmos/ibc-go/pull/6923) The JSON msg API for `VerifyMembershipMsg` and `VerifyNonMembershipMsg` payloads for client contract `SudoMsg` has been updated. The field `path` has been changed to `merkle_path`. This change requires updates to 08-wasm client contracts for integration. - ### State Machine Breaking ### Improvements @@ -53,7 +51,11 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes -## [v0.4.0+ibc-go-v8.3-wasmvm-v2.0](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.4.0%2Bibc-go-v8.3-wasmvm-v2.0) - 2024-07-29 +## [v0.4.1+ibc-go-v8.4-wasmvm-v2.0](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.4.1%2Bibc-go-v8.4-wasmvm-v2.0) - 2024-07-31 + +### Dependencies + +* [\#6992](https://github.com/cosmos/ibc-go/pull/6992) Bump ibc-go to v8.4.0 and CosmosSDK to v0.50.7. ### API Breaking @@ -83,7 +85,11 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [\#6815](https://github.com/cosmos/ibc-go/pull/6815) Decode to bytes the hex-encoded checksum argument of the `migrate-contract` CLI. -## [v0.3.0+ibc-go-v7.3-wasmvm-v1.5](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.3.0%2Bibc-go-v7.3-wasmvm-v1.5) - 2024-07-29 +## [v0.3.1+ibc-go-v7.4-wasmvm-v1.5](https://github.com/cosmos/ibc-go/releases/tag/modules%2Flight-clients%2F08-wasm%2Fv0.3.1%2Bibc-go-v7.4-wasmvm-v1.5) - 2024-07-31 + +### Dependencies + +* [\#6996](https://github.com/cosmos/ibc-go/pull/6992) Bump ibc-go to v7.4.0, CosmosSDK to v0.47.8 and CometBFT to v0.37.4. ### API Breaking From 314bbc505af50c7ebfd25ff7e329122d77cd5913 Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Thu, 1 Aug 2024 14:31:36 +0100 Subject: [PATCH 56/78] Update E2E Readme and simplify configuration (#6834) * chore: modify E2E readme and add default simple configuration for tests * chore: adding note about running tests from IDE * chore: lint README * chore: addressing PR feedback --- e2e/README.md | 288 +++++++------------------------- e2e/sample.config.extended.yaml | 62 +++++++ e2e/sample.config.yaml | 61 ++----- e2e/testsuite/testconfig.go | 45 ++++- 4 files changed, 183 insertions(+), 273 deletions(-) create mode 100644 e2e/sample.config.extended.yaml diff --git a/e2e/README.md b/e2e/README.md index 7d37307c306..957733b2639 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -1,17 +1,8 @@ # Table of Contents 1. [How to write tests](#how-to-write-tests) - - a. [Adding a new test](#adding-a-new-test) - - b. [Running the tests with custom images](#running-tests-with-custom-images) - - b. [Code samples](#code-samples) - - [Setup](#setup) - - [Creating test users](#creating-test-users) - - [Waiting](#waiting) - - [Query wallet balances](#query-wallet-balances) - - [Broadcasting messages](#broadcasting-messages) - - [Starting the relayer](#starting-the-relayer) - - [Arbitrary commands](#arbitrary-commands) - - [IBC transfer](#ibc-transfer) + - a. [Adding a new test](#adding-a-new-test) + - b. [Running the tests with custom images](#running-tests-with-custom-images) 2. [Test design](#test-design) - a. [interchaintest](#interchaintest) - b. [CI configuration](#ci-configuration) @@ -42,187 +33,101 @@ Tests can be run using a Makefile target under the e2e directory. `e2e/Makefile` The tests can be configured using a configuration file or environment variables. -See [the example](./sample.config.yaml) to get started. The default location the tests look is `~/.ibc-go-e2e-config.yaml` +See the [minimal example](./sample.config.yaml) or [extended example](./sample.config.extended.yaml) to get started. The default location the tests look is `~/.ibc-go-e2e-config.yaml` But this can be specified directly using the `E2E_CONFIG_PATH` environment variable. +The sample config contains comments outlining the available fields and their purpose. + There are several environment variables that alter the behaviour of the make target which will override any -options specified in your config file. +options specified in your config file. These are primarily used for CI and are not required for local development. -| Environment Variable | Description | Default Value | -|----------------------|-------------------------------------------|---------------| -| CHAIN_IMAGE | The image that will be used for the chain | ibc-go-simd | -| CHAIN_A_TAG | The tag used for chain A | latest | -| CHAIN_B_TAG | The tag used for chain B | latest | -| CHAIN_BINARY | The binary used in the container | simd | -| RELAYER_TAG | The tag used for the relayer | main | -| RELAYER_ID | The type of relayer to use (rly/hermes) | hermes | +| Environment Variable | Description | Default Value | +|----------------------|-------------------------------------------|-----------------------------| +| CHAIN_IMAGE | The image that will be used for the chain | ghcr.io/cosmos/ibc-go-simd | +| CHAIN_A_TAG | The tag used for chain A | N/A | +| CHAIN_B_TAG | The tag used for chain B | N/A | +| CHAIN_BINARY | The binary used in the container | simd | +| RELAYER_TAG | The tag used for the relayer | 1.10.0 | +| RELAYER_ID | The type of relayer to use (rly/hermes) | hermes | > Note: when running tests locally, **no images are pushed** to the `ghcr.io/cosmos/ibc-go-simd` registry. -The images which are used only exist on your machine. +> The images which are used only exist locally only. -These environment variables allow us to run tests with arbitrary versions (from branches or released) of simd -and the go relayer. +These environment variables allow us to run tests with arbitrary versions (from branches or releases) of simd and the go / hermes relayer. -Every time changes are pushed to a branch or to `main`, a new `simd` image is built and pushed [here](https://github.com/orgs/cosmos/packages?repo_name=ibc-go). +Every time changes are pushed to a branch or to `main`, a new `simd` image is built and +pushed [here](https://github.com/orgs/cosmos/packages?repo_name=ibc-go). -### Example Command +### Example of running a single test -```sh -export CHAIN_IMAGE="ghcr.io/cosmos/ibc-go-simd" -export CHAIN_A_TAG="main" -export CHAIN_BINARY="simd" +> NOTE: environment variables can be set to override one or more config file variables, but the config file can still +> be used to set defaults. -# We can also specify different values for the chains if needed. -# they will default to the same as chain a. -# export CHAIN_B_TAG="main" +```sh -export RELAYER_TAG="v2.0.0" make e2e-test entrypoint=TestInterchainAccountsTestSuite test=TestMsgSubmitTx_SuccessfulTransfer ``` If `jq` is installed, you only need to specify the `test`. -If `fzf` is also installed, you only need to run `make e2e-test` and you will be prompted with interactive test selection. +If `fzf` is also installed, you only need to run `make e2e-test` and you will be prompted with interactive test +selection. ```sh make e2e-test test=TestMsgSubmitTx_SuccessfulTransfer ``` -> Note: sometimes it can be useful to make changes to [ibctest](https://github.com/strangelove-ventures/interchaintest) when running tests locally. In order to do this, add the following line to -e2e/go.mod +> Note: sometimes it can be useful to make changes to [interchaintest](https://github.com/strangelove-ventures/interchaintest) +> when running tests locally. In order to do this, add the following line to +> e2e/go.mod -`replace github.com/strangelove-ventures/interchaintest => ../ibctest` +`replace github.com/strangelove-ventures/interchaintest => ../../interchaintest` Or point it to any local checkout you have. -### Running tests in CI - -To run tests in CI, you can checkout the ibc-go repo and provide these environment variables -to the CI task. - -[This repo](https://github.com/chatton/ibc-go-e2e-demo) contains an example of how to do this with Github Actions. - -## Code samples - -### Setup - -Every standard test will start with this. This creates two chains and a relayer, -initializes relayer accounts on both chains, establishes a connection and a channel -between the chains. - -Both chains have started, but the relayer is not yet started. - -The relayer should be started as part of the test if required. See [Starting the Relayer](#starting-the-relayer) - -```go -relayer, channelA := s.SetupChainsRelayerAndChannel(ctx, s.FeeMiddlewareChannelOptions()) -chainA, chainB := s.GetChains() -``` - -### Creating test users - -There are helper functions to easily create users on both chains. - -```go -chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) -chainBWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) -``` - -### Waiting - -We can wait for some number of blocks on the specified chains if required. - -```go -chainA, chainB := s.GetChains() -err := test.WaitForBlocks(ctx, 1, chainA, chainB) -s.Require().NoError(err) -``` - -### Query wallet balances - -We can fetch balances of wallets on specific chains. - -```go -chainABalance, err := s.GetChainANativeBalance(ctx, chainAWallet) -s.Require().NoError(err) -``` - -### Broadcasting messages - -We can broadcast arbitrary messages which are signed on behalf of users created in the test. - -This example shows a multi message transaction being broadcast on chainA and signed on behalf of chainAWallet. - -```go -relayer, channelA := s.SetupChainsRelayerAndChannel(ctx, s.FeeMiddlewareChannelOptions()) -chainA, chainB := s.GetChains() - -chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) -chainBWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) +### Example of running a full testsuite -t.Run("broadcast multi message transaction", func(t *testing.T){ - msgPayPacketFee := feetypes.NewMsgPayPacketFee(testFee, channelA.PortID, channelA.ChannelID, chainAWallet.Bech32Address(chainA.Config().Bech32Prefix), nil) - msgTransfer := transfertypes.NewMsgTransfer(channelA.PortID, channelA.ChannelID, transferAmount, chainAWallet.Bech32Address(chainA.Config().Bech32Prefix), chainBWallet.Bech32Address(chainB.Config().Bech32Prefix), clienttypes.NewHeight(1, 1000), 0) - resp, err := s.BroadcastMessages(ctx, chainA, chainAWallet, msgPayPacketFee, msgTransfer) +> NOTE: not all tests may support full parallel runs due to possible chain wide modifications such as params / gov +> proposals / chain restarts. See [When to Use t.Parallel()](#when-to-use-tparallel) for more information. - s.AssertValidTxResponse(resp) - s.Require().NoError(err) -}) +```sh +make e2e-suite entrypoint=TestTransferTestSuite ``` -### Starting the relayer +Similar to running a single test, if `jq` and `fzf` are installed you can run `make e2e-suite` and be prompted +to interactively select a test suite to run. -The relayer can be started with the following. +### Running tests outside the context of the Makefile -```go -t.Run("start relayer", func(t *testing.T) { - s.StartRelayer(relayer) -}) -``` - -### Arbitrary commands +In order to run tests outside the context of the Makefile (e.g. from an IDE) -Arbitrary commands can be executed on a given chain. +The default location for a config file will be `~/.ibc-go-e2e-config.yaml` but this can be overridden by setting the +`E2E_CONFIG_PATH` environment variable. -> Note: these commands will be fully configured to run on the chain executed on (home directory, ports configured etc.) +This should be set to the path of a valid config file you want to use, setting this env will depend on the IDE being used. -However, it is preferable to [broadcast messages](#broadcasting-messages) or use a gRPC query if possible. - -```go -stdout, stderr, err := chainA.Exec(ctx, []string{"tx", "..."}, nil) -``` - -### IBC transfer +## Test design -It is possible to send an IBC transfer in two ways. +### interchaintest -Use the ibctest `Chain` interface (this ultimately does a docker exec) +These E2E tests use the [interchaintest framework](https://github.com/strangelove-ventures/interchaintest). This framework creates chains and relayers in containers and allows for arbitrary commands to be executed in the chain containers, +as well as allowing us to broadcast arbitrary messages which are signed on behalf of a user created in the test. -```go -t.Run("send IBC transfer", func(t *testing.T) { - chainATx, err = chainA.SendIBCTransfer(ctx, channelA.ChannelID, chainAWallet.KeyName, walletAmount, nil) - s.Require().NoError(err) - s.Require().NoError(chainATx.Validate(), "chain-a ibc transfer tx is invalid") -}) -``` +### Test Suites -Broadcast a `MsgTransfer`. +In order for tests to be run in parallel, we create the chains in `SetupSuite`, and each test is in charge of +creating clients/connections/channels for itself. -```go -t.Run("send IBC transfer", func(t *testing.T){ - transferMsg := transfertypes.NewMsgTransfer(channelA.PortID, channelA.ChannelID, transferAmount, chainAWallet.Bech32Address(chainA.Config().Bech32Prefix), chainBWallet.Bech32Address(chainB.Config().Bech32Prefix), clienttypes.NewHeight(1, 1000), 0) - resp, err := s.BroadcastMessages(ctx, chainA, chainAWallet, transferMsg) - s.AssertValidTxResponse(resp) - s.Require().NoError(err) -}) -``` +This is explicitly not being done in `SetupTest` to enable maximum control and flexibility over the channel creation +params. -## Test design +### When to use t.Parallel -### interchaintest +tests should **not** be run in parallel when: -These E2E tests use the [interchaintest framework](https://github.com/strangelove-ventures/interchaintest). This framework creates chains and relayers in containers and allows for arbitrary commands to be executed in the chain containers, -as well as allowing us to broadcast arbitrary messages which are signed on behalf of a user created in the test. +- the test is modifying chain wide state such as modifying params via a gov proposal. +- the test needs to perform a chain restart. +- the test must make assertions which may not be deterministic due to other tests. (e.g. the TotalEscrowForDenom may be modified between tests) ### CI configuration @@ -240,91 +145,28 @@ In `e2e-fork.yaml`, images are not pushed to this registry, but instead remain l ## How tests are run The tests use the `matrix` feature of Github Actions. The matrix is -dynamically generated using [this command](https://github.com/cosmos/ibc-go/blob/main/cmd/build_test_matrix/main.go). +dynamically generated using [this tool](https://github.com/cosmos/ibc-go/blob/main/cmd/build_test_matrix/main.go). > Note: there is currently a limitation that all tests belonging to a test suite must be in the same file. -In order to support test functions spread in different files, we would either need to manually maintain a matrix -or update the script to account for this. The script assumes there is a single test suite per test file to avoid an overly complex -generation process. +> In order to support test functions spread in different files, we would either need to manually maintain a matrix +> or update the script to account for this. The script assumes there is a single test suite per test file to avoid an +> overly complex +> generation process. Which looks under the `e2e` directory, and creates a task for each test suite function. -### Example - -```go -// e2e/file_one_test.go -package e2e - -func TestFeeMiddlewareTestSuite(t *testing.T) { - suite.Run(t, new(FeeMiddlewareTestSuite)) -} - -type FeeMiddlewareTestSuite struct { - testsuite.E2ETestSuite -} - -func (s *FeeMiddlewareTestSuite) TestA() {} -func (s *FeeMiddlewareTestSuite) TestB() {} -func (s *FeeMiddlewareTestSuite) TestC() {} - -``` - -```go -// e2e/file_two_test.go -package e2e - -func TestTransferTestSuite(t *testing.T) { - suite.Run(t, new(TransferTestSuite)) -} - -type TransferTestSuite struct { - testsuite.E2ETestSuite -} - -func (s *TransferTestSuite) TestD() {} -func (s *TransferTestSuite) TestE() {} -func (s *TransferTestSuite) TestF() {} +This tool can be run locally to see which tests will be run in CI. -``` - -In the above example, the following would be generated. - -```json -{ - "include": [ - { - "entrypoint": "TestFeeMiddlewareTestSuite", - "test": "TestA" - }, - { - "entrypoint": "TestFeeMiddlewareTestSuite", - "test": "TestB" - }, - { - "entrypoint": "TestFeeMiddlewareTestSuite", - "test": "TestC" - }, - { - "entrypoint": "TestTransferTestSuite", - "test": "TestD" - }, - { - "entrypoint": "TestTransferTestSuite", - "test": "TestE" - }, - { - "entrypoint": "TestTransferTestSuite", - "test": "TestF" - } - ] -} +```sh +go run cmd/build_test_matrix/main.go | jq ``` This string is used to generate a test matrix in the Github Action that runs the E2E tests. -All tests will be run on different hosts. +All tests will be run on different hosts when running `make e2e-test` but `make e2e-suite` will run multiple tests +in parallel on a shared host. -### Misceleneous +### Miscellaneous ## GitHub Workflows diff --git a/e2e/sample.config.extended.yaml b/e2e/sample.config.extended.yaml new file mode 100644 index 00000000000..64b5d7a7da5 --- /dev/null +++ b/e2e/sample.config.extended.yaml @@ -0,0 +1,62 @@ +# This file contains configuration for running e2e tests. +# Many of these fields can be overridden with environment variables. +# All fields that support this have the corresponding environment variable name in a comment beside the field. + + +# | Environment Variable | Description | Default Value | +# |----------------------|-------------------------------------------|------------------------------| +# | CHAIN_IMAGE | The image that will be used for the chain | ghcr.io/cosmos/ibc-go-simd | +# | CHAIN_A_TAG | The tag used for chain A | N/A (must be set) | +# | CHAIN_B_TAG | The tag used for chain B | N/A (must be set) | +# | CHAIN_BINARY | The binary used in the container | simd | +# | RELAYER_TAG | The tag used for the relayer | 1.10.0 | +# | RELAYER_ID | The type of relayer to use (rly/hermes) | hermes | + + +# see sample.config.yaml for a bare minium configuration example. +# set env E2E_CONFIG_PATH to point to this file to use it. +--- +chains: + # the entry at index 0 corresponds to CHAIN_A +- chainId: chain-1 + numValidators: 4 + numFullNodes: 1 + image: ghcr.io/cosmos/ibc-go-simd # override with CHAIN_IMAGE + tag: main # override with CHAIN_A_TAG + binary: simd # override with CHAIN_BINARY + + # the entry at index 1 corresponds to CHAIN_B +- chainId: chain-2 + numValidators: 4 + numFullNodes: 1 + image: ghcr.io/cosmos/ibc-go-simd # override with CHAIN_IMAGE + tag: main # override with CHAIN_B_TAG + binary: simd # override with CHAIN_BINARY + +activeRelayer: hermes # override with RELAYER_ID +relayers: + - id: hermes + image: ghcr.io/informalsystems/hermes + tag: "1.10.0" + - id: rly + image: ghcr.io/cosmos/relayer + tag: "latest" + - id: hyperspace + image: ghcr.io/misko9/hyperspace + tag: "20231122v39" + +cometbft: + logLevel: info + +debug: + # setting this value to true will force log collection even if the test passes. + dumpLogs: false + # settings this value to true will keep the containers running after the test finishes. + keepContainers: true + +# Required only for upgrade tests. +# Chain A will be upgraded the specified tag. +# The plan name must be registered as an upgrade handler in the given tag. +upgrade: + planName: "" # override with CHAIN_UPGRADE_PLAN + tag: "" # override with CHAIN_UPGRADE_TAG diff --git a/e2e/sample.config.yaml b/e2e/sample.config.yaml index c8af5fa1db1..5078409239b 100644 --- a/e2e/sample.config.yaml +++ b/e2e/sample.config.yaml @@ -1,49 +1,18 @@ -# This file contains configuration for running e2e tests. -# Many of these fields can be overridden with environment variables. -# All fields that support this have the corresponding environment variable name in a comment beside the field. +# This file contains a bare minimum configuration for running e2e tests. ---- -chains: - # the entry at index 0 corresponds to CHAIN_A -- chainId: chainA-1 - numValidators: 1 - numFullNodes: 0 - image: ghcr.io/cosmos/ibc-go-simd # override with CHAIN_IMAGE - tag: main # override with CHAIN_A_TAG - binary: simd # override with CHAIN_BINARY - - # the entry at index 1 corresponds to CHAIN_B -- chainId: chainB-1 - numValidators: 1 - numFullNodes: 0 - image: ghcr.io/cosmos/ibc-go-simd # override with CHAIN_IMAGE - tag: main # override with CHAIN_B_TAG - binary: simd # override with CHAIN_BINARY - -activeRelayer: hermes # override with RELAYER_ID -relayers: - - id: hermes - image: ghcr.io/informalsystems/hermes - tag: "1.10.0" - - id: rly - image: ghcr.io/cosmos/relayer - tag: "latest" - - id: hyperspace - image: ghcr.io/misko9/hyperspace - tag: "20231122v39" +# | Environment Variable | Description | Default Value | +# |----------------------|-------------------------------------------|------------------------------| +# | CHAIN_IMAGE | The image that will be used for the chain | ghcr.io/cosmos/ibc-go-simd | +# | CHAIN_A_TAG | The tag used for chain A | N/A | +# | CHAIN_B_TAG | The tag used for chain B | N/A | +# | CHAIN_BINARY | The binary used in the container | simd | +# | RELAYER_TAG | The tag used for the relayer | 1.10.0 | +# | RELAYER_ID | The type of relayer to use (rly/hermes) | hermes | -cometbft: - logLevel: info +# see sample.config.extended.yaml for a fully configured sample. +# set env E2E_CONFIG_PATH to point to this file to use it. -debug: - # setting this value to true will force log collection even if the test passes. - dumpLogs: false - # settings this value to true will keep the containers running after the test finishes. - keepContainers: true - -# Required only for upgrade tests. -# Chain A will be upgraded the specified tag. -# The plan name must be registered as an upgrade handler in the given tag. -upgrade: - planName: "" - tag: "" +--- +chains: + - tag: main # override with CHAIN_A_TAG + - tag: main # override with CHAIN_B_TAG diff --git a/e2e/testsuite/testconfig.go b/e2e/testsuite/testconfig.go index ee1e6163218..225182db43a 100644 --- a/e2e/testsuite/testconfig.go +++ b/e2e/testsuite/testconfig.go @@ -71,7 +71,7 @@ const ( // defaultChainTag is the tag that will be used for the chains if none is specified. defaultChainTag = "main" // defaultConfigFileName is the default filename for the config file that can be used to configure - // e2e tests. See sample.config.yaml as an example for what this should look like. + // e2e tests. See sample.config.yaml or sample.config.extended.yaml as an example for what this should look like. defaultConfigFileName = ".ibc-go-e2e-config.yaml" ) @@ -233,7 +233,7 @@ func (tc TestConfig) GetChainAID() string { if tc.ChainConfigs[0].ChainID != "" { return tc.ChainConfigs[0].ChainID } - return "chainA-1" + return "chain-1" } // GetChainBID returns the chain-id for chain B. @@ -241,7 +241,7 @@ func (tc TestConfig) GetChainBID() string { if tc.ChainConfigs[1].ChainID != "" { return tc.ChainConfigs[1].ChainID } - return "chainB-1" + return "chain-2" } // GetChainName returns the name of the chain given an index. @@ -342,7 +342,44 @@ func fromFile() (TestConfig, bool) { panic(err) } - return tc, true + return populateDefaults(tc), true +} + +// populateDefaults populates default values for the test config if +// certain required fields are not specified. +func populateDefaults(tc TestConfig) TestConfig { + for i := range tc.ChainConfigs { + if tc.ChainConfigs[i].ChainID == "" { + tc.ChainConfigs[i].ChainID = fmt.Sprintf("chain-%d", i+1) + } + if tc.ChainConfigs[i].Binary == "" { + tc.ChainConfigs[i].Binary = defaultBinary + } + if tc.ChainConfigs[i].Image == "" { + tc.ChainConfigs[i].Image = getChainImage(tc.ChainConfigs[i].Binary) + } + if tc.ChainConfigs[i].NumValidators == 0 { + tc.ChainConfigs[i].NumValidators = 1 + } + } + + if tc.ActiveRelayer == "" { + tc.ActiveRelayer = relayer.Hermes + } + + if tc.RelayerConfigs == nil { + tc.RelayerConfigs = []relayer.Config{ + getDefaultRlyRelayerConfig(), + getDefaultHermesRelayerConfig(), + getDefaultHyperspaceRelayerConfig(), + } + } + + if tc.CometBFTConfig.LogLevel == "" { + tc.CometBFTConfig.LogLevel = "info" + } + + return tc } // applyEnvironmentVariableOverrides applies all environment variable changes to the config From b8f944e2b92118ce37d6f3b5344a37a367945c6f Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Thu, 1 Aug 2024 17:28:42 +0300 Subject: [PATCH 57/78] fix(transfer): add forwarded packets to genesis. (#6861) * fix: add forwarded packets to genesis. * nit: add comment, add if for checking part is as expected. --- modules/apps/transfer/keeper/export_test.go | 10 + modules/apps/transfer/keeper/genesis.go | 15 +- modules/apps/transfer/keeper/genesis_test.go | 18 + modules/apps/transfer/keeper/keeper.go | 48 +++ modules/apps/transfer/keeper/keeper_test.go | 32 ++ modules/apps/transfer/types/genesis.pb.go | 348 ++++++++++++++++-- modules/apps/transfer/types/keys.go | 6 +- .../applications/transfer/v2/genesis.proto | 10 + 8 files changed, 455 insertions(+), 32 deletions(-) diff --git a/modules/apps/transfer/keeper/export_test.go b/modules/apps/transfer/keeper/export_test.go index 468a1ddda38..399fd3967cf 100644 --- a/modules/apps/transfer/keeper/export_test.go +++ b/modules/apps/transfer/keeper/export_test.go @@ -44,6 +44,16 @@ func (k Keeper) GetForwardedPacket(ctx sdk.Context, portID, channelID string, se return k.getForwardedPacket(ctx, portID, channelID, sequence) } +// SetForwardedPacket is a wrapper around setForwardedPacket for testing purposes. +func (k Keeper) SetForwardedPacket(ctx sdk.Context, portID, channelID string, sequence uint64, packet channeltypes.Packet) { + k.setForwardedPacket(ctx, portID, channelID, sequence, packet) +} + +// GetAllForwardedPackets is a wrapper around getAllForwardedPackets for testing purposes. +func (k Keeper) GetAllForwardedPackets(ctx sdk.Context) []types.ForwardedPacket { + return k.getAllForwardedPackets(ctx) +} + // IsBlockedAddr is a wrapper around isBlockedAddr for testing purposes func (k Keeper) IsBlockedAddr(addr sdk.AccAddress) bool { return k.isBlockedAddr(addr) diff --git a/modules/apps/transfer/keeper/genesis.go b/modules/apps/transfer/keeper/genesis.go index e0267512753..4239bf3afd8 100644 --- a/modules/apps/transfer/keeper/genesis.go +++ b/modules/apps/transfer/keeper/genesis.go @@ -35,14 +35,21 @@ func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) { for _, denomEscrow := range state.TotalEscrowed { k.SetTotalEscrowForDenom(ctx, denomEscrow) } + + // Set any forwarded packets imported. + for _, forwardPacketState := range state.ForwardedPackets { + forwardKey := forwardPacketState.ForwardKey + k.setForwardedPacket(ctx, forwardKey.PortId, forwardKey.ChannelId, forwardKey.Sequence, forwardPacketState.Packet) + } } // ExportGenesis exports ibc-transfer module's portID and denom trace info into its genesis state. func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { return &types.GenesisState{ - PortId: k.GetPort(ctx), - Denoms: k.GetAllDenoms(ctx), - Params: k.GetParams(ctx), - TotalEscrowed: k.GetAllTotalEscrowed(ctx), + PortId: k.GetPort(ctx), + Denoms: k.GetAllDenoms(ctx), + Params: k.GetParams(ctx), + TotalEscrowed: k.GetAllTotalEscrowed(ctx), + ForwardedPackets: k.getAllForwardedPackets(ctx), } } diff --git a/modules/apps/transfer/keeper/genesis_test.go b/modules/apps/transfer/keeper/genesis_test.go index 61fa75ebf3c..2a44b65610d 100644 --- a/modules/apps/transfer/keeper/genesis_test.go +++ b/modules/apps/transfer/keeper/genesis_test.go @@ -8,6 +8,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v9/testing" ) func (suite *KeeperTestSuite) TestGenesis() { @@ -28,6 +31,7 @@ func (suite *KeeperTestSuite) TestGenesis() { {[]types.Hop{getHop(3), getHop(2), getHop(1), getHop(0)}, "1000000000000000"}, {[]types.Hop{getHop(4), getHop(3), getHop(2), getHop(1), getHop(0)}, "100000000000000000000"}, } + forwardPackets []types.ForwardedPacket ) for _, traceAndEscrowAmount := range traceAndEscrowAmounts { @@ -42,6 +46,17 @@ func (suite *KeeperTestSuite) TestGenesis() { suite.chainA.GetSimApp().TransferKeeper.SetTotalEscrowForDenom(suite.chainA.GetContext(), escrow) } + // Store forward packets on transfer/channel-1 and transfer/channel-2 + for _, channelID := range []string{"channel-1", "channel-2"} { + // go across '10' to test numerical order + for sequence := uint64(5); sequence <= 15; sequence++ { + packet := channeltypes.NewPacket(ibctesting.MockPacketData, sequence, ibctesting.TransferPort, channelID, "", "", clienttypes.ZeroHeight(), 0) + forwardPackets = append(forwardPackets, types.ForwardedPacket{ForwardKey: channeltypes.NewPacketID(ibctesting.TransferPort, channelID, sequence), Packet: packet}) + + suite.chainA.GetSimApp().TransferKeeper.SetForwardedPacket(suite.chainA.GetContext(), ibctesting.TransferPort, channelID, sequence, packet) + } + } + genesis := suite.chainA.GetSimApp().TransferKeeper.ExportGenesis(suite.chainA.GetContext()) suite.Require().Equal(types.PortID, genesis.PortId) @@ -56,4 +71,7 @@ func (suite *KeeperTestSuite) TestGenesis() { _, found := suite.chainA.GetSimApp().BankKeeper.GetDenomMetaData(suite.chainA.GetContext(), denom.IBCDenom()) suite.Require().True(found) } + + storedForwardedPackets := suite.chainA.GetSimApp().TransferKeeper.GetAllForwardedPackets(suite.chainA.GetContext()) + suite.Require().Equal(storedForwardedPackets, forwardPackets) } diff --git a/modules/apps/transfer/keeper/keeper.go b/modules/apps/transfer/keeper/keeper.go index 997d1e7b83f..0ce1399513d 100644 --- a/modules/apps/transfer/keeper/keeper.go +++ b/modules/apps/transfer/keeper/keeper.go @@ -337,6 +337,54 @@ func (k Keeper) deleteForwardedPacket(ctx sdk.Context, portID, channelID string, store.Delete(packetKey) } +// getAllForwardedPackets gets all forward packets stored in state. +func (k Keeper) getAllForwardedPackets(ctx sdk.Context) []types.ForwardedPacket { + var packets []types.ForwardedPacket + k.iterateForwardedPackets(ctx, func(packet types.ForwardedPacket) bool { + packets = append(packets, packet) + return false + }) + + return packets +} + +// iterateForwardedPackets iterates over the forward packets in the store and performs a callback function. +func (k Keeper) iterateForwardedPackets(ctx sdk.Context, cb func(packet types.ForwardedPacket) bool) { + store := ctx.KVStore(k.storeKey) + iterator := storetypes.KVStorePrefixIterator(store, types.ForwardedPacketKey) + + defer sdk.LogDeferred(ctx.Logger(), func() error { return iterator.Close() }) + for ; iterator.Valid(); iterator.Next() { + var forwardPacket types.ForwardedPacket + k.cdc.MustUnmarshal(iterator.Value(), &forwardPacket.Packet) + + // Iterator key consists of types.ForwardedPacketKey/portID/channelID/sequence + parts := strings.Split(string(iterator.Key()), "/") + if len(parts) != 4 { + panic(fmt.Errorf("key path should always have 4 elements")) + } + if parts[0] != string(types.ForwardedPacketKey) { + panic(fmt.Errorf("key path does not start with expected prefix: %s", types.ForwardedPacketKey)) + } + + portID, channelID := parts[1], parts[2] + if err := host.PortIdentifierValidator(portID); err != nil { + panic(fmt.Errorf("port identifier validation failed while parsing forward key path")) + } + if err := host.ChannelIdentifierValidator(channelID); err != nil { + panic(fmt.Errorf("channel identifier validation failed while parsing forward key path")) + } + + forwardPacket.ForwardKey.Sequence = sdk.BigEndianToUint64([]byte(parts[3])) + forwardPacket.ForwardKey.ChannelId = channelID + forwardPacket.ForwardKey.PortId = portID + + if cb(forwardPacket) { + break + } + } +} + // IsBlockedAddr checks if the given address is allowed to send or receive tokens. // The module account is always allowed to send and receive tokens. func (k Keeper) isBlockedAddr(addr sdk.AccAddress) bool { diff --git a/modules/apps/transfer/keeper/keeper_test.go b/modules/apps/transfer/keeper/keeper_test.go index ce8a7dcd1d7..683bf8175ab 100644 --- a/modules/apps/transfer/keeper/keeper_test.go +++ b/modules/apps/transfer/keeper/keeper_test.go @@ -17,7 +17,9 @@ import ( "github.com/cosmos/ibc-go/v9/modules/apps/transfer/keeper" "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" channelkeeper "github.com/cosmos/ibc-go/v9/modules/core/04-channel/keeper" + channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" ibctesting "github.com/cosmos/ibc-go/v9/testing" ) @@ -291,6 +293,36 @@ func (suite *KeeperTestSuite) TestGetAllDenomEscrows() { } } +func (suite *KeeperTestSuite) TestGetAllForwardedPackets() { + suite.SetupTest() + + // Store forward packets on transfer/channel-1 and transfer/channel-2 + for _, channelID := range []string{"channel-1", "channel-2"} { + // go across '10' to test numerical order + for sequence := uint64(5); sequence <= 15; sequence++ { + packet := channeltypes.NewPacket(ibctesting.MockPacketData, sequence, ibctesting.TransferPort, channelID, "", "", clienttypes.ZeroHeight(), 0) + suite.chainA.GetSimApp().TransferKeeper.SetForwardedPacket(suite.chainA.GetContext(), ibctesting.TransferPort, channelID, sequence, packet) + } + } + + packets := suite.chainA.GetSimApp().TransferKeeper.GetAllForwardedPackets(suite.chainA.GetContext()) + // Assert each packets is as expected + i := 0 + for _, channelID := range []string{"channel-1", "channel-2"} { + for sequence := uint64(5); sequence <= 15; sequence++ { + forwardedPacket := packets[i] + + expForwardKey := channeltypes.NewPacketID(ibctesting.TransferPort, channelID, sequence) + suite.Require().Equal(forwardedPacket.ForwardKey, expForwardKey) + + expPacket := channeltypes.NewPacket(ibctesting.MockPacketData, sequence, ibctesting.TransferPort, channelID, "", "", clienttypes.ZeroHeight(), 0) + suite.Require().Equal(forwardedPacket.Packet, expPacket) + + i++ + } + } +} + func (suite *KeeperTestSuite) TestParams() { testCases := []struct { name string diff --git a/modules/apps/transfer/types/genesis.pb.go b/modules/apps/transfer/types/genesis.pb.go index 0fb1afc6fe9..e2ca67140b9 100644 --- a/modules/apps/transfer/types/genesis.pb.go +++ b/modules/apps/transfer/types/genesis.pb.go @@ -9,6 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + types1 "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" io "io" math "math" math_bits "math/bits" @@ -33,6 +34,9 @@ type GenesisState struct { // total_escrowed contains the total amount of tokens escrowed // by the transfer module TotalEscrowed github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,4,rep,name=total_escrowed,json=totalEscrowed,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"total_escrowed"` + // forwarded_packets contains the forwarded packets stored as part of the + // packet forwarding lifecycle + ForwardedPackets []ForwardedPacket `protobuf:"bytes,5,rep,name=forwarded_packets,json=forwardedPackets,proto3" json:"forwarded_packets"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -96,8 +100,69 @@ func (m *GenesisState) GetTotalEscrowed() github_com_cosmos_cosmos_sdk_types.Coi return nil } +func (m *GenesisState) GetForwardedPackets() []ForwardedPacket { + if m != nil { + return m.ForwardedPackets + } + return nil +} + +// ForwardedPacket defines the genesis type necessary to retrieve and store forwarded packets. +type ForwardedPacket struct { + ForwardKey types1.PacketId `protobuf:"bytes,1,opt,name=forward_key,json=forwardKey,proto3" json:"forward_key"` + Packet types1.Packet `protobuf:"bytes,2,opt,name=packet,proto3" json:"packet"` +} + +func (m *ForwardedPacket) Reset() { *m = ForwardedPacket{} } +func (m *ForwardedPacket) String() string { return proto.CompactTextString(m) } +func (*ForwardedPacket) ProtoMessage() {} +func (*ForwardedPacket) Descriptor() ([]byte, []int) { + return fileDescriptor_62efebb47a9093ed, []int{1} +} +func (m *ForwardedPacket) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ForwardedPacket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ForwardedPacket.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ForwardedPacket) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForwardedPacket.Merge(m, src) +} +func (m *ForwardedPacket) XXX_Size() int { + return m.Size() +} +func (m *ForwardedPacket) XXX_DiscardUnknown() { + xxx_messageInfo_ForwardedPacket.DiscardUnknown(m) +} + +var xxx_messageInfo_ForwardedPacket proto.InternalMessageInfo + +func (m *ForwardedPacket) GetForwardKey() types1.PacketId { + if m != nil { + return m.ForwardKey + } + return types1.PacketId{} +} + +func (m *ForwardedPacket) GetPacket() types1.Packet { + if m != nil { + return m.Packet + } + return types1.Packet{} +} + func init() { proto.RegisterType((*GenesisState)(nil), "ibc.applications.transfer.v2.GenesisState") + proto.RegisterType((*ForwardedPacket)(nil), "ibc.applications.transfer.v2.ForwardedPacket") } func init() { @@ -105,31 +170,38 @@ func init() { } var fileDescriptor_62efebb47a9093ed = []byte{ - // 378 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0x4e, 0xdb, 0x40, - 0x10, 0xb5, 0x93, 0xc8, 0x55, 0x9d, 0x36, 0x07, 0xab, 0x52, 0xdd, 0xa8, 0x72, 0xa2, 0xb6, 0x07, - 0xab, 0x55, 0x76, 0x6b, 0x73, 0x40, 0x5c, 0x0d, 0x08, 0x21, 0x2e, 0x60, 0x6e, 0x5c, 0xa2, 0xf5, - 0x7a, 0x31, 0xab, 0xc4, 0x1e, 0xcb, 0xbb, 0x31, 0xe2, 0x2f, 0xf8, 0x0e, 0xc4, 0x87, 0xe4, 0x98, - 0x23, 0x27, 0x40, 0xc9, 0x8f, 0x20, 0xaf, 0x1d, 0x14, 0x09, 0xc9, 0xa7, 0x9d, 0xd9, 0x7d, 0xf3, - 0xde, 0xec, 0x7b, 0xe6, 0x5f, 0x1e, 0x51, 0x4c, 0xf2, 0x7c, 0xce, 0x29, 0x91, 0x1c, 0x32, 0x81, - 0x65, 0x41, 0x32, 0x71, 0xcd, 0x0a, 0x5c, 0xfa, 0x38, 0x61, 0x19, 0x13, 0x5c, 0xa0, 0xbc, 0x00, - 0x09, 0xd6, 0x4f, 0x1e, 0x51, 0xb4, 0x8b, 0x45, 0x5b, 0x2c, 0x2a, 0xfd, 0xe1, 0xbf, 0x16, 0x26, - 0xef, 0xbd, 0xae, 0xa9, 0x86, 0x6e, 0xab, 0xac, 0x84, 0x19, 0xcb, 0x1a, 0xa4, 0x43, 0x41, 0xa4, - 0x20, 0x70, 0x44, 0x04, 0xc3, 0xa5, 0x17, 0x31, 0x49, 0x3c, 0x4c, 0x81, 0x6f, 0xdf, 0xbf, 0x25, - 0x90, 0x80, 0x2a, 0x71, 0x55, 0xd5, 0xb7, 0xbf, 0x1e, 0x3b, 0xe6, 0x97, 0x93, 0x7a, 0xf9, 0x4b, - 0x49, 0x24, 0xb3, 0xbe, 0x9b, 0x9f, 0x72, 0x28, 0xe4, 0x94, 0xc7, 0xb6, 0x3e, 0xd6, 0xdd, 0xcf, - 0xa1, 0x51, 0xb5, 0xa7, 0xb1, 0x75, 0x66, 0x1a, 0x31, 0xcb, 0x20, 0x15, 0x76, 0x67, 0xdc, 0x75, - 0xfb, 0xfe, 0x6f, 0xd4, 0xf6, 0x4b, 0x74, 0x54, 0x61, 0x83, 0xc1, 0xf2, 0x79, 0xa4, 0x3d, 0xbc, - 0x8c, 0x0c, 0xd5, 0x8a, 0xb0, 0xa1, 0xb0, 0x02, 0xd3, 0xc8, 0x49, 0x41, 0x52, 0x61, 0x77, 0xc7, - 0xba, 0xdb, 0xf7, 0xff, 0xb4, 0x91, 0x79, 0xe8, 0x5c, 0x61, 0x83, 0x5e, 0xc5, 0x16, 0x36, 0x93, - 0x56, 0x61, 0x0e, 0x24, 0x48, 0x32, 0x9f, 0x32, 0x41, 0x0b, 0xb8, 0x65, 0xb1, 0xdd, 0x53, 0x8b, - 0xfd, 0x40, 0xb5, 0x13, 0xa8, 0x72, 0x02, 0x35, 0x4e, 0xa0, 0x43, 0xe0, 0x59, 0xf0, 0xbf, 0x59, - 0xc7, 0x4d, 0xb8, 0xbc, 0x59, 0x44, 0x88, 0x42, 0x8a, 0x1b, 0xdb, 0xea, 0x63, 0x22, 0xe2, 0x19, - 0x96, 0x77, 0x39, 0x13, 0x6a, 0x40, 0x84, 0x5f, 0x95, 0xc4, 0x71, 0xa3, 0x10, 0x5c, 0x2c, 0xd7, - 0x8e, 0xbe, 0x5a, 0x3b, 0xfa, 0xeb, 0xda, 0xd1, 0xef, 0x37, 0x8e, 0xb6, 0xda, 0x38, 0xda, 0xd3, - 0xc6, 0xd1, 0xae, 0xf6, 0x3f, 0x52, 0xf2, 0x88, 0x4e, 0x12, 0xc0, 0xe5, 0x01, 0x4e, 0x21, 0x5e, - 0xcc, 0x99, 0xa8, 0x82, 0xdc, 0x09, 0x50, 0xe9, 0x44, 0x86, 0x0a, 0x62, 0xef, 0x2d, 0x00, 0x00, - 0xff, 0xff, 0x87, 0x4d, 0x84, 0xc3, 0x61, 0x02, 0x00, 0x00, + // 485 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0xc7, 0x9b, 0x6d, 0x04, 0xe1, 0xc2, 0x80, 0x08, 0x89, 0x30, 0x20, 0x2b, 0x83, 0x43, 0x04, + 0xaa, 0x4d, 0xc3, 0x01, 0xed, 0x5a, 0x06, 0x68, 0xda, 0x65, 0x94, 0x1b, 0x97, 0xe2, 0xd8, 0x6e, + 0x66, 0xb5, 0xc9, 0x8b, 0x6c, 0xaf, 0x53, 0xbf, 0x04, 0x42, 0x7c, 0x0c, 0x3e, 0xc9, 0x8e, 0x3b, + 0x72, 0x02, 0xd4, 0x7e, 0x11, 0x64, 0xc7, 0x85, 0x01, 0x52, 0x4e, 0x7d, 0xcf, 0xfd, 0xff, 0xff, + 0xcf, 0xfe, 0xe5, 0xa1, 0xa7, 0x32, 0x67, 0x84, 0xd6, 0xf5, 0x4c, 0x32, 0x6a, 0x24, 0x54, 0x9a, + 0x18, 0x45, 0x2b, 0x3d, 0x11, 0x8a, 0xcc, 0x33, 0x52, 0x88, 0x4a, 0x68, 0xa9, 0x71, 0xad, 0xc0, + 0x40, 0xf4, 0x40, 0xe6, 0x0c, 0x5f, 0xd6, 0xe2, 0xb5, 0x16, 0xcf, 0xb3, 0x9d, 0x67, 0x2d, 0x49, + 0x83, 0xdf, 0x75, 0x13, 0xb5, 0x93, 0xb6, 0x8e, 0x35, 0x30, 0x15, 0x95, 0x57, 0x3e, 0xb2, 0x4a, + 0x06, 0x4a, 0x10, 0x76, 0x42, 0xab, 0x4a, 0xcc, 0x6c, 0x9a, 0x2f, 0xbd, 0x24, 0x61, 0xa0, 0x4b, + 0xd0, 0x24, 0xa7, 0x5a, 0x90, 0xf9, 0x20, 0x17, 0x86, 0x0e, 0x08, 0x03, 0xb9, 0x8e, 0xb8, 0x53, + 0x40, 0x01, 0xae, 0x24, 0xb6, 0x6a, 0x4e, 0xf7, 0x3e, 0x6d, 0xa2, 0xeb, 0x6f, 0x9b, 0xf7, 0xbd, + 0x37, 0xd4, 0x88, 0xe8, 0x2e, 0xba, 0x5a, 0x83, 0x32, 0x63, 0xc9, 0xe3, 0xa0, 0x17, 0xa4, 0xd7, + 0x46, 0xa1, 0x6d, 0x0f, 0x79, 0x74, 0x84, 0x42, 0x2e, 0x2a, 0x28, 0x75, 0xbc, 0xd1, 0xdb, 0x4c, + 0xbb, 0xd9, 0x63, 0xdc, 0x06, 0x02, 0x1f, 0x58, 0xed, 0x70, 0xfb, 0xfc, 0xfb, 0x6e, 0xe7, 0xeb, + 0x8f, 0xdd, 0xd0, 0xb5, 0x7a, 0xe4, 0x23, 0xa2, 0x21, 0x0a, 0x6b, 0xaa, 0x68, 0xa9, 0xe3, 0xcd, + 0x5e, 0x90, 0x76, 0xb3, 0x27, 0x6d, 0x61, 0x03, 0x7c, 0xec, 0xb4, 0xc3, 0x2d, 0x9b, 0x36, 0xf2, + 0xce, 0x48, 0xa1, 0x6d, 0x03, 0x86, 0xce, 0xc6, 0x42, 0x33, 0x05, 0x67, 0x82, 0xc7, 0x5b, 0xee, + 0x62, 0xf7, 0x70, 0x43, 0x02, 0x5b, 0x12, 0xd8, 0x93, 0xc0, 0xaf, 0x40, 0x56, 0xc3, 0xe7, 0xfe, + 0x3a, 0x69, 0x21, 0xcd, 0xc9, 0x69, 0x8e, 0x19, 0x94, 0xc4, 0x63, 0x6b, 0x7e, 0xfa, 0x9a, 0x4f, + 0x89, 0x59, 0xd4, 0x42, 0x3b, 0x83, 0x1e, 0xdd, 0x70, 0x23, 0x5e, 0xfb, 0x09, 0xd1, 0x47, 0x74, + 0x7b, 0x02, 0xea, 0x8c, 0x2a, 0x2e, 0xf8, 0xb8, 0xa6, 0x6c, 0x2a, 0x8c, 0x8e, 0xaf, 0xb8, 0xb1, + 0xfd, 0x76, 0x1e, 0x6f, 0xd6, 0xb6, 0x63, 0xe7, 0xf2, 0x6f, 0xb9, 0x35, 0xf9, 0xfb, 0x58, 0xef, + 0x7d, 0x09, 0xd0, 0xcd, 0x7f, 0xb4, 0xd1, 0x01, 0xea, 0x7a, 0xdd, 0x78, 0x2a, 0x16, 0xee, 0xbb, + 0x74, 0xb3, 0x87, 0x6e, 0x9e, 0xdd, 0x09, 0xbc, 0x5e, 0x04, 0x47, 0xca, 0x3a, 0x0e, 0xb9, 0xcf, + 0x47, 0xde, 0x77, 0x24, 0x16, 0xd1, 0xbe, 0x65, 0x6e, 0xff, 0x8d, 0x37, 0x5c, 0xc0, 0xfd, 0x96, + 0x80, 0x3f, 0xa8, 0x5d, 0xf7, 0xee, 0x7c, 0x99, 0x04, 0x17, 0xcb, 0x24, 0xf8, 0xb9, 0x4c, 0x82, + 0xcf, 0xab, 0xa4, 0x73, 0xb1, 0x4a, 0x3a, 0xdf, 0x56, 0x49, 0xe7, 0xc3, 0xcb, 0xff, 0x49, 0xca, + 0x9c, 0xf5, 0x0b, 0x20, 0xf3, 0x7d, 0x52, 0x02, 0x3f, 0x9d, 0x09, 0x6d, 0x57, 0xfc, 0xd2, 0x6a, + 0x3b, 0xbc, 0x79, 0xe8, 0xf6, 0xef, 0xc5, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x97, 0x02, + 0x93, 0x7b, 0x03, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -152,6 +224,20 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ForwardedPackets) > 0 { + for iNdEx := len(m.ForwardedPackets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ForwardedPackets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } if len(m.TotalEscrowed) > 0 { for iNdEx := len(m.TotalEscrowed) - 1; iNdEx >= 0; iNdEx-- { { @@ -200,6 +286,49 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ForwardedPacket) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ForwardedPacket) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ForwardedPacket) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ForwardKey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { offset -= sovGenesis(v) base := offset @@ -235,6 +364,25 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } + if len(m.ForwardedPackets) > 0 { + for _, e := range m.ForwardedPackets { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *ForwardedPacket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ForwardKey.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = m.Packet.Size() + n += 1 + l + sovGenesis(uint64(l)) return n } @@ -406,6 +554,156 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForwardedPackets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ForwardedPackets = append(m.ForwardedPackets, ForwardedPacket{}) + if err := m.ForwardedPackets[len(m.ForwardedPackets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ForwardedPacket) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ForwardedPacket: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ForwardedPacket: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForwardKey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ForwardKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/modules/apps/transfer/types/keys.go b/modules/apps/transfer/types/keys.go index 34369e3b051..23a53f2ea46 100644 --- a/modules/apps/transfer/types/keys.go +++ b/modules/apps/transfer/types/keys.go @@ -53,8 +53,8 @@ var ( DenomTraceKey = []byte{0x02} // DenomKey defines the key to store the token denomination in store DenomKey = []byte{0x03} - // forwardPacketKey defines the key to store the forwarded packet in store - forwardPacketKey = []byte{0x04} + // ForwardedPacketKey defines the key to store the forwarded packet in store + ForwardedPacketKey = []byte{0x04} // SupportedVersions defines all versions that are supported by the module SupportedVersions = []string{V2, V1} @@ -85,5 +85,5 @@ func TotalEscrowForDenomKey(denom string) []byte { // PacketForwardKey returns the store key under which the forwarded packet is stored // for the provided portID, channelID, and packet sequence. func PacketForwardKey(portID, channelID string, sequence uint64) []byte { - return []byte(fmt.Sprintf("%s/%s/%s/%s", forwardPacketKey, portID, channelID, sdk.Uint64ToBigEndian(sequence))) + return []byte(fmt.Sprintf("%s/%s/%s/%s", ForwardedPacketKey, portID, channelID, sdk.Uint64ToBigEndian(sequence))) } diff --git a/proto/ibc/applications/transfer/v2/genesis.proto b/proto/ibc/applications/transfer/v2/genesis.proto index 3ebc3559e96..6b3545d2f39 100644 --- a/proto/ibc/applications/transfer/v2/genesis.proto +++ b/proto/ibc/applications/transfer/v2/genesis.proto @@ -6,6 +6,7 @@ option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; import "ibc/applications/transfer/v1/transfer.proto"; import "ibc/applications/transfer/v2/token.proto"; +import "ibc/core/channel/v1/channel.proto"; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; @@ -18,4 +19,13 @@ message GenesisState { // by the transfer module repeated cosmos.base.v1beta1.Coin total_escrowed = 4 [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; + // forwarded_packets contains the forwarded packets stored as part of the + // packet forwarding lifecycle + repeated ForwardedPacket forwarded_packets = 5 [(gogoproto.nullable) = false]; +} + +// ForwardedPacket defines the genesis type necessary to retrieve and store forwarded packets. +message ForwardedPacket { + ibc.core.channel.v1.PacketId forward_key = 1 [(gogoproto.nullable) = false]; + ibc.core.channel.v1.Packet packet = 2 [(gogoproto.nullable) = false]; } From f4eba717194056d2b6c45d0d04893774eebf389b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 1 Aug 2024 23:51:18 +0200 Subject: [PATCH 58/78] refactor!: remove 24-host path function in favour of sybling key functions (#7016) * refactor: remove all Path functions from 24-host in favour of Key functions * docs: migration + changelog * Update docs/docs/05-migrations/13-v8-to-v9.md * lint --- CHANGELOG.md | 1 + docs/docs/05-migrations/13-v8-to-v9.md | 5 ++ modules/core/04-channel/keeper/grpc_query.go | 4 +- modules/core/04-channel/keeper/keeper.go | 4 +- modules/core/24-host/channel_keys.go | 33 +++++++-- modules/core/24-host/channel_paths.go | 46 ------------- modules/core/24-host/client_keys.go | 18 +++-- modules/core/24-host/client_paths.go | 49 ------------- modules/core/24-host/connection_keys.go | 11 ++- modules/core/24-host/connection_paths.go | 18 ----- modules/core/24-host/packet_keys.go | 47 ++++++++++--- modules/core/24-host/packet_paths.go | 72 -------------------- modules/core/24-host/parse_test.go | 6 +- 13 files changed, 104 insertions(+), 210 deletions(-) delete mode 100644 modules/core/24-host/channel_paths.go delete mode 100644 modules/core/24-host/client_paths.go delete mode 100644 modules/core/24-host/connection_paths.go delete mode 100644 modules/core/24-host/packet_paths.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 0dc1dec2208..a876b3a9fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -76,6 +76,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (light-clients/06-solomachine) [\#6888](https://github.com/cosmos/ibc-go/pull/6888) Remove `TypeClientMisbehaviour` constant and the `Type` method on `Misbehaviour`. * (light-clients/06-solomachine, light-clients/07-tendermint) [\#6891](https://github.com/cosmos/ibc-go/pull/6891) The `VerifyMembership` and `VerifyNonMembership` functions of solomachine's `ClientState` have been made private. The `VerifyMembership`, `VerifyNonMembership`, `GetTimestampAtHeight`, `Status` and `Initialize` functions of tendermint's `ClientState` have been made private. * (core/04-channel) [\#6902](https://github.com/cosmos/ibc-go/pull/6902) Add channel version to core application callbacks. +* (core/24-host) [\#6882](https://github.com/cosmos/ibc-go/issues/6882) All functions ending in `Path` have been removed from 24-host in favour of their sybling functions ending in `Key`. ### State Machine Breaking diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index e06b79e3b44..1a4e2f26820 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -20,6 +20,7 @@ There are four sections based on the four potential user groups of this document - [04-channel](#04-channel) - [05-port](#05-port) - [23-commitment](#23-commitment) + - [24-host](#24-host) - [IBC Apps](#ibc-apps) - [ICS20 - Transfer](#ics20---transfer) - [ICS20 v2](#ics20-v2) @@ -195,6 +196,10 @@ type PacketDataUnmarshaler interface { - The [`MerklePath` type](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/23-commitment/types/commitment.pb.go#L113-L119) has been deprecated and a new [`commitment.v2.MerklePath` type](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/23-commitment/types/v2/commitment.pb.go#L25-L30) has been introduced in [#6644](https://github.com/cosmos/ibc-go/pull/6644). The new `commitment.v2.MerklePath` contains `repeated bytes` in favour of `repeated string`. This allows users to prove values stored under keys which contain non-utf8 encoded symbols. As a result, changes have been made to the 02-client `Query` service and 08-wasm contract API messages for JSON blobs. See [02-client](#02-client) and [08-wasm](#08-wasm), respectively. - The `commitment.v1.MerklePath` type has been removed and a new `commitment.v2.MerklePath` type has been introduced in [#6644](https://github.com/cosmos/ibc-go/pull/6644). The new `commitment.v2.MerklePath` contains `repeated bytes` in favour of `repeated string`. This allows users to prove values stored under keys which contain non-utf8 encoded symbols. As a result, changes have been made to the 02-client `Query` service and 08-wasm contract API messages for JSON blobs. See [02-client](#02-client) and [08-wasm](#08-wasm), respectively. +### 24-host + +All functions ending with `Path` naming have been removed in favour of their sybling function which ends in `Key`. + ## IBC Apps ### ICS20 - Transfer diff --git a/modules/core/04-channel/keeper/grpc_query.go b/modules/core/04-channel/keeper/grpc_query.go index ffc70ef655c..3d03f8f9088 100644 --- a/modules/core/04-channel/keeper/grpc_query.go +++ b/modules/core/04-channel/keeper/grpc_query.go @@ -266,7 +266,7 @@ func (q *queryServer) PacketCommitments(c context.Context, req *types.QueryPacke ) } var commitments []*types.PacketState - store := prefix.NewStore(ctx.KVStore(q.storeKey), []byte(host.PacketCommitmentPrefixPath(req.PortId, req.ChannelId))) + store := prefix.NewStore(ctx.KVStore(q.storeKey), host.PacketCommitmentPrefixKey(req.PortId, req.ChannelId)) pageRes, err := query.Paginate(store, req.Pagination, func(key, value []byte) error { keySplit := strings.Split(string(key), "/") @@ -370,7 +370,7 @@ func (q *queryServer) PacketAcknowledgements(c context.Context, req *types.Query ) } var acks []*types.PacketState - store := prefix.NewStore(ctx.KVStore(q.storeKey), []byte(host.PacketAcknowledgementPrefixPath(req.PortId, req.ChannelId))) + store := prefix.NewStore(ctx.KVStore(q.storeKey), host.PacketAcknowledgementPrefixKey(req.PortId, req.ChannelId)) // if a list of packet sequences is provided then query for each specific ack and return a list <= len(req.PacketCommitmentSequences) // otherwise, maintain previous behaviour and perform paginated query diff --git a/modules/core/04-channel/keeper/keeper.go b/modules/core/04-channel/keeper/keeper.go index a362715230e..33f9e6d2856 100644 --- a/modules/core/04-channel/keeper/keeper.go +++ b/modules/core/04-channel/keeper/keeper.go @@ -332,7 +332,7 @@ func (k *Keeper) GetAllPacketCommitments(ctx sdk.Context) (commitments []types.P // true, the iterator will close and stop. func (k *Keeper) IteratePacketCommitmentAtChannel(ctx sdk.Context, portID, channelID string, cb func(_, _ string, sequence uint64, hash []byte) bool) { store := ctx.KVStore(k.storeKey) - iterator := storetypes.KVStorePrefixIterator(store, []byte(host.PacketCommitmentPrefixPath(portID, channelID))) + iterator := storetypes.KVStorePrefixIterator(store, host.PacketCommitmentPrefixKey(portID, channelID)) k.iterateHashes(ctx, iterator, cb) } @@ -629,7 +629,7 @@ func (Keeper) iterateHashes(ctx sdk.Context, iterator db.Iterator, cb func(portI // HasInflightPackets returns true if there are packet commitments stored at the specified // port and channel, and false otherwise. func (k *Keeper) HasInflightPackets(ctx sdk.Context, portID, channelID string) bool { - iterator := storetypes.KVStorePrefixIterator(ctx.KVStore(k.storeKey), []byte(host.PacketCommitmentPrefixPath(portID, channelID))) + iterator := storetypes.KVStorePrefixIterator(ctx.KVStore(k.storeKey), host.PacketCommitmentPrefixKey(portID, channelID)) defer sdk.LogDeferred(ctx.Logger(), func() error { return iterator.Close() }) return iterator.Valid() diff --git a/modules/core/24-host/channel_keys.go b/modules/core/24-host/channel_keys.go index f4eb589993f..a6d3cee060c 100644 --- a/modules/core/24-host/channel_keys.go +++ b/modules/core/24-host/channel_keys.go @@ -1,21 +1,46 @@ package host +import "fmt" + +const ( + KeyChannelEndPrefix = "channelEnds" + KeyChannelPrefix = "channels" + KeyChannelUpgradePrefix = "channelUpgrades" + KeyUpgradePrefix = "upgrades" + KeyUpgradeErrorPrefix = "upgradeError" + KeyCounterpartyUpgrade = "counterpartyUpgrade" + KeyChannelCapabilityPrefix = "capabilities" +) + +// ICS04 +// The following paths are the keys to the store as defined in https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#store-paths + // ChannelKey returns the store key for a particular channel func ChannelKey(portID, channelID string) []byte { - return []byte(ChannelPath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s", KeyChannelEndPrefix, channelPath(portID, channelID))) +} + +// ChannelCapabilityPath defines the path under which capability keys associated +// with a channel are stored +func ChannelCapabilityPath(portID, channelID string) string { + return fmt.Sprintf("%s/%s", KeyChannelCapabilityPrefix, channelPath(portID, channelID)) } // ChannelUpgradeErrorKey returns the store key for a particular channelEnd used to stor the ErrorReceipt in the case that a chain does not accept the proposed upgrade func ChannelUpgradeErrorKey(portID, channelID string) []byte { - return []byte(ChannelUpgradeErrorPath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s/%s", KeyChannelUpgradePrefix, KeyUpgradeErrorPrefix, channelPath(portID, channelID))) } // ChannelUpgradeKey returns the store key for a particular channel upgrade attempt func ChannelUpgradeKey(portID, channelID string) []byte { - return []byte(ChannelUpgradePath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s/%s", KeyChannelUpgradePrefix, KeyUpgradePrefix, channelPath(portID, channelID))) } // ChannelCounterpartyUpgradeKey returns the store key for the upgrade used on the counterparty channel. func ChannelCounterpartyUpgradeKey(portID, channelID string) []byte { - return []byte(ChannelCounterpartyUpgradePath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s/%s", KeyChannelUpgradePrefix, KeyCounterpartyUpgrade, channelPath(portID, channelID))) +} + +func channelPath(portID, channelID string) string { + return fmt.Sprintf("%s/%s/%s/%s", KeyPortPrefix, portID, KeyChannelPrefix, channelID) } diff --git a/modules/core/24-host/channel_paths.go b/modules/core/24-host/channel_paths.go deleted file mode 100644 index a4a7ba6461a..00000000000 --- a/modules/core/24-host/channel_paths.go +++ /dev/null @@ -1,46 +0,0 @@ -package host - -import "fmt" - -const ( - KeyChannelEndPrefix = "channelEnds" - KeyChannelPrefix = "channels" - KeyChannelUpgradePrefix = "channelUpgrades" - KeyUpgradePrefix = "upgrades" - KeyUpgradeErrorPrefix = "upgradeError" - KeyCounterpartyUpgrade = "counterpartyUpgrade" - KeyChannelCapabilityPrefix = "capabilities" -) - -// ICS04 -// The following paths are the keys to the store as defined in https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#store-paths - -// ChannelPath defines the path under which channels are stored -func ChannelPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s", KeyChannelEndPrefix, channelPath(portID, channelID)) -} - -// ChannelCapabilityPath defines the path under which capability keys associated -// with a channel are stored -func ChannelCapabilityPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s", KeyChannelCapabilityPrefix, channelPath(portID, channelID)) -} - -// ChannelUpgradeErrorPath defines the path under which the ErrorReceipt is stored in the case that a chain does not accept the proposed upgrade -func ChannelUpgradeErrorPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s/%s", KeyChannelUpgradePrefix, KeyUpgradeErrorPrefix, channelPath(portID, channelID)) -} - -// ChannelUpgradePath defines the path which stores the information related to an upgrade attempt -func ChannelUpgradePath(portID, channelID string) string { - return fmt.Sprintf("%s/%s/%s", KeyChannelUpgradePrefix, KeyUpgradePrefix, channelPath(portID, channelID)) -} - -// ChannelCounterpartyUpgradePath defines the path under which the upgrade used on the counterparty channel is stored. -func ChannelCounterpartyUpgradePath(portID, channelID string) string { - return fmt.Sprintf("%s/%s/%s", KeyChannelUpgradePrefix, KeyCounterpartyUpgrade, channelPath(portID, channelID)) -} - -func channelPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s/%s/%s", KeyPortPrefix, portID, KeyChannelPrefix, channelID) -} diff --git a/modules/core/24-host/client_keys.go b/modules/core/24-host/client_keys.go index d2bc3260bd1..ad80cbae63a 100644 --- a/modules/core/24-host/client_keys.go +++ b/modules/core/24-host/client_keys.go @@ -1,20 +1,30 @@ package host import ( + "fmt" + "github.com/cosmos/ibc-go/v9/modules/core/exported" ) +// KeyClientStorePrefix defines the KVStore key prefix for IBC clients +var KeyClientStorePrefix = []byte("clients") + +const ( + KeyClientState = "clientState" + KeyConsensusStatePrefix = "consensusStates" +) + // FullClientKey returns the full path of specific client path in the format: // "clients/{clientID}/{path}" as a byte array. func FullClientKey(clientID string, path []byte) []byte { - return []byte(FullClientPath(clientID, string(path))) + return []byte(fmt.Sprintf("%s/%s/%s", KeyClientStorePrefix, clientID, path)) } // PrefixedClientStoreKey returns a key which can be used for prefixed // key store iteration. The prefix may be a clientType, clientID, or any // valid key prefix which may be concatenated with the client store constant. func PrefixedClientStoreKey(prefix []byte) []byte { - return []byte(PrefixedClientStorePath(prefix)) + return []byte(fmt.Sprintf("%s/%s", KeyClientStorePrefix, prefix)) } // FullClientStateKey takes a client identifier and returns a Key under which to store a @@ -32,11 +42,11 @@ func ClientStateKey() []byte { // FullConsensusStateKey returns the store key for the consensus state of a particular // client. func FullConsensusStateKey(clientID string, height exported.Height) []byte { - return []byte(FullConsensusStatePath(clientID, height)) + return FullClientKey(clientID, ConsensusStateKey(height)) } // ConsensusStateKey returns the store key for a the consensus state of a particular // client stored in a client prefixed store. func ConsensusStateKey(height exported.Height) []byte { - return []byte(ConsensusStatePath(height)) + return []byte(fmt.Sprintf("%s/%s", KeyConsensusStatePrefix, height)) } diff --git a/modules/core/24-host/client_paths.go b/modules/core/24-host/client_paths.go deleted file mode 100644 index f307a866fc0..00000000000 --- a/modules/core/24-host/client_paths.go +++ /dev/null @@ -1,49 +0,0 @@ -package host - -import ( - "fmt" - - "github.com/cosmos/ibc-go/v9/modules/core/exported" -) - -// KeyClientStorePrefix defines the KVStore key prefix for IBC clients -var KeyClientStorePrefix = []byte("clients") - -const ( - KeyClientState = "clientState" - KeyConsensusStatePrefix = "consensusStates" -) - -// FullClientPath returns the full path of a specific client path in the format: -// "clients/{clientID}/{path}" as a string. -func FullClientPath(clientID string, path string) string { - return fmt.Sprintf("%s/%s/%s", KeyClientStorePrefix, clientID, path) -} - -// PrefixedClientStorePath returns a key path which can be used for prefixed -// key store iteration. The prefix may be a clientType, clientID, or any -// valid key prefix which may be concatenated with the client store constant. -func PrefixedClientStorePath(prefix []byte) string { - return fmt.Sprintf("%s/%s", KeyClientStorePrefix, prefix) -} - -// ICS02 -// The following paths are the keys to the store as defined in https://github.com/cosmos/ibc/tree/master/spec/core/ics-002-client-semantics#path-space - -// FullClientStatePath takes a client identifier and returns a Path under which to store a -// particular client state -func FullClientStatePath(clientID string) string { - return FullClientPath(clientID, KeyClientState) -} - -// FullConsensusStatePath takes a client identifier and returns a Path under which to -// store the consensus state of a client. -func FullConsensusStatePath(clientID string, height exported.Height) string { - return FullClientPath(clientID, ConsensusStatePath(height)) -} - -// ConsensusStatePath returns the suffix store key for the consensus state at a -// particular height stored in a client prefixed store. -func ConsensusStatePath(height exported.Height) string { - return fmt.Sprintf("%s/%s", KeyConsensusStatePrefix, height) -} diff --git a/modules/core/24-host/connection_keys.go b/modules/core/24-host/connection_keys.go index 2b20e74f091..bd0b1802ccd 100644 --- a/modules/core/24-host/connection_keys.go +++ b/modules/core/24-host/connection_keys.go @@ -1,11 +1,18 @@ package host +import "fmt" + +const KeyConnectionPrefix = "connections" + +// ICS03 +// The following paths are the keys to the store as defined in https://github.com/cosmos/ibc/blob/master/spec/core/ics-003-connection-semantics#store-paths + // ClientConnectionsKey returns the store key for the connections of a given client func ClientConnectionsKey(clientID string) []byte { - return []byte(ClientConnectionsPath(clientID)) + return FullClientKey(clientID, []byte(KeyConnectionPrefix)) } // ConnectionKey returns the store key for a particular connection func ConnectionKey(connectionID string) []byte { - return []byte(ConnectionPath(connectionID)) + return []byte(fmt.Sprintf("%s/%s", KeyConnectionPrefix, connectionID)) } diff --git a/modules/core/24-host/connection_paths.go b/modules/core/24-host/connection_paths.go deleted file mode 100644 index cd362e278a6..00000000000 --- a/modules/core/24-host/connection_paths.go +++ /dev/null @@ -1,18 +0,0 @@ -package host - -import "fmt" - -const KeyConnectionPrefix = "connections" - -// ICS03 -// The following paths are the keys to the store as defined in https://github.com/cosmos/ibc/blob/master/spec/core/ics-003-connection-semantics#store-paths - -// ClientConnectionsPath defines a reverse mapping from clients to a set of connections -func ClientConnectionsPath(clientID string) string { - return FullClientPath(clientID, KeyConnectionPrefix) -} - -// ConnectionPath defines the path under which connection paths are stored -func ConnectionPath(connectionID string) string { - return fmt.Sprintf("%s/%s", KeyConnectionPrefix, connectionID) -} diff --git a/modules/core/24-host/packet_keys.go b/modules/core/24-host/packet_keys.go index 2bde2a040ac..55e7f024e41 100644 --- a/modules/core/24-host/packet_keys.go +++ b/modules/core/24-host/packet_keys.go @@ -1,47 +1,78 @@ package host +import "fmt" + +const ( + KeySequencePrefix = "sequences" + KeyNextSeqSendPrefix = "nextSequenceSend" + KeyNextSeqRecvPrefix = "nextSequenceRecv" + KeyNextSeqAckPrefix = "nextSequenceAck" + KeyPacketCommitmentPrefix = "commitments" + KeyPacketAckPrefix = "acks" + KeyPacketReceiptPrefix = "receipts" + KeyPruningSequenceStart = "pruningSequenceStart" + KeyRecvStartSequence = "recvStartSequence" +) + +// ICS04 +// The following paths are the keys to the store as defined in https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#store-paths + // NextSequenceSendKey returns the store key for the send sequence of a particular // channel binded to a specific port. func NextSequenceSendKey(portID, channelID string) []byte { - return []byte(NextSequenceSendPath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s", KeyNextSeqSendPrefix, channelPath(portID, channelID))) } // NextSequenceRecvKey returns the store key for the receive sequence of a particular // channel binded to a specific port func NextSequenceRecvKey(portID, channelID string) []byte { - return []byte(NextSequenceRecvPath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s", KeyNextSeqRecvPrefix, channelPath(portID, channelID))) } // NextSequenceAckKey returns the store key for the acknowledgement sequence of // a particular channel binded to a specific port. func NextSequenceAckKey(portID, channelID string) []byte { - return []byte(NextSequenceAckPath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s", KeyNextSeqAckPrefix, channelPath(portID, channelID))) } // PacketCommitmentKey returns the store key of under which a packet commitment // is stored func PacketCommitmentKey(portID, channelID string, sequence uint64) []byte { - return []byte(PacketCommitmentPath(portID, channelID, sequence)) + return []byte(fmt.Sprintf("%s/%d", PacketCommitmentPrefixKey(portID, channelID), sequence)) +} + +// PacketCommitmentPrefixKey defines the prefix for commitments to packet data fields store path. +func PacketCommitmentPrefixKey(portID, channelID string) []byte { + return []byte(fmt.Sprintf("%s/%s/%s", KeyPacketCommitmentPrefix, channelPath(portID, channelID), KeySequencePrefix)) } // PacketAcknowledgementKey returns the store key of under which a packet // acknowledgement is stored func PacketAcknowledgementKey(portID, channelID string, sequence uint64) []byte { - return []byte(PacketAcknowledgementPath(portID, channelID, sequence)) + return []byte(fmt.Sprintf("%s/%d", PacketAcknowledgementPrefixKey(portID, channelID), sequence)) +} + +// PacketAcknowledgementPrefixKey defines the prefix for commitments to packet data fields store path. +func PacketAcknowledgementPrefixKey(portID, channelID string) []byte { + return []byte(fmt.Sprintf("%s/%s/%s", KeyPacketAckPrefix, channelPath(portID, channelID), KeySequencePrefix)) } // PacketReceiptKey returns the store key of under which a packet // receipt is stored func PacketReceiptKey(portID, channelID string, sequence uint64) []byte { - return []byte(PacketReceiptPath(portID, channelID, sequence)) + return []byte(fmt.Sprintf("%s/%s/%s", KeyPacketReceiptPrefix, channelPath(portID, channelID), sequencePath(sequence))) } // PruningSequenceStartKey returns the store key for the pruning sequence start of a particular channel func PruningSequenceStartKey(portID, channelID string) []byte { - return []byte(PruningSequenceStartPath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s", KeyPruningSequenceStart, channelPath(portID, channelID))) } // RecvStartSequenceKey returns the store key for the recv start sequence of a particular channel func RecvStartSequenceKey(portID, channelID string) []byte { - return []byte(RecvStartSequencePath(portID, channelID)) + return []byte(fmt.Sprintf("%s/%s", KeyRecvStartSequence, channelPath(portID, channelID))) +} + +func sequencePath(sequence uint64) string { + return fmt.Sprintf("%s/%d", KeySequencePrefix, sequence) } diff --git a/modules/core/24-host/packet_paths.go b/modules/core/24-host/packet_paths.go deleted file mode 100644 index 99b8bf2e974..00000000000 --- a/modules/core/24-host/packet_paths.go +++ /dev/null @@ -1,72 +0,0 @@ -package host - -import "fmt" - -const ( - KeySequencePrefix = "sequences" - KeyNextSeqSendPrefix = "nextSequenceSend" - KeyNextSeqRecvPrefix = "nextSequenceRecv" - KeyNextSeqAckPrefix = "nextSequenceAck" - KeyPacketCommitmentPrefix = "commitments" - KeyPacketAckPrefix = "acks" - KeyPacketReceiptPrefix = "receipts" - KeyPruningSequenceStart = "pruningSequenceStart" - KeyRecvStartSequence = "recvStartSequence" -) - -// ICS04 -// The following paths are the keys to the store as defined in https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#store-paths - -// NextSequenceSendPath defines the next send sequence counter store path -func NextSequenceSendPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s", KeyNextSeqSendPrefix, channelPath(portID, channelID)) -} - -// NextSequenceRecvPath defines the next receive sequence counter store path. -func NextSequenceRecvPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s", KeyNextSeqRecvPrefix, channelPath(portID, channelID)) -} - -// NextSequenceAckPath defines the next acknowledgement sequence counter store path -func NextSequenceAckPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s", KeyNextSeqAckPrefix, channelPath(portID, channelID)) -} - -// PacketCommitmentPath defines the commitments to packet data fields store path -func PacketCommitmentPath(portID, channelID string, sequence uint64) string { - return fmt.Sprintf("%s/%d", PacketCommitmentPrefixPath(portID, channelID), sequence) -} - -// PacketCommitmentPrefixPath defines the prefix for commitments to packet data fields store path. -func PacketCommitmentPrefixPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s/%s", KeyPacketCommitmentPrefix, channelPath(portID, channelID), KeySequencePrefix) -} - -// PacketAcknowledgementPath defines the packet acknowledgement store path -func PacketAcknowledgementPath(portID, channelID string, sequence uint64) string { - return fmt.Sprintf("%s/%d", PacketAcknowledgementPrefixPath(portID, channelID), sequence) -} - -// PacketAcknowledgementPrefixPath defines the prefix for commitments to packet data fields store path. -func PacketAcknowledgementPrefixPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s/%s", KeyPacketAckPrefix, channelPath(portID, channelID), KeySequencePrefix) -} - -// PacketReceiptPath defines the packet receipt store path -func PacketReceiptPath(portID, channelID string, sequence uint64) string { - return fmt.Sprintf("%s/%s/%s", KeyPacketReceiptPrefix, channelPath(portID, channelID), sequencePath(sequence)) -} - -// PruningSequenceStartPath defines the path under which the pruning sequence starting value is stored -func PruningSequenceStartPath(portID, channelID string) string { - return fmt.Sprintf("%s/%s", KeyPruningSequenceStart, channelPath(portID, channelID)) -} - -// RecvStartSequencePath defines the path under which the recv start sequence is stored -func RecvStartSequencePath(portID, channelID string) string { - return fmt.Sprintf("%s/%s", KeyRecvStartSequence, channelPath(portID, channelID)) -} - -func sequencePath(sequence uint64) string { - return fmt.Sprintf("%s/%d", KeySequencePrefix, sequence) -} diff --git a/modules/core/24-host/parse_test.go b/modules/core/24-host/parse_test.go index 37789ef0b19..e7d039be2a4 100644 --- a/modules/core/24-host/parse_test.go +++ b/modules/core/24-host/parse_test.go @@ -56,13 +56,13 @@ func TestMustParseClientStatePath(t *testing.T) { path string expPass bool }{ - {"valid", host.FullClientStatePath(ibctesting.FirstClientID), true}, + {"valid", string(host.FullClientStateKey(ibctesting.FirstClientID)), true}, {"path too large", fmt.Sprintf("clients/clients/%s/clientState", ibctesting.FirstClientID), false}, {"path too small", fmt.Sprintf("clients/%s", ibctesting.FirstClientID), false}, {"path does not begin with client store", fmt.Sprintf("cli/%s/%s", ibctesting.FirstClientID, host.KeyClientState), false}, {"path does not end with client state key", fmt.Sprintf("%s/%s/consensus", string(host.KeyClientStorePrefix), ibctesting.FirstClientID), false}, - {"client ID is empty", host.FullClientStatePath(""), false}, - {"client ID is only spaces", host.FullClientStatePath(" "), false}, + {"client ID is empty", string(host.FullClientStateKey("")), false}, + {"client ID is only spaces", string(host.FullClientStateKey(" ")), false}, } for _, tc := range testCases { From 3111025158213f25f7a886d346c1dbb1d0aa6621 Mon Sep 17 00:00:00 2001 From: pengbanban Date: Mon, 5 Aug 2024 01:37:16 +0900 Subject: [PATCH 59/78] chore: fix function names (#7040) * chore: fix function names Signed-off-by: pengbanban * Update modules/apps/transfer/keeper/export_test.go Co-authored-by: Nikolas De Giorgis --------- Signed-off-by: pengbanban Co-authored-by: DimitrisJim Co-authored-by: Nikolas De Giorgis --- e2e/tests/transfer/base_test.go | 2 +- modules/apps/callbacks/testing/simapp/contract_keeper.go | 2 +- modules/apps/transfer/keeper/export_test.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/tests/transfer/base_test.go b/e2e/tests/transfer/base_test.go index 3ea208d145e..36d77991b6c 100644 --- a/e2e/tests/transfer/base_test.go +++ b/e2e/tests/transfer/base_test.go @@ -171,7 +171,7 @@ func (s *TransferTestSuite) TestMsgTransfer_Succeeds_Nonincentivized() { // } } -// TestMsgTransfer_Succeeds_MultiDenom will test sending successful IBC transfers from chainA to chainB. +// TestMsgTransfer_Succeeds_Nonincentivized_MultiDenom will test sending successful IBC transfers from chainA to chainB. // A multidenom transfer with native chainB tokens and IBC tokens from chainA is executed from chainB to chainA. func (s *TransferTestSuite) TestMsgTransfer_Succeeds_Nonincentivized_MultiDenom() { t := s.T() diff --git a/modules/apps/callbacks/testing/simapp/contract_keeper.go b/modules/apps/callbacks/testing/simapp/contract_keeper.go index d2ca9dba2c6..3471efbc033 100644 --- a/modules/apps/callbacks/testing/simapp/contract_keeper.go +++ b/modules/apps/callbacks/testing/simapp/contract_keeper.go @@ -106,7 +106,7 @@ func (k ContractKeeper) IncrementStateEntryCounter(ctx sdk.Context) { k.SetStateEntryCounter(ctx, count+1) } -// NewKeeper creates a new mock ContractKeeper. +// NewContractKeeper creates a new mock ContractKeeper. func NewContractKeeper(key storetypes.StoreKey) *ContractKeeper { k := &ContractKeeper{ key: key, diff --git a/modules/apps/transfer/keeper/export_test.go b/modules/apps/transfer/keeper/export_test.go index 399fd3967cf..5efd6a85910 100644 --- a/modules/apps/transfer/keeper/export_test.go +++ b/modules/apps/transfer/keeper/export_test.go @@ -8,7 +8,7 @@ import ( channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" ) -// SetDenomTraces is a wrapper around iterateDenomTraces for testing purposes. +// SetDenomTrace is a wrapper around setDenomTrace for testing purposes. func (k Keeper) SetDenomTrace(ctx sdk.Context, denomTrace internaltypes.DenomTrace) { k.setDenomTrace(ctx, denomTrace) } From 4ace83dd543fff5e69f5e3da6fd5c6b28ade7d3d Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Mon, 5 Aug 2024 15:32:22 +0100 Subject: [PATCH 60/78] Supply app version to contract keeper (#7000) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: adding version to UnmarshalPacketData interface * chore: addressing PR feedback * chore: adding application version to callback data * chore: adding version as additional field in contract keeper interface functions * docs: updating docs to include version argument * docs: updating changelog to include note about callbacks version argument * chore: adding application version to emmited events * docs: fix spacing * docs: fix spacing * docs: fix spacing * chore: move changelog entry to callbacks module * chore: update docs * Apply suggestions from code review * chore: add migration docs --------- Co-authored-by: Colin Axnér <25233464+colin-axner@users.noreply.github.com> --- docs/architecture/adr-008-app-caller-cbs.md | 16 ++ .../02-callbacks/03-interfaces.md | 16 ++ docs/docs/05-migrations/13-v8-to-v9.md | 58 ++++++ modules/apps/callbacks/CHANGELOG.md | 2 + modules/apps/callbacks/fee_transfer_test.go | 1 + modules/apps/callbacks/ibc_middleware.go | 10 +- modules/apps/callbacks/replay_test.go | 8 +- .../testing/simapp/contract_keeper.go | 32 +-- modules/apps/callbacks/types/callbacks.go | 25 ++- .../apps/callbacks/types/callbacks_test.go | 197 +++++++++++------- modules/apps/callbacks/types/events.go | 4 +- modules/apps/callbacks/types/events_test.go | 49 +++-- .../apps/callbacks/types/expected_keepers.go | 16 ++ modules/apps/callbacks/types/export_test.go | 4 +- 14 files changed, 304 insertions(+), 134 deletions(-) diff --git a/docs/architecture/adr-008-app-caller-cbs.md b/docs/architecture/adr-008-app-caller-cbs.md index 7e9971b4069..71e7261d45a 100644 --- a/docs/architecture/adr-008-app-caller-cbs.md +++ b/docs/architecture/adr-008-app-caller-cbs.md @@ -185,6 +185,9 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCSendPacketCallback( cachedCtx sdk.Context, sourcePort string, @@ -194,6 +197,7 @@ type ContractKeeper interface { packetData []byte, contractAddress, packetSenderAddress string, + version string, ) error // IBCOnAcknowledgementPacketCallback is called in the source chain when a packet acknowledgement // is received. The packetSenderAddress is determined by the underlying module, and may be empty if @@ -206,6 +210,9 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCOnAcknowledgementPacketCallback( cachedCtx sdk.Context, packet channeltypes.Packet, @@ -213,6 +220,7 @@ type ContractKeeper interface { relayer sdk.AccAddress, contractAddress, packetSenderAddress string, + version string, ) error // IBCOnTimeoutPacketCallback is called in the source chain when a packet is not received before // the timeout height. The packetSenderAddress is determined by the underlying module, and may be @@ -225,23 +233,31 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCOnTimeoutPacketCallback( cachedCtx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, contractAddress, packetSenderAddress string, + version string, ) error // IBCReceivePacketCallback is called in the destination chain when a packet acknowledgement is written. // The contract is expected to handle the callback within the user defined gas limit, and handle any errors, // out of gas, or panics gracefully. // This entry point is called with a cached context. If an error is returned, then the changes in // this context will not be persisted, but the packet lifecycle will not be blocked. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCReceivePacketCallback( cachedCtx sdk.Context, packet ibcexported.PacketI, ack ibcexported.Acknowledgement, contractAddress string, + version string, ) error } ``` diff --git a/docs/docs/04-middleware/02-callbacks/03-interfaces.md b/docs/docs/04-middleware/02-callbacks/03-interfaces.md index 6ec44417757..9b7991d2cfd 100644 --- a/docs/docs/04-middleware/02-callbacks/03-interfaces.md +++ b/docs/docs/04-middleware/02-callbacks/03-interfaces.md @@ -86,6 +86,9 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCSendPacketCallback( cachedCtx sdk.Context, sourcePort string, @@ -95,6 +98,7 @@ type ContractKeeper interface { packetData []byte, contractAddress, packetSenderAddress string, + version string, ) error // IBCOnAcknowledgementPacketCallback is called in the source chain when a packet acknowledgement // is received. The packetSenderAddress is determined by the underlying module, and may be empty if @@ -107,6 +111,9 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCOnAcknowledgementPacketCallback( cachedCtx sdk.Context, packet channeltypes.Packet, @@ -114,6 +121,7 @@ type ContractKeeper interface { relayer sdk.AccAddress, contractAddress, packetSenderAddress string, + version string, ) error // IBCOnTimeoutPacketCallback is called in the source chain when a packet is not received before // the timeout height. The packetSenderAddress is determined by the underlying module, and may be @@ -126,23 +134,31 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCOnTimeoutPacketCallback( cachedCtx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, contractAddress, packetSenderAddress string, + version string, ) error // IBCReceivePacketCallback is called in the destination chain when a packet acknowledgement is written. // The contract is expected to handle the callback within the user defined gas limit, and handle any errors, // out of gas, or panics gracefully. // This entry point is called with a cached context. If an error is returned, then the changes in // this context will not be persisted, but the packet lifecycle will not be blocked. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCReceivePacketCallback( cachedCtx sdk.Context, packet ibcexported.PacketI, ack ibcexported.Acknowledgement, contractAddress string, + version string, ) error } ``` diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 1a4e2f26820..68f0cd912d1 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -26,6 +26,7 @@ There are four sections based on the four potential user groups of this document - [ICS20 v2](#ics20-v2) - [`DenomTrace` type refactoring](#denomtrace-type-refactoring) - [ICS27 - Interchain Accounts](#ics27---interchain-accounts) + - [Callbacks](#callbacks) - [IBC testing package](#ibc-testing-package) - [API deprecation notice](#api-deprecation-notice) - [Relayers](#relayers) @@ -289,6 +290,63 @@ func NewIBCMiddleware( - The [`InitModule` function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/27-interchain-accounts/module.go#L124-L143) has been removed. When adding the interchain accounts module to the chain, please set the desired params for controller and host submodules directly after calling `RunMigrations` in the upgrade handler. - The [`GetBytes()` function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/apps/27-interchain-accounts/types/packet.go#L65-L68) of the `CosmosTx` type has been removed. +### Callbacks + +The `ContractKeeper` interface has been extended with the base application version. The base application version will be required by contracts to unmarshal the packet data. An example of this is unmarshaling ics20v2 packets which requires knowing the base version of a transfer stack (either v1 or v2). + +```diff + IBCSendPacketCallback( + cachedCtx sdk.Context, + sourcePort string, +@@ -31,6 +34,7 @@ type ContractKeeper interface { + packetData []byte, + contractAddress, + packetSenderAddress string, ++ version string, + ) error + // IBCOnAcknowledgementPacketCallback is called in the source chain when a packet acknowledgement + // is received. The packetSenderAddress is determined by the underlying module, and may be empty if +@@ -43,6 +47,9 @@ type ContractKeeper interface { + // validation on the origin of a given packet. It is recommended to perform the same validation + // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This + // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + IBCOnAcknowledgementPacketCallback( + cachedCtx sdk.Context, + packet channeltypes.Packet, +@@ -50,6 +57,7 @@ type ContractKeeper interface { + relayer sdk.AccAddress, + contractAddress, + packetSenderAddress string, ++ version string, + ) error + // IBCOnTimeoutPacketCallback is called in the source chain when a packet is not received before + // the timeout height. The packetSenderAddress is determined by the underlying module, and may be +@@ -62,22 +70,30 @@ type ContractKeeper interface { + // validation on the origin of a given packet. It is recommended to perform the same validation + // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This + // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + IBCOnTimeoutPacketCallback( + cachedCtx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, + contractAddress, + packetSenderAddress string, ++ version string, + ) error + // IBCReceivePacketCallback is called in the destination chain when a packet acknowledgement is written. + // The contract is expected to handle the callback within the user defined gas limit, and handle any errors, + // out of gas, or panics gracefully. + // This entry point is called with a cached context. If an error is returned, then the changes in + // this context will not be persisted, but the packet lifecycle will not be blocked. + IBCReceivePacketCallback( + cachedCtx sdk.Context, + packet ibcexported.PacketI, + ack ibcexported.Acknowledgement, + contractAddress string, ++ version string, + ) error +``` + ### IBC testing package - The `mock.PV` type has been removed in favour of [`cmttypes.MockPV`](https://github.com/cometbft/cometbft/blob/v0.38.5/types/priv_validator.go#L50) in [#5709](https://github.com/cosmos/ibc-go/pull/5709). diff --git a/modules/apps/callbacks/CHANGELOG.md b/modules/apps/callbacks/CHANGELOG.md index 507a19e93d1..8b76e98bda7 100644 --- a/modules/apps/callbacks/CHANGELOG.md +++ b/modules/apps/callbacks/CHANGELOG.md @@ -44,6 +44,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking +* (apps/callbacks) [\#7000](https://github.com/cosmos/ibc-go/pull/7000) Add base application version to contract keeper callbacks. + ### State Machine Breaking ### Improvements diff --git a/modules/apps/callbacks/fee_transfer_test.go b/modules/apps/callbacks/fee_transfer_test.go index 9e9e9eb62f8..44e342143b9 100644 --- a/modules/apps/callbacks/fee_transfer_test.go +++ b/modules/apps/callbacks/fee_transfer_test.go @@ -115,6 +115,7 @@ func (s *CallbacksTestSuite) TestIncentivizedTransferCallbacks() { _ sdk.AccAddress, contractAddress, _ string, + _ string, ) error { expAck := channeltypes.NewResultAcknowledgement([]byte{byte(1)}).Acknowledgement() s.Require().Equal(expAck, acknowledgement) diff --git a/modules/apps/callbacks/ibc_middleware.go b/modules/apps/callbacks/ibc_middleware.go index f3cf521dd1b..2fb1065fb58 100644 --- a/modules/apps/callbacks/ibc_middleware.go +++ b/modules/apps/callbacks/ibc_middleware.go @@ -110,7 +110,7 @@ func (im IBCMiddleware) SendPacket( callbackExecutor := func(cachedCtx sdk.Context) error { return im.contractKeeper.IBCSendPacketCallback( - cachedCtx, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data, callbackData.CallbackAddress, callbackData.SenderAddress, + cachedCtx, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data, callbackData.CallbackAddress, callbackData.SenderAddress, callbackData.ApplicationVersion, ) } @@ -151,7 +151,7 @@ func (im IBCMiddleware) OnAcknowledgementPacket( callbackExecutor := func(cachedCtx sdk.Context) error { return im.contractKeeper.IBCOnAcknowledgementPacketCallback( - cachedCtx, packet, acknowledgement, relayer, callbackData.CallbackAddress, callbackData.SenderAddress, + cachedCtx, packet, acknowledgement, relayer, callbackData.CallbackAddress, callbackData.SenderAddress, callbackData.ApplicationVersion, ) } @@ -184,7 +184,7 @@ func (im IBCMiddleware) OnTimeoutPacket(ctx sdk.Context, channelVersion string, } callbackExecutor := func(cachedCtx sdk.Context) error { - return im.contractKeeper.IBCOnTimeoutPacketCallback(cachedCtx, packet, relayer, callbackData.CallbackAddress, callbackData.SenderAddress) + return im.contractKeeper.IBCOnTimeoutPacketCallback(cachedCtx, packet, relayer, callbackData.CallbackAddress, callbackData.SenderAddress, callbackData.ApplicationVersion) } // callback execution errors are not allowed to block the packet lifecycle, they are only used in event emissions @@ -220,7 +220,7 @@ func (im IBCMiddleware) OnRecvPacket(ctx sdk.Context, channelVersion string, pac } callbackExecutor := func(cachedCtx sdk.Context) error { - return im.contractKeeper.IBCReceivePacketCallback(cachedCtx, packet, ack, callbackData.CallbackAddress) + return im.contractKeeper.IBCReceivePacketCallback(cachedCtx, packet, ack, callbackData.CallbackAddress, callbackData.ApplicationVersion) } // callback execution errors are not allowed to block the packet lifecycle, they are only used in event emissions @@ -263,7 +263,7 @@ func (im IBCMiddleware) WriteAcknowledgement( } callbackExecutor := func(cachedCtx sdk.Context) error { - return im.contractKeeper.IBCReceivePacketCallback(cachedCtx, packet, ack, callbackData.CallbackAddress) + return im.contractKeeper.IBCReceivePacketCallback(cachedCtx, packet, ack, callbackData.CallbackAddress, callbackData.ApplicationVersion) } // callback execution errors are not allowed to block the packet lifecycle, they are only used in event emissions diff --git a/modules/apps/callbacks/replay_test.go b/modules/apps/callbacks/replay_test.go index 1f63d6791d8..f414f47f5f5 100644 --- a/modules/apps/callbacks/replay_test.go +++ b/modules/apps/callbacks/replay_test.go @@ -37,7 +37,7 @@ func (s *CallbacksTestSuite) TestTransferTimeoutReplayProtection() { cachedCtx sdk.Context, packet channeltypes.Packet, _ sdk.AccAddress, - _, _ string, + _, _, _ string, ) error { // only replay the timeout packet twice. We could replay it more times callbackCount++ @@ -119,7 +119,7 @@ func (s *CallbacksTestSuite) TestTransferErrorAcknowledgementReplayProtection() packet channeltypes.Packet, ack []byte, _ sdk.AccAddress, - _, _ string, + _, _, _ string, ) error { // only replay the ack packet twice. We could replay it more times callbackCount++ @@ -197,7 +197,7 @@ func (s *CallbacksTestSuite) TestTransferSuccessAcknowledgementReplayProtection( packet channeltypes.Packet, ack []byte, _ sdk.AccAddress, - _, _ string, + _, _, _ string, ) error { // only replay the ack packet twice. We could replay it more times callbackCount++ @@ -265,7 +265,7 @@ func (s *CallbacksTestSuite) TestTransferRecvPacketReplayProtection() { cachedCtx sdk.Context, packet ibcexported.PacketI, _ ibcexported.Acknowledgement, - _ string, + _, _ string, ) error { callbackCount++ if callbackCount == 2 { diff --git a/modules/apps/callbacks/testing/simapp/contract_keeper.go b/modules/apps/callbacks/testing/simapp/contract_keeper.go index 3471efbc033..b2206f06fba 100644 --- a/modules/apps/callbacks/testing/simapp/contract_keeper.go +++ b/modules/apps/callbacks/testing/simapp/contract_keeper.go @@ -56,6 +56,7 @@ type ContractKeeper struct { packetData []byte, contractAddress, packetSenderAddress string, + version string, ) error IBCOnAcknowledgementPacketCallbackFn func( @@ -65,6 +66,7 @@ type ContractKeeper struct { relayer sdk.AccAddress, contractAddress, packetSenderAddress string, + version string, ) error IBCOnTimeoutPacketCallbackFn func( @@ -73,6 +75,7 @@ type ContractKeeper struct { relayer sdk.AccAddress, contractAddress, packetSenderAddress string, + version string, ) error IBCReceivePacketCallbackFn func( @@ -80,6 +83,7 @@ type ContractKeeper struct { packet ibcexported.PacketI, ack ibcexported.Acknowledgement, contractAddress string, + version string, ) error } @@ -113,19 +117,19 @@ func NewContractKeeper(key storetypes.StoreKey) *ContractKeeper { Counters: make(map[callbacktypes.CallbackType]int), } - k.IBCSendPacketCallbackFn = func(ctx sdk.Context, _, _ string, _ clienttypes.Height, _ uint64, _ []byte, contractAddress, _ string) error { + k.IBCSendPacketCallbackFn = func(ctx sdk.Context, _, _ string, _ clienttypes.Height, _ uint64, _ []byte, contractAddress, _, _ string) error { return k.ProcessMockCallback(ctx, callbacktypes.CallbackTypeSendPacket, contractAddress) } - k.IBCOnAcknowledgementPacketCallbackFn = func(ctx sdk.Context, _ channeltypes.Packet, _ []byte, _ sdk.AccAddress, contractAddress, _ string) error { + k.IBCOnAcknowledgementPacketCallbackFn = func(ctx sdk.Context, _ channeltypes.Packet, _ []byte, _ sdk.AccAddress, contractAddress, _, _ string) error { return k.ProcessMockCallback(ctx, callbacktypes.CallbackTypeAcknowledgementPacket, contractAddress) } - k.IBCOnTimeoutPacketCallbackFn = func(ctx sdk.Context, _ channeltypes.Packet, _ sdk.AccAddress, contractAddress, _ string) error { + k.IBCOnTimeoutPacketCallbackFn = func(ctx sdk.Context, _ channeltypes.Packet, _ sdk.AccAddress, contractAddress, _, _ string) error { return k.ProcessMockCallback(ctx, callbacktypes.CallbackTypeTimeoutPacket, contractAddress) } - k.IBCReceivePacketCallbackFn = func(ctx sdk.Context, _ ibcexported.PacketI, _ ibcexported.Acknowledgement, contractAddress string) error { + k.IBCReceivePacketCallbackFn = func(ctx sdk.Context, _ ibcexported.PacketI, _ ibcexported.Acknowledgement, contractAddress, _ string) error { return k.ProcessMockCallback(ctx, callbacktypes.CallbackTypeReceivePacket, contractAddress) } @@ -147,9 +151,10 @@ func (k ContractKeeper) IBCSendPacketCallback( timeoutTimestamp uint64, packetData []byte, contractAddress, - packetSenderAddress string, + packetSenderAddress, + version string, ) error { - return k.IBCSendPacketCallbackFn(ctx, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, packetData, contractAddress, packetSenderAddress) + return k.IBCSendPacketCallbackFn(ctx, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, packetData, contractAddress, packetSenderAddress, version) } // IBCOnAcknowledgementPacketCallback increments the stateful entry counter and the acknowledgement_packet callback counter. @@ -165,9 +170,10 @@ func (k ContractKeeper) IBCOnAcknowledgementPacketCallback( acknowledgement []byte, relayer sdk.AccAddress, contractAddress, - packetSenderAddress string, + packetSenderAddress, + version string, ) error { - return k.IBCOnAcknowledgementPacketCallbackFn(ctx, packet, acknowledgement, relayer, contractAddress, packetSenderAddress) + return k.IBCOnAcknowledgementPacketCallbackFn(ctx, packet, acknowledgement, relayer, contractAddress, packetSenderAddress, version) } // IBCOnTimeoutPacketCallback increments the stateful entry counter and the timeout_packet callback counter. @@ -182,9 +188,10 @@ func (k ContractKeeper) IBCOnTimeoutPacketCallback( packet channeltypes.Packet, relayer sdk.AccAddress, contractAddress, - packetSenderAddress string, + packetSenderAddress, + version string, ) error { - return k.IBCOnTimeoutPacketCallbackFn(ctx, packet, relayer, contractAddress, packetSenderAddress) + return k.IBCOnTimeoutPacketCallbackFn(ctx, packet, relayer, contractAddress, packetSenderAddress, version) } // IBCReceivePacketCallback increments the stateful entry counter and the receive_packet callback counter. @@ -198,9 +205,10 @@ func (k ContractKeeper) IBCReceivePacketCallback( ctx sdk.Context, packet ibcexported.PacketI, ack ibcexported.Acknowledgement, - contractAddress string, + contractAddress, + version string, ) error { - return k.IBCReceivePacketCallbackFn(ctx, packet, ack, contractAddress) + return k.IBCReceivePacketCallbackFn(ctx, packet, ack, contractAddress, version) } // ProcessMockCallback processes a mock callback. diff --git a/modules/apps/callbacks/types/callbacks.go b/modules/apps/callbacks/types/callbacks.go index 7d107db1a0f..0137a365241 100644 --- a/modules/apps/callbacks/types/callbacks.go +++ b/modules/apps/callbacks/types/callbacks.go @@ -66,6 +66,8 @@ type CallbackData struct { // execution fails due to out of gas. // This parameter is only used in event emissions, or logging. CommitGasLimit uint64 + // ApplicationVersion is the base application version. + ApplicationVersion string } // GetSourceCallbackData parses the packet data and returns the source callback data. @@ -75,12 +77,12 @@ func GetSourceCallbackData( packet channeltypes.Packet, maxGas uint64, ) (CallbackData, error) { - packetData, _, err := packetDataUnmarshaler.UnmarshalPacketData(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetData()) + packetData, version, err := packetDataUnmarshaler.UnmarshalPacketData(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetData()) if err != nil { return CallbackData{}, errorsmod.Wrap(ErrCannotUnmarshalPacketData, err.Error()) } - return getCallbackData(packetData, packet.GetSourcePort(), ctx.GasMeter().GasRemaining(), maxGas, SourceCallbackKey) + return getCallbackData(packetData, version, packet.GetSourcePort(), ctx.GasMeter().GasRemaining(), maxGas, SourceCallbackKey) } // GetDestCallbackData parses the packet data and returns the destination callback data. @@ -89,12 +91,12 @@ func GetDestCallbackData( packetDataUnmarshaler porttypes.PacketDataUnmarshaler, packet channeltypes.Packet, maxGas uint64, ) (CallbackData, error) { - packetData, _, err := packetDataUnmarshaler.UnmarshalPacketData(ctx, packet.GetDestPort(), packet.GetDestChannel(), packet.GetData()) + packetData, version, err := packetDataUnmarshaler.UnmarshalPacketData(ctx, packet.GetDestPort(), packet.GetDestChannel(), packet.GetData()) if err != nil { return CallbackData{}, errorsmod.Wrap(ErrCannotUnmarshalPacketData, err.Error()) } - return getCallbackData(packetData, packet.GetSourcePort(), ctx.GasMeter().GasRemaining(), maxGas, DestinationCallbackKey) + return getCallbackData(packetData, version, packet.GetSourcePort(), ctx.GasMeter().GasRemaining(), maxGas, DestinationCallbackKey) } // getCallbackData parses the packet data and returns the callback data. @@ -103,9 +105,9 @@ func GetDestCallbackData( // address and gas limit from the callback data. func getCallbackData( packetData interface{}, - srcPortID string, - remainingGas, - maxGas uint64, callbackKey string, + version, srcPortID string, + remainingGas, maxGas uint64, + callbackKey string, ) (CallbackData, error) { packetDataProvider, ok := packetData.(ibcexported.PacketDataProvider) if !ok { @@ -136,10 +138,11 @@ func getCallbackData( executionGasLimit, commitGasLimit := computeExecAndCommitGasLimit(callbackData, remainingGas, maxGas) return CallbackData{ - CallbackAddress: callbackAddress, - ExecutionGasLimit: executionGasLimit, - SenderAddress: packetSender, - CommitGasLimit: commitGasLimit, + CallbackAddress: callbackAddress, + ExecutionGasLimit: executionGasLimit, + SenderAddress: packetSender, + CommitGasLimit: commitGasLimit, + ApplicationVersion: version, }, nil } diff --git a/modules/apps/callbacks/types/callbacks_test.go b/modules/apps/callbacks/types/callbacks_test.go index cd9c67bd64b..735e7316ed3 100644 --- a/modules/apps/callbacks/types/callbacks_test.go +++ b/modules/apps/callbacks/types/callbacks_test.go @@ -25,6 +25,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { packetData interface{} remainingGas uint64 callbackKey string + version string ) // max gas is 1_000_000 @@ -38,6 +39,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { "success: source callback", func() { remainingGas = 2_000_000 + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -47,10 +49,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -58,6 +61,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { "success: destination callback", func() { callbackKey = types.DestinationCallbackKey + version = transfertypes.V1 remainingGas = 2_000_000 packetData = transfertypes.FungibleTokenPacketData{ @@ -69,10 +73,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: "", - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: "", + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -80,6 +85,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { "success: destination callback with 0 user defined gas limit", func() { callbackKey = types.DestinationCallbackKey + version = transfertypes.V1 remainingGas = 2_000_000 packetData = transfertypes.FungibleTokenPacketData{ @@ -91,16 +97,18 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: "", - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: "", + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, nil, }, { "success: source callback with gas limit < remaining gas < max gas", func() { + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -112,10 +120,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { remainingGas = 100_000 }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 50_000, - CommitGasLimit: 50_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 50_000, + CommitGasLimit: 50_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -123,6 +132,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { "success: source callback with remaining gas < gas limit < max gas", func() { remainingGas = 100_000 + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -132,10 +142,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 100_000, - CommitGasLimit: 200_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 100_000, + CommitGasLimit: 200_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -143,6 +154,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { "success: source callback with remaining gas < max gas < gas limit", func() { remainingGas = 100_000 + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -152,10 +164,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 100_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 100_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -163,6 +176,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { "success: destination callback with remaining gas < max gas < gas limit", func() { callbackKey = types.DestinationCallbackKey + version = transfertypes.V1 remainingGas = 100_000 packetData = transfertypes.FungibleTokenPacketData{ @@ -174,10 +188,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: "", - ExecutionGasLimit: 100_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: "", + ExecutionGasLimit: 100_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -185,6 +200,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { "success: source callback with max gas < remaining gas < gas limit", func() { remainingGas = 2_000_000 + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -194,10 +210,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -212,6 +229,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { { "failure: empty memo", func() { + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -226,6 +244,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { { "failure: empty address", func() { + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -240,6 +259,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { { "failure: space address", func() { + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -256,6 +276,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { "success: source callback", func() { remainingGas = 2_000_000 + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -265,10 +286,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -278,6 +300,7 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { callbackKey = types.DestinationCallbackKey remainingGas = 2_000_000 + version = transfertypes.V1 packetData = transfertypes.FungibleTokenPacketData{ Denom: ibctesting.TestCoin.Denom, Amount: ibctesting.TestCoin.Amount.String(), @@ -287,10 +310,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: "", - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: "", + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, nil, }, @@ -313,10 +337,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: "", - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: "", + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V2, }, nil, }, @@ -338,10 +363,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { remainingGas = 100_000 }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 50_000, - CommitGasLimit: 50_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 50_000, + CommitGasLimit: 50_000, + ApplicationVersion: transfertypes.V2, }, nil, }, @@ -362,10 +388,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 100_000, - CommitGasLimit: 200_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 100_000, + CommitGasLimit: 200_000, + ApplicationVersion: transfertypes.V2, }, nil, }, @@ -386,10 +413,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 100_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 100_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V2, }, nil, }, @@ -412,10 +440,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: "", - ExecutionGasLimit: 100_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: "", + ExecutionGasLimit: 100_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V2, }, nil, }, @@ -436,10 +465,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { } }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V2, }, nil, }, @@ -513,10 +543,11 @@ func (s *CallbacksTypesTestSuite) TestGetCallbackData() { s.SetupTest() callbackKey = types.SourceCallbackKey + version = transfertypes.V2 tc.malleate() - callbackData, err := types.GetCallbackData(packetData, transfertypes.PortID, remainingGas, uint64(1_000_000), callbackKey) + callbackData, err := types.GetCallbackData(packetData, version, transfertypes.PortID, remainingGas, uint64(1_000_000), callbackKey) expPass := tc.expError == nil if expPass { @@ -557,10 +588,11 @@ func (s *CallbacksTypesTestSuite) TestGetSourceCallbackDataTransfer() { Memo: fmt.Sprintf(`{"src_callback": {"address": "%s"}}`, sender), }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, func() { s.path.EndpointA.ChannelConfig.Version = transfertypes.V1 @@ -583,10 +615,11 @@ func (s *CallbacksTypesTestSuite) TestGetSourceCallbackDataTransfer() { Memo: fmt.Sprintf(`{"src_callback": {"address": "%s"}}`, sender), }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: sender, - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: sender, + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V2, }, func() { s.path.EndpointA.ChannelConfig.Version = transfertypes.V2 @@ -644,10 +677,11 @@ func (s *CallbacksTypesTestSuite) TestGetDestCallbackDataTransfer() { Memo: fmt.Sprintf(`{"dest_callback": {"address": "%s"}}`, sender), }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: "", - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: "", + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V1, }, func() { s.path.EndpointA.ChannelConfig.Version = transfertypes.V1 @@ -670,10 +704,11 @@ func (s *CallbacksTypesTestSuite) TestGetDestCallbackDataTransfer() { Memo: fmt.Sprintf(`{"dest_callback": {"address": "%s"}}`, sender), }, types.CallbackData{ - CallbackAddress: sender, - SenderAddress: "", - ExecutionGasLimit: 1_000_000, - CommitGasLimit: 1_000_000, + CallbackAddress: sender, + SenderAddress: "", + ExecutionGasLimit: 1_000_000, + CommitGasLimit: 1_000_000, + ApplicationVersion: transfertypes.V2, }, func() { s.path.EndpointA.ChannelConfig.Version = transfertypes.V2 diff --git a/modules/apps/callbacks/types/events.go b/modules/apps/callbacks/types/events.go index b05fc96faa8..f7c5a772afa 100644 --- a/modules/apps/callbacks/types/events.go +++ b/modules/apps/callbacks/types/events.go @@ -42,7 +42,8 @@ const ( AttributeKeyCallbackDestChannelID = "packet_dest_channel" // AttributeKeyCallbackSequence denotes the sequence of the packet AttributeKeyCallbackSequence = "packet_sequence" - + // AttributeKeyCallbackBaseApplicationVersion denotes the callback base application version + AttributeKeyCallbackBaseApplicationVersion = "callback_base_application_version" // AttributeValueCallbackSuccess denotes that the callback is successfully executed AttributeValueCallbackSuccess = "success" // AttributeValueCallbackFailure denotes that the callback has failed to execute @@ -66,6 +67,7 @@ func EmitCallbackEvent( sdk.NewAttribute(AttributeKeyCallbackGasLimit, fmt.Sprintf("%d", callbackData.ExecutionGasLimit)), sdk.NewAttribute(AttributeKeyCallbackCommitGasLimit, fmt.Sprintf("%d", callbackData.CommitGasLimit)), sdk.NewAttribute(AttributeKeyCallbackSequence, fmt.Sprintf("%d", sequence)), + sdk.NewAttribute(AttributeKeyCallbackBaseApplicationVersion, callbackData.ApplicationVersion), } if err == nil { attributes = append(attributes, sdk.NewAttribute(AttributeKeyCallbackResult, AttributeValueCallbackSuccess)) diff --git a/modules/apps/callbacks/types/events_test.go b/modules/apps/callbacks/types/events_test.go index e0dab1bcecd..ae4ec7deaad 100644 --- a/modules/apps/callbacks/types/events_test.go +++ b/modules/apps/callbacks/types/events_test.go @@ -6,6 +6,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/ibc-go/modules/apps/callbacks/types" + transfertypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" ibctesting "github.com/cosmos/ibc-go/v9/testing" @@ -28,9 +29,10 @@ func (s *CallbacksTypesTestSuite) TestEvents() { ), types.CallbackTypeAcknowledgementPacket, types.CallbackData{ - CallbackAddress: ibctesting.TestAccAddress, - ExecutionGasLimit: 100_000, - CommitGasLimit: 200_000, + CallbackAddress: ibctesting.TestAccAddress, + ExecutionGasLimit: 100_000, + CommitGasLimit: 200_000, + ApplicationVersion: transfertypes.V1, }, nil, func() []abci.Event { @@ -46,6 +48,7 @@ func (s *CallbacksTypesTestSuite) TestEvents() { sdk.NewAttribute(types.AttributeKeyCallbackSourceChannelID, ibctesting.FirstChannelID), sdk.NewAttribute(types.AttributeKeyCallbackSequence, "1"), sdk.NewAttribute(types.AttributeKeyCallbackResult, types.AttributeValueCallbackSuccess), + sdk.NewAttribute(types.AttributeKeyCallbackBaseApplicationVersion, transfertypes.V1), ), }.ToABCIEvents() }, @@ -58,9 +61,10 @@ func (s *CallbacksTypesTestSuite) TestEvents() { ), types.CallbackTypeSendPacket, types.CallbackData{ - CallbackAddress: ibctesting.TestAccAddress, - ExecutionGasLimit: 100_000, - CommitGasLimit: 200_000, + CallbackAddress: ibctesting.TestAccAddress, + ExecutionGasLimit: 100_000, + CommitGasLimit: 200_000, + ApplicationVersion: transfertypes.V2, }, nil, func() []abci.Event { @@ -76,6 +80,7 @@ func (s *CallbacksTypesTestSuite) TestEvents() { sdk.NewAttribute(types.AttributeKeyCallbackSourceChannelID, ibctesting.FirstChannelID), sdk.NewAttribute(types.AttributeKeyCallbackSequence, "1"), sdk.NewAttribute(types.AttributeKeyCallbackResult, types.AttributeValueCallbackSuccess), + sdk.NewAttribute(types.AttributeKeyCallbackBaseApplicationVersion, transfertypes.V2), ), }.ToABCIEvents() }, @@ -88,9 +93,10 @@ func (s *CallbacksTypesTestSuite) TestEvents() { ), types.CallbackTypeTimeoutPacket, types.CallbackData{ - CallbackAddress: ibctesting.TestAccAddress, - ExecutionGasLimit: 100_000, - CommitGasLimit: 200_000, + CallbackAddress: ibctesting.TestAccAddress, + ExecutionGasLimit: 100_000, + CommitGasLimit: 200_000, + ApplicationVersion: transfertypes.V1, }, nil, func() []abci.Event { @@ -106,6 +112,7 @@ func (s *CallbacksTypesTestSuite) TestEvents() { sdk.NewAttribute(types.AttributeKeyCallbackSourceChannelID, ibctesting.FirstChannelID), sdk.NewAttribute(types.AttributeKeyCallbackSequence, "1"), sdk.NewAttribute(types.AttributeKeyCallbackResult, types.AttributeValueCallbackSuccess), + sdk.NewAttribute(types.AttributeKeyCallbackBaseApplicationVersion, transfertypes.V1), ), }.ToABCIEvents() }, @@ -118,9 +125,10 @@ func (s *CallbacksTypesTestSuite) TestEvents() { ), types.CallbackTypeReceivePacket, types.CallbackData{ - CallbackAddress: ibctesting.TestAccAddress, - ExecutionGasLimit: 100_000, - CommitGasLimit: 200_000, + CallbackAddress: ibctesting.TestAccAddress, + ExecutionGasLimit: 100_000, + CommitGasLimit: 200_000, + ApplicationVersion: transfertypes.V1, }, nil, func() []abci.Event { @@ -136,6 +144,7 @@ func (s *CallbacksTypesTestSuite) TestEvents() { sdk.NewAttribute(types.AttributeKeyCallbackDestChannelID, ibctesting.InvalidID), sdk.NewAttribute(types.AttributeKeyCallbackSequence, "1"), sdk.NewAttribute(types.AttributeKeyCallbackResult, types.AttributeValueCallbackSuccess), + sdk.NewAttribute(types.AttributeKeyCallbackBaseApplicationVersion, transfertypes.V1), ), }.ToABCIEvents() }, @@ -148,9 +157,10 @@ func (s *CallbacksTypesTestSuite) TestEvents() { ), "something", types.CallbackData{ - CallbackAddress: ibctesting.TestAccAddress, - ExecutionGasLimit: 100_000, - CommitGasLimit: 200_000, + CallbackAddress: ibctesting.TestAccAddress, + ExecutionGasLimit: 100_000, + CommitGasLimit: 200_000, + ApplicationVersion: transfertypes.V1, }, nil, func() []abci.Event { @@ -166,6 +176,7 @@ func (s *CallbacksTypesTestSuite) TestEvents() { sdk.NewAttribute(types.AttributeKeyCallbackSourceChannelID, ibctesting.FirstChannelID), sdk.NewAttribute(types.AttributeKeyCallbackSequence, "1"), sdk.NewAttribute(types.AttributeKeyCallbackResult, types.AttributeValueCallbackSuccess), + sdk.NewAttribute(types.AttributeKeyCallbackBaseApplicationVersion, transfertypes.V1), ), }.ToABCIEvents() }, @@ -178,9 +189,10 @@ func (s *CallbacksTypesTestSuite) TestEvents() { ), types.CallbackTypeAcknowledgementPacket, types.CallbackData{ - CallbackAddress: ibctesting.TestAccAddress, - ExecutionGasLimit: 100_000, - CommitGasLimit: 200_000, + CallbackAddress: ibctesting.TestAccAddress, + ExecutionGasLimit: 100_000, + CommitGasLimit: 200_000, + ApplicationVersion: transfertypes.V1, }, types.ErrNotPacketDataProvider, func() []abci.Event { @@ -197,6 +209,7 @@ func (s *CallbacksTypesTestSuite) TestEvents() { sdk.NewAttribute(types.AttributeKeyCallbackSequence, "1"), sdk.NewAttribute(types.AttributeKeyCallbackResult, types.AttributeValueCallbackFailure), sdk.NewAttribute(types.AttributeKeyCallbackError, types.ErrNotPacketDataProvider.Error()), + sdk.NewAttribute(types.AttributeKeyCallbackBaseApplicationVersion, transfertypes.V1), ), }.ToABCIEvents() }, diff --git a/modules/apps/callbacks/types/expected_keepers.go b/modules/apps/callbacks/types/expected_keepers.go index 16aa14938d6..717a9d6108f 100644 --- a/modules/apps/callbacks/types/expected_keepers.go +++ b/modules/apps/callbacks/types/expected_keepers.go @@ -22,6 +22,9 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCSendPacketCallback( cachedCtx sdk.Context, sourcePort string, @@ -31,6 +34,7 @@ type ContractKeeper interface { packetData []byte, contractAddress, packetSenderAddress string, + version string, ) error // IBCOnAcknowledgementPacketCallback is called in the source chain when a packet acknowledgement // is received. The packetSenderAddress is determined by the underlying module, and may be empty if @@ -43,6 +47,9 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCOnAcknowledgementPacketCallback( cachedCtx sdk.Context, packet channeltypes.Packet, @@ -50,6 +57,7 @@ type ContractKeeper interface { relayer sdk.AccAddress, contractAddress, packetSenderAddress string, + version string, ) error // IBCOnTimeoutPacketCallback is called in the source chain when a packet is not received before // the timeout height. The packetSenderAddress is determined by the underlying module, and may be @@ -62,22 +70,30 @@ type ContractKeeper interface { // validation on the origin of a given packet. It is recommended to perform the same validation // on all source chain callbacks (SendPacket, AcknowledgementPacket, TimeoutPacket). This // defensively guards against exploits due to incorrectly wired SendPacket ordering in IBC stacks. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCOnTimeoutPacketCallback( cachedCtx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, contractAddress, packetSenderAddress string, + version string, ) error // IBCReceivePacketCallback is called in the destination chain when a packet acknowledgement is written. // The contract is expected to handle the callback within the user defined gas limit, and handle any errors, // out of gas, or panics gracefully. // This entry point is called with a cached context. If an error is returned, then the changes in // this context will not be persisted, but the packet lifecycle will not be blocked. + // + // The version provided is the base application version for the given packet send. This allows + // contracts to determine how to unmarshal the packetData. IBCReceivePacketCallback( cachedCtx sdk.Context, packet ibcexported.PacketI, ack ibcexported.Acknowledgement, contractAddress string, + version string, ) error } diff --git a/modules/apps/callbacks/types/export_test.go b/modules/apps/callbacks/types/export_test.go index 4cc85624827..6d2434156cc 100644 --- a/modules/apps/callbacks/types/export_test.go +++ b/modules/apps/callbacks/types/export_test.go @@ -6,10 +6,10 @@ package types // GetCallbackData is a wrapper around getCallbackData to allow the function to be directly called in tests. func GetCallbackData( - packetData interface{}, srcPortID string, remainingGas, + packetData interface{}, version, srcPortID string, remainingGas, maxGas uint64, callbackKey string, ) (CallbackData, error) { - return getCallbackData(packetData, srcPortID, remainingGas, maxGas, callbackKey) + return getCallbackData(packetData, version, srcPortID, remainingGas, maxGas, callbackKey) } // GetCallbackAddress is a wrapper around getCallbackAddress to allow the function to be directly called in tests. From 2028e9a34891221b56717abb9201f3f19bf130c2 Mon Sep 17 00:00:00 2001 From: srdtrk <59252793+srdtrk@users.noreply.github.com> Date: Tue, 6 Aug 2024 03:27:47 +0200 Subject: [PATCH 61/78] imp!: removed 'ConsensusHost' interface (#6937) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * imp(02-client,03-connection)!: remove `ValidateSelfClient` (#6853) * imp: removed ValidateSelfClient * docs: updated a godoc * imp: deleted consensus host from core * imp(08-wasm): removed consensus host * imp: fix linter * imp: fixed linter * imp: fixed simapp * imp: updated docs * imp: removed more code * revert * imp: removed unneeded proto fields * imp: lint * lint * imp: auto generated code * imp: removed conflicts * imp: removed more code * fix: tests * feat: all tests passing * fix: added the reserved proto fields back with deprecation notice * style: linted * imp: regenerated proto * imp: review item * revert: conn name change * docs: added changelog * add godoc string of QueryConnectionHandshakeProof * add migration docs for ibc-go * Update CHANGELOG.md * update changelog * imp(proto): added deprecation notice to field * imp: ran 'make proto-all' * imp: removed unused keeper * Update CHANGELOG.md Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update docs/docs/05-migrations/13-v8-to-v9.md Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update docs/docs/05-migrations/13-v8-to-v9.md Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --------- Co-authored-by: Carlos Rodriguez Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- CHANGELOG.md | 1 + docs/docs/01-ibc/02-integration.md | 1 - docs/docs/05-migrations/13-v8-to-v9.md | 66 +++++ modules/apps/callbacks/testing/simapp/app.go | 2 +- modules/core/02-client/keeper/keeper.go | 28 +- modules/core/02-client/types/client.go | 7 - .../core/02-client/types/expected_keepers.go | 8 - .../core/03-connection/keeper/events_test.go | 15 +- .../core/03-connection/keeper/handshake.go | 74 ----- .../03-connection/keeper/handshake_test.go | 259 +----------------- modules/core/03-connection/keeper/verify.go | 73 ----- .../core/03-connection/keeper/verify_test.go | 136 --------- .../03-connection/types/connection_test.go | 1 - .../03-connection/types/expected_keepers.go | 2 - modules/core/03-connection/types/msgs.go | 80 +----- modules/core/03-connection/types/msgs_test.go | 86 ++---- modules/core/03-connection/types/tx.pb.go | 223 ++++++++------- modules/core/keeper/keeper.go | 17 +- modules/core/keeper/keeper_test.go | 33 --- modules/core/keeper/msg_server.go | 20 +- .../07-tendermint/consensus_host.go | 138 ---------- .../07-tendermint/consensus_host_test.go | 249 ----------------- modules/light-clients/08-wasm/CHANGELOG.md | 2 + .../08-wasm/testing/simapp/app.go | 2 +- .../08-wasm/types/consensus_host.go | 77 ------ .../08-wasm/types/consensus_host_test.go | 148 ---------- proto/ibc/core/connection/v1/tx.proto | 56 ++-- simapp/app.go | 2 +- testing/endpoint.go | 39 +-- testing/mock/consensus_host.go | 31 --- testing/simapp/app.go | 2 +- testing/solomachine.go | 50 +--- 32 files changed, 285 insertions(+), 1643 deletions(-) delete mode 100644 modules/light-clients/07-tendermint/consensus_host.go delete mode 100644 modules/light-clients/07-tendermint/consensus_host_test.go delete mode 100644 modules/light-clients/08-wasm/types/consensus_host.go delete mode 100644 modules/light-clients/08-wasm/types/consensus_host_test.go delete mode 100644 testing/mock/consensus_host.go diff --git a/CHANGELOG.md b/CHANGELOG.md index a876b3a9fe9..0bd77bc57eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -76,6 +76,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (light-clients/06-solomachine) [\#6888](https://github.com/cosmos/ibc-go/pull/6888) Remove `TypeClientMisbehaviour` constant and the `Type` method on `Misbehaviour`. * (light-clients/06-solomachine, light-clients/07-tendermint) [\#6891](https://github.com/cosmos/ibc-go/pull/6891) The `VerifyMembership` and `VerifyNonMembership` functions of solomachine's `ClientState` have been made private. The `VerifyMembership`, `VerifyNonMembership`, `GetTimestampAtHeight`, `Status` and `Initialize` functions of tendermint's `ClientState` have been made private. * (core/04-channel) [\#6902](https://github.com/cosmos/ibc-go/pull/6902) Add channel version to core application callbacks. +* (core/03-connection, core/02-client) [\#6937](https://github.com/cosmos/ibc-go/pull/6937) Remove 'ConsensusHost' interface, also removing self client and consensus state validation in the connection handshake. * (core/24-host) [\#6882](https://github.com/cosmos/ibc-go/issues/6882) All functions ending in `Path` have been removed from 24-host in favour of their sybling functions ending in `Key`. ### State Machine Breaking diff --git a/docs/docs/01-ibc/02-integration.md b/docs/docs/01-ibc/02-integration.md index 9d6142a7e6c..5af103bdf6e 100644 --- a/docs/docs/01-ibc/02-integration.md +++ b/docs/docs/01-ibc/02-integration.md @@ -98,7 +98,6 @@ func NewApp(...args) *App { appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), - ibctm.NewConsensusHost(app.StakingKeeper), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), diff --git a/docs/docs/05-migrations/13-v8-to-v9.md b/docs/docs/05-migrations/13-v8-to-v9.md index 68f0cd912d1..2d6af42cda7 100644 --- a/docs/docs/05-migrations/13-v8-to-v9.md +++ b/docs/docs/05-migrations/13-v8-to-v9.md @@ -17,6 +17,7 @@ There are four sections based on the four potential user groups of this document - [API removals](#api-removals) - [02-client](#02-client) - [03-connection](#03-connection) + - [Removal of self client and consensus state from connection handshake](#removal-of-self-client-and-consensus-state-from-connection-handshake) - [04-channel](#04-channel) - [05-port](#05-port) - [23-commitment](#23-commitment) @@ -57,6 +58,17 @@ govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). ## IBC core +- Because the self client and consensus state validation has been removed from the connection handshake (see section [Removal of self client and consensus state from connection handshake](#removal-of-self-client-and-consensus-state-from-connection-handshake) for more details), the IBC core keeper does not need the staking keeper anymore to introspect the (self) past historical info at a given height and construct the expected consensus state at that height. Thus, the signature of IBC core keeper constructor function `NewKeeper` has been updated: + +```diff +func NewKeeper( + cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace types.ParamSubspace, +- stakingKeeper clienttypes.StakingKeeper, + upgradeKeeper clienttypes.UpgradeKeeper, + scopedKeeper capabilitykeeper.ScopedKeeper, authority string, +) *Keeper +``` + ### API removals - The [`exported.ChannelI`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/channel.go#L3-L11) and [`exported.CounterpartyChannelI`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/channel.go#L13-L19) interfaces have been removed. Please use the concrete types. @@ -64,6 +76,7 @@ govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). - The [`Router` reference](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/keeper/keeper.go#L35) has been removed from the IBC core keeper in [#6138](https://github.com/cosmos/ibc-go/pull/6138). Please use `PortKeeper.Router` instead. - The [composite interface `QueryServer`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/types/query.go#L14-L19) has been removed from package `core/types`. Please use the granular `QueryServer` interfaces for IBC submodules directly. - The [`TypeClientMisbehaviour` constant](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/exported/client.go#L17) has been removed. +- The function [`SetConsensusHost`](https://github.com/cosmos/ibc-go/blob/v8.3.0/modules/core/keeper/keeper.go#L88-L96) has been removed because the self client and consensus state validation has been removed from the connection handshake. See section [Removal of self client and consensus state from connection handshake](#removal-of-self-client-and-consensus-state-from-connection-handshake) for more details. ### 02-client @@ -71,12 +84,52 @@ govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). - The function [`CreateLocalhostClient`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/02-client/keeper/keeper.go#L56) has been removed. The localhost client is now stateless. - The function [`NewClientProposalHandler`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/02-client/proposal_handler.go#L18) has been removed in [#6777](https://github.com/cosmos/ibc-go/pull/6777). - The deprecated [`ClientUpdateProposal` and `UpgradeProposal` messages](https://github.com/cosmos/ibc-go/blob/v8.0.0/proto/ibc/core/client/v1/client.proto#L67-L113) have been removed in [\#6782](https://github.com/cosmos/ibc-go/pull/6782). Please use [`MsgRecoverClient`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/proto/ibc/core/client/v1/tx.proto#L125-L138) and [`MsgIBCSoftwareUpgrade`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/proto/ibc/core/client/v1/tx.proto#L143-L158) respectively instead. +- Because the self client and consensus state validation has been removed from the connection handshake (see section [Removal of self client and consensus state from connection handshake](#removal-of-self-client-and-consensus-state-from-connection-handshake) for more details): + - The [ConsensusHost interface](https://github.com/cosmos/ibc-go/blob/v8.3.0/modules/core/02-client/types/client.go#L25-L29) has been removed. + - The function [`SetConsensusHost`](https://github.com/cosmos/ibc-go/blob/v8.3.0/modules/core/02-client/keeper/keeper.go#L61-L68) has been removed. + - The functions [`GetSelfConsensusState` and `ValidateSelfClient`](https://github.com/cosmos/ibc-go/blob/v8.3.0/modules/core/02-client/keeper/keeper.go#L256-L269) have been removed. ### 03-connection - The [functions `GetState()`, `GetClientID()`, `GetCounterparty()`, `GetVersions()`, and `GetDelayPeriod()`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/03-connection/types/connection.go#L25-L48) of the `Connection` type have been removed. - The [functions `GetClientID()`, `GetConnectionID()`, and `GetPrefix()`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/03-connection/types/connection.go#L79-L92) of the `Counterparty` type have been removed. +#### Removal of self client and consensus state from connection handshake + +The `ConnectionOpenTry` and `ConnectionOpenAck` handlers no longer validate that the light client on counterparty chain has a valid representation of the executing chain's consensus protocol (please see [#1128](https://github.com/cosmos/ibc/pull/1128) in cosmos/ibc repository for an exhaustive explanation of the reasoning). + +- The fields `client_state`, `proof_client`, `proof_consensus`, `consensus_height` and `host_consensus_state_proof` of `MsgConnectionOpenTry` and `MsgConnectionOpenAck` have been deprecated, and the signature of the constructor functions [`NewMsgConnectionOpenTry`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/03-connection/types/msgs.go#L78) and [`NewMsgConnectionOpenTry`](https://github.com/cosmos/ibc-go/blob/release/v9.0.x/modules/core/03-connection/types/msgs.go#L165) has been accordingly updated: + +```diff +func NewMsgConnectionOpenTry( + clientID, counterpartyConnectionID, counterpartyClientID string, +- counterpartyClient exported.ClientState, + counterpartyPrefix commitmenttypes.MerklePrefix, + counterpartyVersions []*Version, delayPeriod uint64, + initProof []byte, +- clientProof []byte, +- consensusProof []byte, + proofHeight lienttypes.Height, +- consensusHeight clienttypes.Height, + signer string, +) *MsgConnectionOpenTry + +func NewMsgConnectionOpenAck( + connectionID, counterpartyConnectionID string, +- counterpartyClient exported.ClientState, + tryProof []byte, +- clientProof []byte, +- consensusProof []byte, + proofHeight clienttypes.Height, +- consensusHeight clienttypes.Height, + version *Version, + signer string, +) *MsgConnectionOpenAck +``` + +- The functions [`VerifyClientState` and `VerifyClientConsensusState`](https://github.com/cosmos/ibc-go/blob/v8.3.0/modules/core/03-connection/keeper/verify.go#L20-L101) have been removed. +- The function [`UnpackInterfaces`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/03-connection/types/msgs.go#L166) has been removed. + ### 04-channel - The utility function [`QueryLatestConsensusState`](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/04-channel/client/utils/utils.go#L130) of the CLI has been removed. @@ -375,6 +428,19 @@ func AssertEvents( clientQueryServer := clientkeeper.NewQueryServer(app.IBCKeeper.ClientKeeper) ``` +- The signature of the function `QueryConnectionHandshakeProof` has changed, since the validation of self client and consensus state has been remove from the connection handshake: + +```diff +func (endpoint *Endpoint) QueryConnectionHandshakeProof() ( +- clientState exported.ClientState, clientProof, +- consensusProof []byte, consensusHeight clienttypes.Height, + connectionProof []byte, proofHeight clienttypes.Height, +) +``` + +- The functions [`GenerateClientStateProof` and `GenerateConsensusStateProof`](https://github.com/cosmos/ibc-go/blob/v8.0.0/testing/solomachine.go#L513-L547) +have been removed. + ### API deprecation notice - The testing package functions `Setup`, `SetupClients`, `SetupConnections`, `CreateConnections`, and `CreateChannels` of the `Coordinator` type have been deprecated and will be removed in v10. Please use the new functions `Setup`, `SetupClients`, `SetupConnections`, `CreateConnections`, `CreateChannels` of the `Path` type. diff --git a/modules/apps/callbacks/testing/simapp/app.go b/modules/apps/callbacks/testing/simapp/app.go index 9a89526745e..931a51ce690 100644 --- a/modules/apps/callbacks/testing/simapp/app.go +++ b/modules/apps/callbacks/testing/simapp/app.go @@ -405,7 +405,7 @@ func NewSimApp( app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, runtime.NewKVStoreService(keys[upgradetypes.StoreKey]), appCodec, homePath, app.BaseApp, authtypes.NewModuleAddress(govtypes.ModuleName).String()) app.IBCKeeper = ibckeeper.NewKeeper( - appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), ibctm.NewConsensusHost(app.StakingKeeper), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) // NOTE: The mock ContractKeeper is only created for testing. diff --git a/modules/core/02-client/keeper/keeper.go b/modules/core/02-client/keeper/keeper.go index 02bc0e9e18f..4f551220a7e 100644 --- a/modules/core/02-client/keeper/keeper.go +++ b/modules/core/02-client/keeper/keeper.go @@ -27,13 +27,12 @@ type Keeper struct { storeKey storetypes.StoreKey cdc codec.BinaryCodec router *types.Router - consensusHost types.ConsensusHost legacySubspace types.ParamSubspace upgradeKeeper types.UpgradeKeeper } // NewKeeper creates a new NewKeeper instance -func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, legacySubspace types.ParamSubspace, consensusHost types.ConsensusHost, uk types.UpgradeKeeper) *Keeper { +func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, legacySubspace types.ParamSubspace, uk types.UpgradeKeeper) *Keeper { router := types.NewRouter() localhostModule := localhost.NewLightClientModule(cdc, key) router.AddRoute(exported.Localhost, localhostModule) @@ -42,7 +41,6 @@ func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, legacySubspace ty storeKey: key, cdc: cdc, router: router, - consensusHost: consensusHost, legacySubspace: legacySubspace, upgradeKeeper: uk, } @@ -90,15 +88,6 @@ func (k *Keeper) Route(ctx sdk.Context, clientID string) (exported.LightClientMo return clientModule, nil } -// SetConsensusHost sets a custom ConsensusHost for self client state and consensus state validation. -func (k *Keeper) SetConsensusHost(consensusHost types.ConsensusHost) { - if consensusHost == nil { - panic(errors.New("cannot set a nil self consensus host")) - } - - k.consensusHost = consensusHost -} - // GenerateClientIdentifier returns the next client identifier. func (k *Keeper) GenerateClientIdentifier(ctx sdk.Context, clientType string) string { nextClientSeq := k.GetNextClientSequence(ctx) @@ -315,21 +304,6 @@ func (k *Keeper) GetLatestClientConsensusState(ctx sdk.Context, clientID string) return k.GetClientConsensusState(ctx, clientID, clientModule.LatestHeight(ctx, clientID)) } -// GetSelfConsensusState introspects the (self) past historical info at a given height -// and returns the expected consensus state at that height. -// For now, can only retrieve self consensus states for the current revision -func (k *Keeper) GetSelfConsensusState(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) { - return k.consensusHost.GetSelfConsensusState(ctx, height) -} - -// ValidateSelfClient validates the client parameters for a client of the running chain. -// This function is only used to validate the client state the counterparty stores for this chain. -// NOTE: If the client type is not of type Tendermint then delegate to a custom client validator function. -// This allows support for non-Tendermint clients, for example 08-wasm clients. -func (k *Keeper) ValidateSelfClient(ctx sdk.Context, clientState exported.ClientState) error { - return k.consensusHost.ValidateSelfClient(ctx, clientState) -} - // VerifyMembership retrieves the light client module for the clientID and verifies the proof of the existence of a key-value pair at a specified height. func (k *Keeper) VerifyMembership(ctx sdk.Context, clientID string, height exported.Height, delayTimePeriod uint64, delayBlockPeriod uint64, proof []byte, path exported.Path, value []byte) error { clientModule, err := k.Route(ctx, clientID) diff --git a/modules/core/02-client/types/client.go b/modules/core/02-client/types/client.go index 993f43d570a..6e3df24694e 100644 --- a/modules/core/02-client/types/client.go +++ b/modules/core/02-client/types/client.go @@ -11,7 +11,6 @@ import ( errorsmod "cosmossdk.io/errors" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" host "github.com/cosmos/ibc-go/v9/modules/core/24-host" "github.com/cosmos/ibc-go/v9/modules/core/exported" @@ -22,12 +21,6 @@ var ( _ codectypes.UnpackInterfacesMessage = (*ConsensusStateWithHeight)(nil) ) -// ConsensusHost defines an interface used to validate an IBC ClientState and ConsensusState against the host chain's underlying consensus parameters. -type ConsensusHost interface { - GetSelfConsensusState(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) - ValidateSelfClient(ctx sdk.Context, clientState exported.ClientState) error -} - // NewIdentifiedClientState creates a new IdentifiedClientState instance func NewIdentifiedClientState(clientID string, clientState exported.ClientState) IdentifiedClientState { msg, ok := clientState.(proto.Message) diff --git a/modules/core/02-client/types/expected_keepers.go b/modules/core/02-client/types/expected_keepers.go index ed4caa5e881..914dfd080f8 100644 --- a/modules/core/02-client/types/expected_keepers.go +++ b/modules/core/02-client/types/expected_keepers.go @@ -2,21 +2,13 @@ package types import ( "context" - "time" upgradetypes "cosmossdk.io/x/upgrade/types" sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) -// StakingKeeper expected staking keeper -type StakingKeeper interface { - GetHistoricalInfo(ctx context.Context, height int64) (stakingtypes.HistoricalInfo, error) - UnbondingTime(ctx context.Context) (time.Duration, error) -} - // UpgradeKeeper expected upgrade keeper type UpgradeKeeper interface { GetUpgradePlan(ctx context.Context) (plan upgradetypes.Plan, err error) diff --git a/modules/core/03-connection/keeper/events_test.go b/modules/core/03-connection/keeper/events_test.go index 8c718da8545..43ceaacdbd7 100644 --- a/modules/core/03-connection/keeper/events_test.go +++ b/modules/core/03-connection/keeper/events_test.go @@ -48,13 +48,12 @@ func (suite *KeeperTestSuite) TestMsgConnectionOpenTryEvents() { suite.Require().NoError(path.EndpointB.UpdateClient()) - counterpartyClient, clientProof, consensusProof, consensusHeight, initProof, proofHeight := path.EndpointB.QueryConnectionHandshakeProof() + initProof, proofHeight := path.EndpointB.QueryConnectionHandshakeProof() msg := types.NewMsgConnectionOpenTry( path.EndpointB.ClientID, path.EndpointB.Counterparty.ConnectionID, path.EndpointB.Counterparty.ClientID, - counterpartyClient, path.EndpointB.Counterparty.Chain.GetPrefix(), []*types.Version{ibctesting.ConnectionVersion}, path.EndpointB.ConnectionConfig.DelayPeriod, - initProof, clientProof, consensusProof, - proofHeight, consensusHeight, + path.EndpointB.Counterparty.Chain.GetPrefix(), []*types.Version{ibctesting.ConnectionVersion}, + path.EndpointB.ConnectionConfig.DelayPeriod, initProof, proofHeight, path.EndpointB.Chain.SenderAccount.GetAddress().String(), ) @@ -88,13 +87,11 @@ func (suite *KeeperTestSuite) TestMsgConnectionOpenAckEvents() { suite.Require().NoError(path.EndpointA.UpdateClient()) - counterpartyClient, clientProof, consensusProof, consensusHeight, tryProof, proofHeight := path.EndpointA.QueryConnectionHandshakeProof() + tryProof, proofHeight := path.EndpointA.QueryConnectionHandshakeProof() msg := types.NewMsgConnectionOpenAck( - path.EndpointA.ConnectionID, path.EndpointA.Counterparty.ConnectionID, counterpartyClient, - tryProof, clientProof, consensusProof, - proofHeight, consensusHeight, - ibctesting.ConnectionVersion, + path.EndpointA.ConnectionID, path.EndpointA.Counterparty.ConnectionID, + tryProof, proofHeight, ibctesting.ConnectionVersion, path.EndpointA.Chain.SenderAccount.GetAddress().String(), ) diff --git a/modules/core/03-connection/keeper/handshake.go b/modules/core/03-connection/keeper/handshake.go index e43733e4ed9..1e646b787e3 100644 --- a/modules/core/03-connection/keeper/handshake.go +++ b/modules/core/03-connection/keeper/handshake.go @@ -9,7 +9,6 @@ import ( clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types" commitmenttypes "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types" - ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" "github.com/cosmos/ibc-go/v9/modules/core/exported" ) @@ -67,37 +66,13 @@ func (k *Keeper) ConnOpenTry( counterparty types.Counterparty, // counterpartyConnectionIdentifier, counterpartyPrefix and counterpartyClientIdentifier delayPeriod uint64, clientID string, // clientID of chainA - clientState exported.ClientState, // clientState that chainA has for chainB counterpartyVersions []*types.Version, // supported versions of chain A initProof []byte, // proof that chainA stored connectionEnd in state (on ConnOpenInit) - clientProof []byte, // proof that chainA stored a light client of chainB - consensusProof []byte, // proof that chainA stored chainB's consensus state at consensus height proofHeight exported.Height, // height at which relayer constructs proof of A storing connectionEnd in state - consensusHeight exported.Height, // latest height of chain B which chain A has stored in its chain B client ) (string, error) { // generate a new connection connectionID := k.GenerateConnectionIdentifier(ctx) - // check that the consensus height the counterparty chain is using to store a representation - // of this chain's consensus state is at a height in the past - selfHeight := clienttypes.GetSelfHeight(ctx) - if consensusHeight.GTE(selfHeight) { - return "", errorsmod.Wrapf( - ibcerrors.ErrInvalidHeight, - "consensus height is greater than or equal to the current block height (%s >= %s)", consensusHeight, selfHeight, - ) - } - - // validate client parameters of a chainB client stored on chainA - if err := k.clientKeeper.ValidateSelfClient(ctx, clientState); err != nil { - return "", err - } - - expectedConsensusState, err := k.clientKeeper.GetSelfConsensusState(ctx, consensusHeight) - if err != nil { - return "", errorsmod.Wrapf(err, "self consensus state not found for height %s", consensusHeight.String()) - } - // expectedConnection defines Chain A's ConnectionEnd // NOTE: chain A's counterparty is chain B (i.e where this code is executed) // NOTE: chainA and chainB must have the same delay period @@ -124,18 +99,6 @@ func (k *Keeper) ConnOpenTry( return "", err } - // Check that ChainA stored the clientState provided in the msg - if err := k.VerifyClientState(ctx, connection, proofHeight, clientProof, clientState); err != nil { - return "", err - } - - // Check that ChainA stored the correct ConsensusState of chainB at the given consensusHeight - if err := k.VerifyClientConsensusState( - ctx, connection, proofHeight, consensusHeight, consensusProof, expectedConsensusState, - ); err != nil { - return "", err - } - // store connection in chainB state if err := k.addConnectionToClient(ctx, clientID, connectionID); err != nil { return "", errorsmod.Wrapf(err, "failed to add connection with ID %s to client with ID %s", connectionID, clientID) @@ -158,25 +121,11 @@ func (k *Keeper) ConnOpenTry( func (k *Keeper) ConnOpenAck( ctx sdk.Context, connectionID string, - clientState exported.ClientState, // client state for chainA on chainB version *types.Version, // version that ChainB chose in ConnOpenTry counterpartyConnectionID string, tryProof []byte, // proof that connectionEnd was added to ChainB state in ConnOpenTry - clientProof []byte, // proof of client state on chainB for chainA - consensusProof []byte, // proof that chainB has stored ConsensusState of chainA on its client proofHeight exported.Height, // height that relayer constructed proofTry - consensusHeight exported.Height, // latest height of chainA that chainB has stored on its chainA client ) error { - // check that the consensus height the counterparty chain is using to store a representation - // of this chain's consensus state is at a height in the past - selfHeight := clienttypes.GetSelfHeight(ctx) - if consensusHeight.GTE(selfHeight) { - return errorsmod.Wrapf( - ibcerrors.ErrInvalidHeight, - "consensus height is greater than or equal to the current block height (%s >= %s)", consensusHeight, selfHeight, - ) - } - // Retrieve connection connection, found := k.GetConnection(ctx, connectionID) if !found { @@ -199,17 +148,6 @@ func (k *Keeper) ConnOpenAck( ) } - // validate client parameters of a chainA client stored on chainB - if err := k.clientKeeper.ValidateSelfClient(ctx, clientState); err != nil { - return err - } - - // Retrieve chainA's consensus state at consensusheight - expectedConsensusState, err := k.clientKeeper.GetSelfConsensusState(ctx, consensusHeight) - if err != nil { - return errorsmod.Wrapf(err, "self consensus state not found for height %s", consensusHeight.String()) - } - prefix := k.GetCommitmentPrefix() expectedCounterparty := types.NewCounterparty(connection.ClientId, connectionID, commitmenttypes.NewMerklePrefix(prefix.Bytes())) expectedConnection := types.NewConnectionEnd(types.TRYOPEN, connection.Counterparty.ClientId, expectedCounterparty, []*types.Version{version}, connection.DelayPeriod) @@ -222,18 +160,6 @@ func (k *Keeper) ConnOpenAck( return err } - // Check that ChainB stored the clientState provided in the msg - if err := k.VerifyClientState(ctx, connection, proofHeight, clientProof, clientState); err != nil { - return err - } - - // Ensure that ChainB has stored the correct ConsensusState for chainA at the consensusHeight - if err := k.VerifyClientConsensusState( - ctx, connection, proofHeight, consensusHeight, consensusProof, expectedConsensusState, - ); err != nil { - return err - } - k.Logger(ctx).Info("connection state updated", "connection-id", connectionID, "previous-state", types.INIT, "new-state", types.OPEN) defer telemetry.IncrCounter(1, "ibc", "connection", "open-ack") diff --git a/modules/core/03-connection/keeper/handshake_test.go b/modules/core/03-connection/keeper/handshake_test.go index f697a2cf27a..e233c68fbe3 100644 --- a/modules/core/03-connection/keeper/handshake_test.go +++ b/modules/core/03-connection/keeper/handshake_test.go @@ -3,15 +3,9 @@ package keeper_test import ( "time" - sdk "github.com/cosmos/cosmos-sdk/types" - - clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types" host "github.com/cosmos/ibc-go/v9/modules/core/24-host" - "github.com/cosmos/ibc-go/v9/modules/core/exported" - ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" ibctesting "github.com/cosmos/ibc-go/v9/testing" - "github.com/cosmos/ibc-go/v9/testing/mock" ) // TestConnOpenInit - chainA initializes (INIT state) a connection with @@ -97,11 +91,9 @@ func (suite *KeeperTestSuite) TestConnOpenInit() { // connection on chainA is INIT func (suite *KeeperTestSuite) TestConnOpenTry() { var ( - path *ibctesting.Path - delayPeriod uint64 - versions []*types.Version - consensusHeight exported.Height - counterpartyClient exported.ClientState + path *ibctesting.Path + delayPeriod uint64 + versions []*types.Version ) testCases := []struct { @@ -112,9 +104,6 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { {"success", func() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) }, true}, {"success with delay period", func() { err := path.EndpointA.ConnOpenInit() @@ -129,111 +118,22 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { suite.coordinator.CommitBlock(suite.chainA) err = path.EndpointB.UpdateClient() suite.Require().NoError(err) - - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) }, true}, - {"invalid counterparty client", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - - // Set an invalid client of chainA on chainB - tmClient, ok := counterpartyClient.(*ibctm.ClientState) - suite.Require().True(ok) - tmClient.ChainId = "wrongchainid" - - suite.chainA.App.GetIBCKeeper().ClientKeeper.SetClientState(suite.chainA.GetContext(), path.EndpointA.ClientID, tmClient) - }, false}, - {"consensus height >= latest height", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - - consensusHeight = clienttypes.GetSelfHeight(suite.chainB.GetContext()) - }, false}, - {"self consensus state not found", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - - consensusHeight = clienttypes.NewHeight(0, 1) - }, false}, {"counterparty versions is empty", func() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - versions = nil }, false}, {"counterparty versions don't have a match", func() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - version := types.NewVersion("0.0", nil) versions = []*types.Version{version} }, false}, {"connection state verification failed", func() { // chainA connection not created - - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - }, false}, - {"client state verification failed", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - - // modify counterparty client without setting in store so it still passes validate but fails proof verification - tmClient, ok := counterpartyClient.(*ibctm.ClientState) - suite.Require().True(ok) - tmClient.LatestHeight, ok = tmClient.LatestHeight.Increment().(clienttypes.Height) - suite.Require().True(ok) - }, false}, - {"consensus state verification failed", func() { - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - - // give chainA wrong consensus state for chainB - consState, found := suite.chainA.App.GetIBCKeeper().ClientKeeper.GetLatestClientConsensusState(suite.chainA.GetContext(), path.EndpointA.ClientID) - suite.Require().True(found) - - tmConsState, ok := consState.(*ibctm.ConsensusState) - suite.Require().True(ok) - - tmConsState.Timestamp = time.Now() - suite.chainA.App.GetIBCKeeper().ClientKeeper.SetClientConsensusState(suite.chainA.GetContext(), path.EndpointA.ClientID, path.EndpointA.GetClientLatestHeight(), tmConsState) - - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - }, false}, - {"override self consensus host", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainA to pass as counterpartyClient - counterpartyClient = suite.chainA.GetClientState(path.EndpointA.ClientID) - - mockValidator := mock.ConsensusHost{ - ValidateSelfClientFn: func(ctx sdk.Context, clientState exported.ClientState) error { - return mock.MockApplicationCallbackError - }, - } - - suite.chainB.App.GetIBCKeeper().SetConsensusHost(&mockValidator) }, false}, } @@ -241,10 +141,9 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { tc := tc suite.Run(tc.msg, func() { - suite.SetupTest() // reset - consensusHeight = clienttypes.ZeroHeight() // may be changed in malleate - versions = types.GetCompatibleVersions() // may be changed in malleate - delayPeriod = 0 // may be changed in malleate + suite.SetupTest() // reset + versions = types.GetCompatibleVersions() // may be changed in malleate + delayPeriod = 0 // may be changed in malleate path = ibctesting.NewPath(suite.chainA, suite.chainB) path.SetupClients() @@ -259,22 +158,9 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { connectionKey := host.ConnectionKey(path.EndpointA.ConnectionID) initProof, proofHeight := suite.chainA.QueryProof(connectionKey) - if consensusHeight.IsZero() { - // retrieve consensus state height to provide proof for - consensusHeight = path.EndpointA.GetClientLatestHeight() - } - - consensusKey := host.FullConsensusStateKey(path.EndpointA.ClientID, consensusHeight) - consensusProof, _ := suite.chainA.QueryProof(consensusKey) - - // retrieve proof of counterparty clientstate on chainA - clientKey := host.FullClientStateKey(path.EndpointA.ClientID) - clientProof, _ := suite.chainA.QueryProof(clientKey) - connectionID, err := suite.chainB.App.GetIBCKeeper().ConnectionKeeper.ConnOpenTry( - suite.chainB.GetContext(), counterparty, delayPeriod, path.EndpointB.ClientID, counterpartyClient, - versions, initProof, clientProof, consensusProof, - proofHeight, consensusHeight, + suite.chainB.GetContext(), counterparty, delayPeriod, path.EndpointB.ClientID, + versions, initProof, proofHeight, ) if tc.expPass { @@ -292,10 +178,8 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { // the initialization (TRYINIT) of the connection on Chain B (ID #2). func (suite *KeeperTestSuite) TestConnOpenAck() { var ( - path *ibctesting.Path - consensusHeight exported.Height - version *types.Version - counterpartyClient exported.ClientState + path *ibctesting.Path + version *types.Version ) testCases := []struct { @@ -309,57 +193,20 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err = path.EndpointB.ConnOpenTry() suite.Require().NoError(err) - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) }, true}, - {"invalid counterparty client", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - err = path.EndpointB.ConnOpenTry() - suite.Require().NoError(err) - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - - // Set an invalid client of chainA on chainB - tmClient, ok := counterpartyClient.(*ibctm.ClientState) - suite.Require().True(ok) - tmClient.ChainId = "wrongchainid" - - suite.chainB.App.GetIBCKeeper().ClientKeeper.SetClientState(suite.chainB.GetContext(), path.EndpointB.ClientID, tmClient) - }, false}, - {"consensus height >= latest height", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - - err = path.EndpointB.ConnOpenTry() - suite.Require().NoError(err) - - consensusHeight = clienttypes.GetSelfHeight(suite.chainA.GetContext()) - }, false}, {"connection not found", func() { // connections are never created - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) }, false}, {"invalid counterparty connection ID", func() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - err = path.EndpointB.ConnOpenTry() suite.Require().NoError(err) // modify connB to set counterparty connection identifier to wrong identifier - path.EndpointA.UpdateConnection(func(c *types.ConnectionEnd) { c.Counterparty.ConnectionId = "badconnectionid" }) + path.EndpointA.UpdateConnection(func(c *types.ConnectionEnd) { c.Counterparty.ConnectionId = ibctesting.InvalidID }) + path.EndpointB.ConnectionID = ibctesting.InvalidID err = path.EndpointA.UpdateClient() suite.Require().NoError(err) @@ -372,9 +219,6 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - err = path.EndpointB.ConnOpenTry() suite.Require().NoError(err) @@ -386,9 +230,6 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - err = path.EndpointB.ConnOpenTry() suite.Require().NoError(err) @@ -398,9 +239,6 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - err = path.EndpointB.ConnOpenTry() suite.Require().NoError(err) @@ -411,9 +249,6 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - err = path.EndpointB.ConnOpenTry() suite.Require().NoError(err) @@ -423,69 +258,15 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - err = path.EndpointB.ConnOpenTry() suite.Require().NoError(err) version = types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"ORDER_ORDERED", "ORDER_UNORDERED", "ORDER_DAG"}) }, false}, - {"self consensus state not found", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - - err = path.EndpointB.ConnOpenTry() - suite.Require().NoError(err) - - consensusHeight = clienttypes.NewHeight(0, 1) - }, false}, {"connection state verification failed", func() { // chainB connection is not in INIT err := path.EndpointA.ConnOpenInit() suite.Require().NoError(err) - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - }, false}, - {"client state verification failed", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - - // modify counterparty client without setting in store so it still passes validate but fails proof verification - tmClient, ok := counterpartyClient.(*ibctm.ClientState) - suite.Require().True(ok) - tmClient.LatestHeight, ok = tmClient.LatestHeight.Increment().(clienttypes.Height) - suite.Require().True(ok) - - err = path.EndpointB.ConnOpenTry() - suite.Require().NoError(err) - }, false}, - {"consensus state verification failed", func() { - err := path.EndpointA.ConnOpenInit() - suite.Require().NoError(err) - - // retrieve client state of chainB to pass as counterpartyClient - counterpartyClient = suite.chainB.GetClientState(path.EndpointB.ClientID) - - // give chainB wrong consensus state for chainA - consState, found := suite.chainB.App.GetIBCKeeper().ClientKeeper.GetLatestClientConsensusState(suite.chainB.GetContext(), path.EndpointB.ClientID) - suite.Require().True(found) - - tmConsState, ok := consState.(*ibctm.ConsensusState) - suite.Require().True(ok) - - tmConsState.Timestamp = tmConsState.Timestamp.Add(time.Second) - suite.chainB.App.GetIBCKeeper().ClientKeeper.SetClientConsensusState(suite.chainB.GetContext(), path.EndpointB.ClientID, path.EndpointB.GetClientLatestHeight(), tmConsState) - - err = path.EndpointB.ConnOpenTry() - suite.Require().NoError(err) }, false}, } @@ -494,7 +275,6 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { suite.Run(tc.msg, func() { suite.SetupTest() // reset version = types.GetCompatibleVersions()[0] // must be explicitly changed in malleate - consensusHeight = clienttypes.ZeroHeight() // must be explicitly changed in malleate path = ibctesting.NewPath(suite.chainA, suite.chainB) path.SetupClients() @@ -507,20 +287,9 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { connectionKey := host.ConnectionKey(path.EndpointB.ConnectionID) tryProof, proofHeight := suite.chainB.QueryProof(connectionKey) - if consensusHeight.IsZero() { - // retrieve consensus state height to provide proof for - consensusHeight = path.EndpointB.GetClientLatestHeight() - } - consensusKey := host.FullConsensusStateKey(path.EndpointB.ClientID, consensusHeight) - consensusProof, _ := suite.chainB.QueryProof(consensusKey) - - // retrieve proof of counterparty clientstate on chainA - clientKey := host.FullClientStateKey(path.EndpointB.ClientID) - clientProof, _ := suite.chainB.QueryProof(clientKey) - err = suite.chainA.App.GetIBCKeeper().ConnectionKeeper.ConnOpenAck( - suite.chainA.GetContext(), path.EndpointA.ConnectionID, counterpartyClient, version, path.EndpointB.ConnectionID, - tryProof, clientProof, consensusProof, proofHeight, consensusHeight, + suite.chainA.GetContext(), path.EndpointA.ConnectionID, version, + path.EndpointB.ConnectionID, tryProof, proofHeight, ) if tc.expPass { diff --git a/modules/core/03-connection/keeper/verify.go b/modules/core/03-connection/keeper/verify.go index 34db455dc10..a46f4cf0a99 100644 --- a/modules/core/03-connection/keeper/verify.go +++ b/modules/core/03-connection/keeper/verify.go @@ -15,79 +15,6 @@ import ( "github.com/cosmos/ibc-go/v9/modules/core/exported" ) -// VerifyClientState verifies a proof of a client state of the running machine -// stored on the target machine -func (k *Keeper) VerifyClientState( - ctx sdk.Context, - connection types.ConnectionEnd, - height exported.Height, - proof []byte, - clientState exported.ClientState, -) error { - clientID := connection.ClientId - if status := k.clientKeeper.GetClientStatus(ctx, clientID); status != exported.Active { - return errorsmod.Wrapf(clienttypes.ErrClientNotActive, "client (%s) status is %s", clientID, status) - } - - merklePath := commitmenttypes.NewMerklePath(host.FullClientStateKey(connection.Counterparty.ClientId)) - merklePath, err := commitmenttypes.ApplyPrefix(connection.Counterparty.Prefix, merklePath) - if err != nil { - return err - } - - bz, err := k.cdc.MarshalInterface(clientState) - if err != nil { - return err - } - - if err := k.clientKeeper.VerifyMembership( - ctx, clientID, height, - 0, 0, // skip delay period checks for non-packet processing verification - proof, merklePath, bz, - ); err != nil { - return errorsmod.Wrapf(err, "failed client state verification for target client: %s", clientID) - } - - return nil -} - -// VerifyClientConsensusState verifies a proof of the consensus state of the -// specified client stored on the target machine. -func (k *Keeper) VerifyClientConsensusState( - ctx sdk.Context, - connection types.ConnectionEnd, - height exported.Height, - consensusHeight exported.Height, - proof []byte, - consensusState exported.ConsensusState, -) error { - clientID := connection.ClientId - if status := k.clientKeeper.GetClientStatus(ctx, clientID); status != exported.Active { - return errorsmod.Wrapf(clienttypes.ErrClientNotActive, "client (%s) status is %s", clientID, status) - } - - merklePath := commitmenttypes.NewMerklePath(host.FullConsensusStateKey(connection.Counterparty.ClientId, consensusHeight)) - merklePath, err := commitmenttypes.ApplyPrefix(connection.Counterparty.Prefix, merklePath) - if err != nil { - return err - } - - bz, err := k.cdc.MarshalInterface(consensusState) - if err != nil { - return err - } - - if err := k.clientKeeper.VerifyMembership( - ctx, clientID, height, - 0, 0, // skip delay period checks for non-packet processing verification - proof, merklePath, bz, - ); err != nil { - return errorsmod.Wrapf(err, "failed consensus state verification for client (%s)", clientID) - } - - return nil -} - // VerifyConnectionState verifies a proof of the connection state of the // specified connection end stored on the target machine. func (k *Keeper) VerifyConnectionState( diff --git a/modules/core/03-connection/keeper/verify_test.go b/modules/core/03-connection/keeper/verify_test.go index c3e2e02a2de..4177aebbbce 100644 --- a/modules/core/03-connection/keeper/verify_test.go +++ b/modules/core/03-connection/keeper/verify_test.go @@ -16,142 +16,6 @@ import ( var defaultTimeoutHeight = clienttypes.NewHeight(1, 100000) -// TestVerifyClientState verifies a client state of chainA -// stored on path.EndpointB (which is on chainB) -func (suite *KeeperTestSuite) TestVerifyClientState() { - var ( - path *ibctesting.Path - heightDiff uint64 - ) - cases := []struct { - name string - malleate func() - expPass bool - }{ - {"verification success", func() {}, true}, - {"client state not found", func() { - path.EndpointA.UpdateConnection(func(c *types.ConnectionEnd) { c.ClientId = ibctesting.InvalidID }) - }, false}, - {"consensus state for proof height not found", func() { - heightDiff = 5 - }, false}, - {"verification failed", func() { - counterpartyClient, ok := path.EndpointB.GetClientState().(*ibctm.ClientState) - suite.Require().True(ok) - counterpartyClient.ChainId = "wrongChainID" - path.EndpointB.SetClientState(counterpartyClient) - }, false}, - {"client status is not active - client is expired", func() { - clientState, ok := path.EndpointA.GetClientState().(*ibctm.ClientState) - suite.Require().True(ok) - clientState.FrozenHeight = clienttypes.NewHeight(0, 1) - path.EndpointA.SetClientState(clientState) - }, false}, - } - - for _, tc := range cases { - tc := tc - - suite.Run(tc.name, func() { - suite.SetupTest() // reset - heightDiff = 0 // must be explicitly changed - - path = ibctesting.NewPath(suite.chainA, suite.chainB) - path.SetupConnections() - - tc.malleate() - - counterpartyClient, clientProof := path.EndpointB.QueryClientStateProof() - proofHeight := clienttypes.NewHeight(1, uint64(suite.chainB.GetContext().BlockHeight()-1)) - - connection := path.EndpointA.GetConnection() - - err := suite.chainA.App.GetIBCKeeper().ConnectionKeeper.VerifyClientState( - suite.chainA.GetContext(), connection, - malleateHeight(proofHeight, heightDiff), clientProof, counterpartyClient, - ) - - if tc.expPass { - suite.Require().NoError(err) - } else { - suite.Require().Error(err) - } - }) - } -} - -// TestVerifyClientConsensusState verifies that the consensus state of -// chainA stored on path.EndpointB.ClientID (which is on chainB) matches the consensus -// state for chainA at that height. -func (suite *KeeperTestSuite) TestVerifyClientConsensusState() { - var ( - path *ibctesting.Path - heightDiff uint64 - ) - cases := []struct { - name string - malleate func() - expPass bool - }{ - {"verification success", func() {}, true}, - {"client state not found", func() { - path.EndpointA.UpdateConnection(func(c *types.ConnectionEnd) { c.ClientId = ibctesting.InvalidID }) - }, false}, - {"consensus state not found", func() { - heightDiff = 5 - }, false}, - {"verification failed", func() { - // give chainB wrong consensus state for chainA - consState, found := suite.chainB.App.GetIBCKeeper().ClientKeeper.GetLatestClientConsensusState(suite.chainB.GetContext(), path.EndpointB.ClientID) - suite.Require().True(found) - - tmConsState, ok := consState.(*ibctm.ConsensusState) - suite.Require().True(ok) - - tmConsState.Timestamp = time.Now() - suite.chainB.App.GetIBCKeeper().ClientKeeper.SetClientConsensusState(suite.chainB.GetContext(), path.EndpointB.ClientID, path.EndpointB.GetClientLatestHeight(), tmConsState) - - suite.coordinator.CommitBlock(suite.chainB) - }, false}, - {"client status is not active - client is expired", func() { - clientState, ok := path.EndpointA.GetClientState().(*ibctm.ClientState) - suite.Require().True(ok) - clientState.FrozenHeight = clienttypes.NewHeight(0, 1) - path.EndpointA.SetClientState(clientState) - }, false}, - } - - for _, tc := range cases { - tc := tc - - suite.Run(tc.name, func() { - suite.SetupTest() // reset - heightDiff = 0 // must be explicitly changed in malleate - path = ibctesting.NewPath(suite.chainA, suite.chainB) - path.SetupConnections() - - tc.malleate() - - connection := path.EndpointA.GetConnection() - proof, consensusHeight := suite.chainB.QueryConsensusStateProof(path.EndpointB.ClientID) - proofHeight := clienttypes.NewHeight(1, uint64(suite.chainB.GetContext().BlockHeight()-1)) - consensusState, err := suite.chainA.App.GetIBCKeeper().ClientKeeper.GetSelfConsensusState(suite.chainA.GetContext(), consensusHeight) - suite.Require().NoError(err) - - err = suite.chainA.App.GetIBCKeeper().ConnectionKeeper.VerifyClientConsensusState( - suite.chainA.GetContext(), connection, - malleateHeight(proofHeight, heightDiff), consensusHeight, proof, consensusState, - ) - - if tc.expPass { - suite.Require().NoError(err) - } else { - suite.Require().Error(err) - } - }) - } -} - // TestVerifyConnectionState verifies the connection state of the connection // on chainB. The connections on chainA and chainB are fully opened. func (suite *KeeperTestSuite) TestVerifyConnectionState() { diff --git a/modules/core/03-connection/types/connection_test.go b/modules/core/03-connection/types/connection_test.go index 0bfae042558..ba88f05b8e9 100644 --- a/modules/core/03-connection/types/connection_test.go +++ b/modules/core/03-connection/types/connection_test.go @@ -12,7 +12,6 @@ import ( ) var ( - chainID = "gaiamainnet" connectionID = "connection-0" clientID = "clientidone" connectionID2 = "connectionidtwo" diff --git a/modules/core/03-connection/types/expected_keepers.go b/modules/core/03-connection/types/expected_keepers.go index a0eb8ccb71f..ff13cf0d742 100644 --- a/modules/core/03-connection/types/expected_keepers.go +++ b/modules/core/03-connection/types/expected_keepers.go @@ -12,8 +12,6 @@ type ClientKeeper interface { GetClientStatus(ctx sdk.Context, clientID string) exported.Status GetClientState(ctx sdk.Context, clientID string) (exported.ClientState, bool) GetClientConsensusState(ctx sdk.Context, clientID string, height exported.Height) (exported.ConsensusState, bool) - GetSelfConsensusState(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) - ValidateSelfClient(ctx sdk.Context, clientState exported.ClientState) error VerifyMembership(ctx sdk.Context, clientID string, height exported.Height, delayTimePeriod uint64, delayBlockPeriod uint64, proof []byte, path exported.Path, value []byte) error VerifyNonMembership(ctx sdk.Context, clientID string, height exported.Height, delayTimePeriod uint64, delayBlockPeriod uint64, proof []byte, path exported.Path) error IterateClientStates(ctx sdk.Context, prefix []byte, cb func(string, exported.ClientState) bool) diff --git a/modules/core/03-connection/types/msgs.go b/modules/core/03-connection/types/msgs.go index 79a741d3429..ed69c34bcf8 100644 --- a/modules/core/03-connection/types/msgs.go +++ b/modules/core/03-connection/types/msgs.go @@ -3,7 +3,6 @@ package types import ( errorsmod "cosmossdk.io/errors" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" @@ -25,9 +24,6 @@ var ( _ sdk.HasValidateBasic = (*MsgConnectionOpenAck)(nil) _ sdk.HasValidateBasic = (*MsgConnectionOpenTry)(nil) _ sdk.HasValidateBasic = (*MsgUpdateParams)(nil) - - _ codectypes.UnpackInterfacesMessage = (*MsgConnectionOpenTry)(nil) - _ codectypes.UnpackInterfacesMessage = (*MsgConnectionOpenAck)(nil) ) // NewMsgConnectionOpenInit creates a new MsgConnectionOpenInit instance. It sets the @@ -77,25 +73,18 @@ func (msg MsgConnectionOpenInit) ValidateBasic() error { // NewMsgConnectionOpenTry creates a new MsgConnectionOpenTry instance func NewMsgConnectionOpenTry( clientID, counterpartyConnectionID, counterpartyClientID string, - counterpartyClient exported.ClientState, counterpartyPrefix commitmenttypes.MerklePrefix, counterpartyVersions []*Version, delayPeriod uint64, - initProof, clientProof, consensusProof []byte, - proofHeight, consensusHeight clienttypes.Height, signer string, + initProof []byte, proofHeight clienttypes.Height, signer string, ) *MsgConnectionOpenTry { counterparty := NewCounterparty(counterpartyClientID, counterpartyConnectionID, counterpartyPrefix) - protoAny, _ := clienttypes.PackClientState(counterpartyClient) return &MsgConnectionOpenTry{ ClientId: clientID, - ClientState: protoAny, Counterparty: counterparty, CounterpartyVersions: counterpartyVersions, DelayPeriod: delayPeriod, ProofInit: initProof, - ProofClient: clientProof, - ProofConsensus: consensusProof, ProofHeight: proofHeight, - ConsensusHeight: consensusHeight, Signer: signer, } } @@ -106,9 +95,6 @@ func (msg MsgConnectionOpenTry) ValidateBasic() error { return errorsmod.Wrap(clienttypes.ErrInvalidClientType, "localhost connection handshakes are disallowed") } - if msg.PreviousConnectionId != "" { - return errorsmod.Wrap(ErrInvalidConnectionIdentifier, "previous connection identifier must be empty, this field has been deprecated as crossing hellos are no longer supported") - } if err := host.ClientIdentifierValidator(msg.ClientId); err != nil { return errorsmod.Wrap(err, "invalid client ID") } @@ -116,16 +102,6 @@ func (msg MsgConnectionOpenTry) ValidateBasic() error { if err := host.ConnectionIdentifierValidator(msg.Counterparty.ConnectionId); err != nil { return errorsmod.Wrap(err, "invalid counterparty connection ID") } - if msg.ClientState == nil { - return errorsmod.Wrap(clienttypes.ErrInvalidClient, "counterparty client is nil") - } - clientState, err := clienttypes.UnpackClientState(msg.ClientState) - if err != nil { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "unpack err: %v", err) - } - if err := clientState.Validate(); err != nil { - return errorsmod.Wrap(err, "counterparty client is invalid") - } if len(msg.CounterpartyVersions) == 0 { return errorsmod.Wrap(ibcerrors.ErrInvalidVersion, "empty counterparty versions") } @@ -140,55 +116,28 @@ func (msg MsgConnectionOpenTry) ValidateBasic() error { if len(msg.ProofInit) == 0 { return errorsmod.Wrap(commitmenttypes.ErrInvalidProof, "cannot submit an empty proof init") } - if len(msg.ProofClient) == 0 { - return errorsmod.Wrap(commitmenttypes.ErrInvalidProof, "cannot submit empty proof client") - } - if len(msg.ProofConsensus) == 0 { - return errorsmod.Wrap(commitmenttypes.ErrInvalidProof, "cannot submit an empty proof of consensus state") - } - if msg.ConsensusHeight.IsZero() { - return errorsmod.Wrap(ibcerrors.ErrInvalidHeight, "consensus height must be non-zero") - } - _, err = sdk.AccAddressFromBech32(msg.Signer) + _, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "string could not be parsed as address: %v", err) } return msg.Counterparty.ValidateBasic() } -// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces -func (msg MsgConnectionOpenTry) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { - return unpacker.UnpackAny(msg.ClientState, new(exported.ClientState)) -} - // NewMsgConnectionOpenAck creates a new MsgConnectionOpenAck instance func NewMsgConnectionOpenAck( - connectionID, counterpartyConnectionID string, counterpartyClient exported.ClientState, - tryProof, clientProof, consensusProof []byte, - proofHeight, consensusHeight clienttypes.Height, - version *Version, - signer string, + connectionID, counterpartyConnectionID string, tryProof []byte, + proofHeight clienttypes.Height, version *Version, signer string, ) *MsgConnectionOpenAck { - protoAny, _ := clienttypes.PackClientState(counterpartyClient) return &MsgConnectionOpenAck{ ConnectionId: connectionID, CounterpartyConnectionId: counterpartyConnectionID, - ClientState: protoAny, ProofTry: tryProof, - ProofClient: clientProof, - ProofConsensus: consensusProof, ProofHeight: proofHeight, - ConsensusHeight: consensusHeight, Version: version, Signer: signer, } } -// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces -func (msg MsgConnectionOpenAck) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { - return unpacker.UnpackAny(msg.ClientState, new(exported.ClientState)) -} - // ValidateBasic implements sdk.Msg func (msg MsgConnectionOpenAck) ValidateBasic() error { if !IsValidConnectionID(msg.ConnectionId) { @@ -200,29 +149,10 @@ func (msg MsgConnectionOpenAck) ValidateBasic() error { if err := ValidateVersion(msg.Version); err != nil { return err } - if msg.ClientState == nil { - return errorsmod.Wrap(clienttypes.ErrInvalidClient, "counterparty client is nil") - } - clientState, err := clienttypes.UnpackClientState(msg.ClientState) - if err != nil { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "unpack err: %v", err) - } - if err := clientState.Validate(); err != nil { - return errorsmod.Wrap(err, "counterparty client is invalid") - } if len(msg.ProofTry) == 0 { return errorsmod.Wrap(commitmenttypes.ErrInvalidProof, "cannot submit an empty proof try") } - if len(msg.ProofClient) == 0 { - return errorsmod.Wrap(commitmenttypes.ErrInvalidProof, "cannot submit empty proof client") - } - if len(msg.ProofConsensus) == 0 { - return errorsmod.Wrap(commitmenttypes.ErrInvalidProof, "cannot submit an empty proof of consensus state") - } - if msg.ConsensusHeight.IsZero() { - return errorsmod.Wrap(ibcerrors.ErrInvalidHeight, "consensus height must be non-zero") - } - _, err = sdk.AccAddressFromBech32(msg.Signer) + _, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "string could not be parsed as address: %v", err) } diff --git a/modules/core/03-connection/types/msgs_test.go b/modules/core/03-connection/types/msgs_test.go index 60d1edb3ec1..6e6b741bd3f 100644 --- a/modules/core/03-connection/types/msgs_test.go +++ b/modules/core/03-connection/types/msgs_test.go @@ -3,7 +3,6 @@ package types_test import ( "fmt" "testing" - "time" dbm "github.com/cosmos/cosmos-db" "github.com/stretchr/testify/require" @@ -19,11 +18,9 @@ import ( moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" ibc "github.com/cosmos/ibc-go/v9/modules/core" - clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types" commitmenttypes "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types" "github.com/cosmos/ibc-go/v9/modules/core/exported" - ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" ibctesting "github.com/cosmos/ibc-go/v9/testing" "github.com/cosmos/ibc-go/v9/testing/simapp" ) @@ -121,48 +118,23 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenInit() { func (suite *MsgTestSuite) TestNewMsgConnectionOpenTry() { prefix := commitmenttypes.NewMerklePrefix([]byte("storePrefixKey")) - clientState := ibctm.NewClientState( - chainID, ibctm.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, - ) - protoAny, err := clienttypes.PackClientState(clientState) - suite.Require().NoError(err) - - // Pack consensus state into any to test unpacking error - consState := ibctm.NewConsensusState( - time.Now(), commitmenttypes.NewMerkleRoot([]byte("root")), []byte("nextValsHash"), - ) - invalidAny := clienttypes.MustPackConsensusState(consState) - counterparty := types.NewCounterparty("connectiontotest", "clienttotest", prefix) - - // invalidClientState fails validateBasic - invalidClient := ibctm.NewClientState( - chainID, ibctm.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clienttypes.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, - ) - testCases := []struct { name string msg *types.MsgConnectionOpenTry expPass bool }{ - {"non empty connection ID", &types.MsgConnectionOpenTry{"connection-0", "clienttotesta", protoAny, counterparty, 500, []*types.Version{ibctesting.ConnectionVersion}, clientHeight, suite.proof, suite.proof, suite.proof, clientHeight, signer, nil}, false}, - {"localhost client ID", types.NewMsgConnectionOpenTry(exported.LocalhostClientID, "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid client ID", types.NewMsgConnectionOpenTry("test/iris", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid counterparty connection ID", types.NewMsgConnectionOpenTry("clienttotesta", "ibc/test", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid counterparty client ID", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "test/conn1", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid nil counterparty client", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", nil, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid client unpacking", &types.MsgConnectionOpenTry{"", "clienttotesta", invalidAny, counterparty, 500, []*types.Version{ibctesting.ConnectionVersion}, clientHeight, suite.proof, suite.proof, suite.proof, clientHeight, signer, nil}, false}, - {"counterparty failed validate", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", invalidClient, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty counterparty prefix", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, emptyPrefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty counterpartyVersions", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty proofInit", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, emptyProof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty proofClient", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, emptyProof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty proofConsensus", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, emptyProof, clientHeight, clientHeight, signer), false}, - {"invalid consensusHeight", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clienttypes.ZeroHeight(), signer), false}, - {"empty singer", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ""), false}, - {"invalid version", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{{}}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"too many counterparty versions", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, make([]*types.Version, types.MaxCounterpartyVersionsLength+1), 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"too many features in counterparty version", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{{"v1", make([]string, types.MaxFeaturesLength+1)}}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"success", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), true}, + {"success", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, clientHeight, signer), true}, + {"localhost client ID", types.NewMsgConnectionOpenTry(exported.LocalhostClientID, "connectiontotest", "clienttotest", prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, clientHeight, signer), false}, + {"invalid client ID", types.NewMsgConnectionOpenTry("test/iris", "connectiontotest", "clienttotest", prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, clientHeight, signer), false}, + {"invalid counterparty connection ID", types.NewMsgConnectionOpenTry("clienttotesta", "ibc/test", "clienttotest", prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, clientHeight, signer), false}, + {"invalid counterparty client ID", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "test/conn1", prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, clientHeight, signer), false}, + {"empty counterparty prefix", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", emptyPrefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, clientHeight, signer), false}, + {"empty counterpartyVersions", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", prefix, []*types.Version{}, 500, suite.proof, clientHeight, signer), false}, + {"empty proofInit", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, emptyProof, clientHeight, signer), false}, + {"empty singer", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", prefix, []*types.Version{ibctesting.ConnectionVersion}, 500, suite.proof, clientHeight, ""), false}, + {"invalid version", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", prefix, []*types.Version{{}}, 500, suite.proof, clientHeight, signer), false}, + {"too many counterparty versions", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", prefix, make([]*types.Version, types.MaxCounterpartyVersionsLength+1), 500, suite.proof, clientHeight, signer), false}, + {"too many features in counterparty version", types.NewMsgConnectionOpenTry("clienttotesta", "connectiontotest", "clienttotest", prefix, []*types.Version{{"v1", make([]string, types.MaxFeaturesLength+1)}}, 500, suite.proof, clientHeight, signer), false}, } for _, tc := range testCases { @@ -178,39 +150,17 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenTry() { } func (suite *MsgTestSuite) TestNewMsgConnectionOpenAck() { - clientState := ibctm.NewClientState( - chainID, ibctm.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, - ) - - // Pack consensus state into any to test unpacking error - consState := ibctm.NewConsensusState( - time.Now(), commitmenttypes.NewMerkleRoot([]byte("root")), []byte("nextValsHash"), - ) - invalidAny := clienttypes.MustPackConsensusState(consState) - - // invalidClientState fails validateBasic - invalidClient := ibctm.NewClientState( - chainID, ibctm.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clienttypes.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, - ) - connectionID := "connection-0" - testCases := []struct { name string msg *types.MsgConnectionOpenAck expPass bool }{ - {"invalid connection ID", types.NewMsgConnectionOpenAck("test/conn1", connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), false}, - {"invalid counterparty connection ID", types.NewMsgConnectionOpenAck(connectionID, "test/conn1", clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), false}, - {"invalid nil counterparty client", types.NewMsgConnectionOpenAck(connectionID, connectionID, nil, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), false}, - {"invalid unpacking counterparty client", &types.MsgConnectionOpenAck{connectionID, connectionID, ibctesting.ConnectionVersion, invalidAny, clientHeight, suite.proof, suite.proof, suite.proof, clientHeight, signer, nil}, false}, - {"counterparty client failed validate", types.NewMsgConnectionOpenAck(connectionID, connectionID, invalidClient, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), false}, - {"empty proofTry", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, emptyProof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), false}, - {"empty proofClient", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, emptyProof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), false}, - {"empty proofConsensus", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, emptyProof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), false}, - {"invalid consensusHeight", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clienttypes.ZeroHeight(), ibctesting.ConnectionVersion, signer), false}, - {"invalid version", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, &types.Version{}, signer), false}, - {"empty signer", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, ""), false}, - {"success", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), true}, + {"success", types.NewMsgConnectionOpenAck(connectionID, connectionID, suite.proof, clientHeight, ibctesting.ConnectionVersion, signer), true}, + {"invalid connection ID", types.NewMsgConnectionOpenAck("test/conn1", connectionID, suite.proof, clientHeight, ibctesting.ConnectionVersion, signer), false}, + {"invalid counterparty connection ID", types.NewMsgConnectionOpenAck(connectionID, "test/conn1", suite.proof, clientHeight, ibctesting.ConnectionVersion, signer), false}, + {"empty proofTry", types.NewMsgConnectionOpenAck(connectionID, connectionID, emptyProof, clientHeight, ibctesting.ConnectionVersion, signer), false}, + {"invalid version", types.NewMsgConnectionOpenAck(connectionID, connectionID, suite.proof, clientHeight, &types.Version{}, signer), false}, + {"empty signer", types.NewMsgConnectionOpenAck(connectionID, connectionID, suite.proof, clientHeight, ibctesting.ConnectionVersion, ""), false}, } for _, tc := range testCases { diff --git a/modules/core/03-connection/types/tx.pb.go b/modules/core/03-connection/types/tx.pb.go index 070ba6e6250..6576333d522 100644 --- a/modules/core/03-connection/types/tx.pb.go +++ b/modules/core/03-connection/types/tx.pb.go @@ -117,8 +117,9 @@ var xxx_messageInfo_MsgConnectionOpenInitResponse proto.InternalMessageInfo type MsgConnectionOpenTry struct { ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` // Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC. - PreviousConnectionId string `protobuf:"bytes,2,opt,name=previous_connection_id,json=previousConnectionId,proto3" json:"previous_connection_id,omitempty"` // Deprecated: Do not use. - ClientState *types.Any `protobuf:"bytes,3,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty"` + PreviousConnectionId string `protobuf:"bytes,2,opt,name=previous_connection_id,json=previousConnectionId,proto3" json:"previous_connection_id,omitempty"` // Deprecated: Do not use. + // Deprecated: this field is unused. + ClientState *types.Any `protobuf:"bytes,3,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty"` // Deprecated: Do not use. Counterparty Counterparty `protobuf:"bytes,4,opt,name=counterparty,proto3" json:"counterparty"` DelayPeriod uint64 `protobuf:"varint,5,opt,name=delay_period,json=delayPeriod,proto3" json:"delay_period,omitempty"` CounterpartyVersions []*Version `protobuf:"bytes,6,rep,name=counterparty_versions,json=counterpartyVersions,proto3" json:"counterparty_versions,omitempty"` @@ -126,14 +127,15 @@ type MsgConnectionOpenTry struct { // proof of the initialization the connection on Chain A: `UNINITIALIZED -> // INIT` ProofInit []byte `protobuf:"bytes,8,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty"` - // proof of client state included in message - ProofClient []byte `protobuf:"bytes,9,opt,name=proof_client,json=proofClient,proto3" json:"proof_client,omitempty"` - // proof of client consensus state - ProofConsensus []byte `protobuf:"bytes,10,opt,name=proof_consensus,json=proofConsensus,proto3" json:"proof_consensus,omitempty"` - ConsensusHeight types1.Height `protobuf:"bytes,11,opt,name=consensus_height,json=consensusHeight,proto3" json:"consensus_height"` - Signer string `protobuf:"bytes,12,opt,name=signer,proto3" json:"signer,omitempty"` - // optional proof data for host state machines that are unable to introspect their own consensus state - HostConsensusStateProof []byte `protobuf:"bytes,13,opt,name=host_consensus_state_proof,json=hostConsensusStateProof,proto3" json:"host_consensus_state_proof,omitempty"` + // Deprecated: this field is unused. + ProofClient []byte `protobuf:"bytes,9,opt,name=proof_client,json=proofClient,proto3" json:"proof_client,omitempty"` // Deprecated: Do not use. + // Deprecated: this field is unused. + ProofConsensus []byte `protobuf:"bytes,10,opt,name=proof_consensus,json=proofConsensus,proto3" json:"proof_consensus,omitempty"` // Deprecated: Do not use. + // Deprecated: this field is unused. + ConsensusHeight *types1.Height `protobuf:"bytes,11,opt,name=consensus_height,json=consensusHeight,proto3" json:"consensus_height,omitempty"` // Deprecated: Do not use. + Signer string `protobuf:"bytes,12,opt,name=signer,proto3" json:"signer,omitempty"` + // Deprecated: this field is unused. + HostConsensusStateProof []byte `protobuf:"bytes,13,opt,name=host_consensus_state_proof,json=hostConsensusStateProof,proto3" json:"host_consensus_state_proof,omitempty"` // Deprecated: Do not use. } func (m *MsgConnectionOpenTry) Reset() { *m = MsgConnectionOpenTry{} } @@ -209,22 +211,24 @@ var xxx_messageInfo_MsgConnectionOpenTryResponse proto.InternalMessageInfo // MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to // acknowledge the change of connection state to TRYOPEN on Chain B. type MsgConnectionOpenAck struct { - ConnectionId string `protobuf:"bytes,1,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` - CounterpartyConnectionId string `protobuf:"bytes,2,opt,name=counterparty_connection_id,json=counterpartyConnectionId,proto3" json:"counterparty_connection_id,omitempty"` - Version *Version `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` - ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty"` - ProofHeight types1.Height `protobuf:"bytes,5,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ConnectionId string `protobuf:"bytes,1,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + CounterpartyConnectionId string `protobuf:"bytes,2,opt,name=counterparty_connection_id,json=counterpartyConnectionId,proto3" json:"counterparty_connection_id,omitempty"` + Version *Version `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + // Deprecated: this field is unused. + ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty"` // Deprecated: Do not use. + ProofHeight types1.Height `protobuf:"bytes,5,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` // proof of the initialization the connection on Chain B: `UNINITIALIZED -> // TRYOPEN` ProofTry []byte `protobuf:"bytes,6,opt,name=proof_try,json=proofTry,proto3" json:"proof_try,omitempty"` - // proof of client state included in message - ProofClient []byte `protobuf:"bytes,7,opt,name=proof_client,json=proofClient,proto3" json:"proof_client,omitempty"` - // proof of client consensus state - ProofConsensus []byte `protobuf:"bytes,8,opt,name=proof_consensus,json=proofConsensus,proto3" json:"proof_consensus,omitempty"` - ConsensusHeight types1.Height `protobuf:"bytes,9,opt,name=consensus_height,json=consensusHeight,proto3" json:"consensus_height"` - Signer string `protobuf:"bytes,10,opt,name=signer,proto3" json:"signer,omitempty"` - // optional proof data for host state machines that are unable to introspect their own consensus state - HostConsensusStateProof []byte `protobuf:"bytes,11,opt,name=host_consensus_state_proof,json=hostConsensusStateProof,proto3" json:"host_consensus_state_proof,omitempty"` + // Deprecated: this field is unused. + ProofClient []byte `protobuf:"bytes,7,opt,name=proof_client,json=proofClient,proto3" json:"proof_client,omitempty"` // Deprecated: Do not use. + // Deprecated: this field is unused. + ProofConsensus []byte `protobuf:"bytes,8,opt,name=proof_consensus,json=proofConsensus,proto3" json:"proof_consensus,omitempty"` // Deprecated: Do not use. + // Deprecated: this field is unused. + ConsensusHeight *types1.Height `protobuf:"bytes,9,opt,name=consensus_height,json=consensusHeight,proto3" json:"consensus_height,omitempty"` // Deprecated: Do not use. + Signer string `protobuf:"bytes,10,opt,name=signer,proto3" json:"signer,omitempty"` + // Deprecated: this field is unused. + HostConsensusStateProof []byte `protobuf:"bytes,11,opt,name=host_consensus_state_proof,json=hostConsensusStateProof,proto3" json:"host_consensus_state_proof,omitempty"` // Deprecated: Do not use. } func (m *MsgConnectionOpenAck) Reset() { *m = MsgConnectionOpenAck{} } @@ -474,65 +478,66 @@ func init() { func init() { proto.RegisterFile("ibc/core/connection/v1/tx.proto", fileDescriptor_5d00fde5fc97399e) } var fileDescriptor_5d00fde5fc97399e = []byte{ - // 928 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x41, 0x6f, 0xe3, 0x44, - 0x14, 0xc7, 0xe3, 0xd6, 0x49, 0x9b, 0x97, 0x2c, 0x85, 0x51, 0xda, 0x7a, 0xbd, 0xac, 0x93, 0x2d, - 0x48, 0xad, 0x56, 0xd4, 0xde, 0xee, 0x82, 0xd8, 0x85, 0x5e, 0xda, 0x5c, 0xa8, 0x50, 0x61, 0x65, - 0xca, 0x1e, 0xb8, 0x44, 0x89, 0x33, 0x75, 0x47, 0x6d, 0x3c, 0x96, 0xc7, 0x09, 0x6b, 0x4e, 0x08, - 0x2e, 0x48, 0x5c, 0xf8, 0x08, 0x7c, 0x84, 0xfd, 0x18, 0x2b, 0x0e, 0x68, 0xc5, 0x89, 0x13, 0x42, - 0xed, 0x61, 0xbf, 0x00, 0x1f, 0x00, 0x79, 0x66, 0xec, 0x38, 0x89, 0x53, 0x39, 0xdb, 0xbd, 0x25, - 0xcf, 0xff, 0xf7, 0xe6, 0x3f, 0xef, 0xfd, 0xc6, 0x1e, 0x68, 0x92, 0x9e, 0x63, 0x39, 0x34, 0xc0, - 0x96, 0x43, 0x3d, 0x0f, 0x3b, 0x21, 0xa1, 0x9e, 0x35, 0xda, 0xb3, 0xc2, 0xe7, 0xa6, 0x1f, 0xd0, - 0x90, 0xa2, 0x0d, 0xd2, 0x73, 0xcc, 0x58, 0x60, 0x8e, 0x05, 0xe6, 0x68, 0x4f, 0x6f, 0xb8, 0xd4, - 0xa5, 0x5c, 0x62, 0xc5, 0xbf, 0x84, 0x5a, 0xdf, 0x74, 0x28, 0x1b, 0x50, 0x66, 0x0d, 0x98, 0x1b, - 0x57, 0x19, 0x30, 0x57, 0x3e, 0xb8, 0xed, 0x52, 0xea, 0x5e, 0x60, 0x8b, 0xff, 0xeb, 0x0d, 0x4f, - 0xad, 0xae, 0x17, 0xc9, 0x47, 0x19, 0x0b, 0x17, 0x04, 0x7b, 0x61, 0x9c, 0x28, 0x7e, 0x49, 0xc1, - 0xf6, 0x1c, 0x8f, 0x19, 0x43, 0x5c, 0xb8, 0xf5, 0xeb, 0x12, 0xac, 0x1f, 0x33, 0xb7, 0x9d, 0xc6, - 0xbf, 0xf6, 0xb1, 0x77, 0xe4, 0x91, 0x10, 0xdd, 0x81, 0xaa, 0x28, 0xd9, 0x21, 0x7d, 0x4d, 0x69, - 0x29, 0x3b, 0x55, 0x7b, 0x55, 0x04, 0x8e, 0xfa, 0xe8, 0x2b, 0xa8, 0x3b, 0x74, 0xe8, 0x85, 0x38, - 0xf0, 0xbb, 0x41, 0x18, 0x69, 0x4b, 0x2d, 0x65, 0xa7, 0xf6, 0xf0, 0x43, 0x33, 0x7f, 0xe7, 0x66, - 0x3b, 0xa3, 0x3d, 0x54, 0x5f, 0xfe, 0xd3, 0x2c, 0xd9, 0x13, 0xf9, 0xe8, 0x09, 0xac, 0x8c, 0x70, - 0xc0, 0x08, 0xf5, 0xb4, 0x65, 0x5e, 0xaa, 0x39, 0xaf, 0xd4, 0x33, 0x21, 0xb3, 0x13, 0x3d, 0xba, - 0x07, 0xf5, 0x3e, 0xbe, 0xe8, 0x46, 0x1d, 0x1f, 0x07, 0x84, 0xf6, 0x35, 0xb5, 0xa5, 0xec, 0xa8, - 0x76, 0x8d, 0xc7, 0x9e, 0xf2, 0x10, 0xda, 0x80, 0x0a, 0x23, 0xae, 0x87, 0x03, 0xad, 0xcc, 0xf7, - 0x21, 0xff, 0x7d, 0xb6, 0xf6, 0xcb, 0xef, 0xcd, 0xd2, 0x4f, 0xaf, 0x5f, 0xdc, 0x97, 0x81, 0xad, - 0x26, 0xdc, 0xcd, 0x6d, 0x86, 0x8d, 0x99, 0x4f, 0x3d, 0x86, 0xb7, 0xfe, 0x2a, 0x43, 0x63, 0x46, - 0x71, 0x12, 0x44, 0xd7, 0x77, 0xeb, 0x31, 0x6c, 0xf8, 0x01, 0x1e, 0x11, 0x3a, 0x64, 0x9d, 0xf1, - 0x6e, 0x62, 0x65, 0xdc, 0xb7, 0xea, 0xe1, 0x92, 0xa6, 0xd8, 0x8d, 0x44, 0x31, 0xae, 0x7d, 0xd4, - 0x47, 0x9f, 0x42, 0x5d, 0x96, 0x65, 0x61, 0x37, 0xc4, 0xb2, 0x39, 0x0d, 0x53, 0xa0, 0x61, 0x26, - 0x68, 0x98, 0x07, 0x5e, 0x64, 0xd7, 0x84, 0xf2, 0x9b, 0x58, 0x38, 0x33, 0x20, 0xf5, 0x86, 0x03, - 0x9a, 0xee, 0x72, 0x79, 0xb6, 0xcb, 0x27, 0xb0, 0x9e, 0x4d, 0xe9, 0xc8, 0x01, 0x31, 0xad, 0xd2, - 0x5a, 0x2e, 0x32, 0xd1, 0x46, 0x36, 0x5b, 0x06, 0x19, 0x6a, 0x43, 0xdd, 0x0f, 0x28, 0x3d, 0xed, - 0x9c, 0x61, 0xe2, 0x9e, 0x85, 0xda, 0x0a, 0xdf, 0x88, 0x9e, 0x29, 0x26, 0xb8, 0x1f, 0xed, 0x99, - 0x5f, 0x70, 0x85, 0xb4, 0x5f, 0xe3, 0x59, 0x22, 0x84, 0xee, 0x02, 0x88, 0x22, 0xc4, 0x23, 0xa1, - 0xb6, 0xda, 0x52, 0x76, 0xea, 0x76, 0x95, 0x47, 0x38, 0xea, 0xf7, 0x92, 0x35, 0x44, 0x2d, 0xad, - 0xca, 0x05, 0xa2, 0x42, 0x9b, 0x87, 0xd0, 0x36, 0xac, 0x49, 0x49, 0xcc, 0x81, 0xc7, 0x86, 0x4c, - 0x03, 0xae, 0x7a, 0x47, 0xa8, 0x92, 0x28, 0xfa, 0x12, 0xde, 0x4d, 0x25, 0x89, 0xe7, 0x5a, 0x41, - 0xcf, 0x6b, 0x69, 0xa6, 0xf4, 0x3d, 0x06, 0xb7, 0x9e, 0x05, 0x17, 0x7d, 0x0e, 0xfa, 0x19, 0x65, - 0xe1, 0xd8, 0x8c, 0xc0, 0xa3, 0xc3, 0xbd, 0x68, 0xb7, 0xb8, 0xb1, 0xcd, 0x58, 0x91, 0xfa, 0xe2, - 0x54, 0x3c, 0x8d, 0x1f, 0xcf, 0x52, 0x6f, 0xc0, 0xfb, 0x79, 0x4c, 0xa7, 0xd0, 0xff, 0xa9, 0xe6, - 0x40, 0x7f, 0xe0, 0x9c, 0xa3, 0x0f, 0xe0, 0xd6, 0x24, 0xce, 0x02, 0xfc, 0xba, 0x93, 0x45, 0x78, - 0x1f, 0xf4, 0x09, 0x2c, 0x72, 0x0e, 0x80, 0xad, 0x65, 0x15, 0x13, 0x07, 0xe0, 0x06, 0x2f, 0x86, - 0xe9, 0xb3, 0xa3, 0x16, 0x3d, 0x3b, 0xd3, 0xc8, 0x95, 0xdf, 0x04, 0xb9, 0x3b, 0x20, 0x00, 0xeb, - 0x84, 0x41, 0xa4, 0x55, 0xf8, 0x44, 0x56, 0x79, 0x20, 0x7e, 0x5b, 0x4c, 0x03, 0xb7, 0x52, 0x08, - 0xb8, 0xd5, 0xc2, 0xc0, 0x55, 0x6f, 0x0e, 0x1c, 0x2c, 0x00, 0x5c, 0xed, 0x2d, 0x00, 0x77, 0xe0, - 0x9c, 0xa7, 0xc0, 0xfd, 0xa1, 0x80, 0x36, 0x23, 0x68, 0x53, 0xef, 0x94, 0x04, 0x83, 0x62, 0xd0, - 0xa5, 0xdd, 0xef, 0x3a, 0xe7, 0x9c, 0xb1, 0xa4, 0xfb, 0x31, 0xb6, 0xd3, 0xf3, 0x5d, 0x7e, 0x93, - 0xf9, 0x8e, 0x3b, 0xa5, 0x5e, 0xff, 0x4d, 0xd9, 0x82, 0xd6, 0xbc, 0xbd, 0xa4, 0x1b, 0x7e, 0x0e, - 0x6b, 0xc7, 0xcc, 0xfd, 0xd6, 0xef, 0xc7, 0x3d, 0xeb, 0x06, 0xdd, 0x01, 0xcb, 0xd4, 0x57, 0x26, - 0x26, 0xb1, 0x0f, 0x15, 0x9f, 0x2b, 0xe4, 0x37, 0xd7, 0x98, 0x77, 0x1e, 0x44, 0x1d, 0x69, 0x5d, - 0xe6, 0xcc, 0xba, 0xbb, 0x0d, 0x9b, 0x53, 0x2b, 0x27, 0xa6, 0x1e, 0xfe, 0xa7, 0xc2, 0xf2, 0x31, - 0x73, 0xd1, 0x0f, 0x80, 0x72, 0xae, 0x07, 0xbb, 0xf3, 0xd6, 0xcd, 0xfd, 0x80, 0xea, 0x9f, 0x2c, - 0x24, 0x4f, 0x3c, 0xa0, 0xef, 0xe1, 0xbd, 0xd9, 0x6f, 0xed, 0x47, 0x85, 0x6b, 0x9d, 0x04, 0x91, - 0xfe, 0xf1, 0x22, 0xea, 0xf9, 0x0b, 0xc7, 0xe0, 0x14, 0x5f, 0xf8, 0xc0, 0x39, 0x5f, 0x60, 0xe1, - 0x0c, 0xfb, 0xe8, 0x67, 0x05, 0xd6, 0xf3, 0xc1, 0x7f, 0x50, 0xb8, 0x9e, 0xcc, 0xd0, 0x1f, 0x2f, - 0x9a, 0x91, 0xba, 0x08, 0x60, 0x43, 0x30, 0x31, 0x96, 0x49, 0x2e, 0xb7, 0xaf, 0xa9, 0x99, 0xc5, - 0x48, 0xb7, 0x0a, 0x0a, 0x93, 0x35, 0xf5, 0xf2, 0x8f, 0xaf, 0x5f, 0xdc, 0x57, 0x0e, 0x9f, 0xbd, - 0xbc, 0x34, 0x94, 0x57, 0x97, 0x86, 0xf2, 0xef, 0xa5, 0xa1, 0xfc, 0x76, 0x65, 0x94, 0x5e, 0x5d, - 0x19, 0xa5, 0xbf, 0xaf, 0x8c, 0xd2, 0x77, 0xfb, 0x2e, 0x09, 0xcf, 0x86, 0x3d, 0xd3, 0xa1, 0x03, - 0x4b, 0x5e, 0x9a, 0x49, 0xcf, 0xd9, 0x75, 0xa9, 0x35, 0x7a, 0x62, 0x0d, 0x68, 0x7f, 0x78, 0x81, - 0x99, 0xb8, 0xf4, 0x3e, 0x78, 0xb4, 0x9b, 0xb9, 0xf7, 0x86, 0x91, 0x8f, 0x59, 0xaf, 0xc2, 0x5f, - 0xf8, 0x8f, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x65, 0xfc, 0xe6, 0xbf, 0x0b, 0x00, 0x00, + // 935 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xcd, 0x6e, 0xe3, 0x54, + 0x14, 0xc7, 0xe3, 0x36, 0x49, 0x9b, 0x93, 0x0c, 0x85, 0xab, 0xb4, 0xf5, 0x78, 0x18, 0x27, 0x14, + 0xd0, 0x54, 0x03, 0xb5, 0xa7, 0x33, 0x20, 0xcd, 0x40, 0x25, 0xd4, 0x66, 0x43, 0x17, 0x85, 0x91, + 0x29, 0xb3, 0x60, 0x13, 0x25, 0xce, 0xad, 0x7b, 0xd5, 0xc6, 0xd7, 0xf2, 0x75, 0xc2, 0x98, 0x15, + 0x82, 0x0d, 0x12, 0x1b, 0x1e, 0x81, 0x47, 0x98, 0xc7, 0x18, 0xb1, 0x9a, 0x25, 0x0b, 0x84, 0x46, + 0xed, 0x62, 0x5e, 0x80, 0x07, 0x40, 0xf7, 0xc3, 0x8e, 0x93, 0x38, 0x25, 0x69, 0xd9, 0xd9, 0xc7, + 0xff, 0x73, 0xee, 0xb9, 0xe7, 0xfc, 0x8e, 0xef, 0x85, 0x06, 0xe9, 0xba, 0xb6, 0x4b, 0x43, 0x6c, + 0xbb, 0xd4, 0xf7, 0xb1, 0x1b, 0x11, 0xea, 0xdb, 0xc3, 0x5d, 0x3b, 0x7a, 0x6e, 0x05, 0x21, 0x8d, + 0x28, 0xda, 0x20, 0x5d, 0xd7, 0xe2, 0x02, 0x6b, 0x24, 0xb0, 0x86, 0xbb, 0x46, 0xdd, 0xa3, 0x1e, + 0x15, 0x12, 0x9b, 0x3f, 0x49, 0xb5, 0xb1, 0xe9, 0x52, 0xd6, 0xa7, 0xcc, 0xee, 0x33, 0x8f, 0x47, + 0xe9, 0x33, 0x4f, 0x7d, 0xb8, 0xed, 0x51, 0xea, 0x9d, 0x63, 0x5b, 0xbc, 0x75, 0x07, 0x27, 0x76, + 0xc7, 0x8f, 0xd5, 0xa7, 0x4c, 0x0a, 0xe7, 0x04, 0xfb, 0x11, 0x77, 0x94, 0x4f, 0x4a, 0x70, 0x6f, + 0x46, 0x8e, 0x99, 0x84, 0x84, 0x70, 0xeb, 0xd7, 0x25, 0x58, 0x3f, 0x62, 0x5e, 0x2b, 0xb5, 0x7f, + 0x1d, 0x60, 0xff, 0xd0, 0x27, 0x11, 0xba, 0x03, 0x15, 0x19, 0xb2, 0x4d, 0x7a, 0xba, 0xd6, 0xd4, + 0xb6, 0x2b, 0xce, 0xaa, 0x34, 0x1c, 0xf6, 0xd0, 0x57, 0x50, 0x73, 0xe9, 0xc0, 0x8f, 0x70, 0x18, + 0x74, 0xc2, 0x28, 0xd6, 0x97, 0x9a, 0xda, 0x76, 0xf5, 0xe1, 0x07, 0x56, 0xfe, 0xce, 0xad, 0x56, + 0x46, 0x7b, 0x50, 0x7c, 0xf9, 0x77, 0xa3, 0xe0, 0x8c, 0xf9, 0xa3, 0x27, 0xb0, 0x32, 0xc4, 0x21, + 0x23, 0xd4, 0xd7, 0x97, 0x45, 0xa8, 0xc6, 0xac, 0x50, 0xcf, 0xa4, 0xcc, 0x49, 0xf4, 0xe8, 0x3d, + 0xa8, 0xf5, 0xf0, 0x79, 0x27, 0x6e, 0x07, 0x38, 0x24, 0xb4, 0xa7, 0x17, 0x9b, 0xda, 0x76, 0xd1, + 0xa9, 0x0a, 0xdb, 0x53, 0x61, 0x42, 0x1b, 0x50, 0x66, 0xc4, 0xf3, 0x71, 0xa8, 0x97, 0xc4, 0x3e, + 0xd4, 0xdb, 0x67, 0x6b, 0xbf, 0xfc, 0xde, 0x28, 0xfc, 0xf4, 0xe6, 0xc5, 0x7d, 0x65, 0xd8, 0x6a, + 0xc0, 0xdd, 0xdc, 0x62, 0x38, 0x98, 0x05, 0xd4, 0x67, 0x78, 0xeb, 0x75, 0x09, 0xea, 0x53, 0x8a, + 0xe3, 0x30, 0xbe, 0xba, 0x5a, 0x8f, 0x61, 0x23, 0x08, 0xf1, 0x90, 0xd0, 0x01, 0x6b, 0x8f, 0x76, + 0xc3, 0x95, 0xbc, 0x6e, 0x95, 0x83, 0x25, 0x5d, 0x73, 0xea, 0x89, 0x62, 0x14, 0xfb, 0xb0, 0x87, + 0x3e, 0x87, 0x9a, 0x0a, 0xcb, 0xa2, 0x4e, 0x84, 0x55, 0x71, 0xea, 0x96, 0x44, 0xc3, 0x4a, 0xd0, + 0xb0, 0xf6, 0xfd, 0x58, 0x44, 0xa9, 0x4a, 0xf5, 0x37, 0x5c, 0x3c, 0xd5, 0xa4, 0xe2, 0x0d, 0x9b, + 0x34, 0x59, 0xe9, 0xd2, 0x74, 0xa5, 0x8f, 0x61, 0x3d, 0xeb, 0xd2, 0x56, 0x4d, 0x62, 0x7a, 0xb9, + 0xb9, 0x3c, 0x4f, 0x57, 0xeb, 0x59, 0x6f, 0x65, 0x64, 0xa8, 0x05, 0xb5, 0x20, 0xa4, 0xf4, 0xa4, + 0x7d, 0x8a, 0x89, 0x77, 0x1a, 0xe9, 0x2b, 0x62, 0x23, 0x46, 0x26, 0x98, 0x64, 0x7f, 0xb8, 0x6b, + 0x7d, 0x29, 0x14, 0x2a, 0xfd, 0xaa, 0xf0, 0x92, 0x26, 0x74, 0x17, 0x40, 0x06, 0x21, 0x3e, 0x89, + 0xf4, 0xd5, 0xa6, 0xb6, 0x5d, 0x73, 0x2a, 0xc2, 0x22, 0x70, 0xff, 0x30, 0x59, 0x43, 0xc6, 0xd2, + 0x2b, 0x5c, 0x20, 0x6b, 0x2a, 0xec, 0x2d, 0x61, 0x46, 0x1f, 0xc1, 0x9a, 0x92, 0x71, 0x1e, 0x7c, + 0x36, 0x60, 0x3a, 0xa4, 0xca, 0xb7, 0xa4, 0x32, 0xf9, 0x82, 0x0e, 0xe1, 0xed, 0x54, 0x96, 0xe4, + 0x5e, 0xfd, 0xcf, 0xdc, 0x79, 0xa4, 0xb5, 0xd4, 0x4f, 0x65, 0x3f, 0x42, 0xb8, 0x96, 0x45, 0x18, + 0x7d, 0x01, 0xc6, 0x29, 0x65, 0xd1, 0x28, 0x1d, 0x09, 0x4a, 0x5b, 0x64, 0xa2, 0xdf, 0x4a, 0x53, + 0xdb, 0xe4, 0xaa, 0x34, 0x33, 0xc1, 0xc7, 0x53, 0x2e, 0x99, 0x9e, 0x01, 0x13, 0xde, 0xcd, 0x23, + 0x3c, 0x1d, 0x81, 0xbf, 0x8a, 0x39, 0x23, 0xb0, 0xef, 0x9e, 0xa1, 0xf7, 0xe1, 0xd6, 0x38, 0xdc, + 0x72, 0x0c, 0x6a, 0x6e, 0x16, 0xe8, 0x3d, 0x30, 0xc6, 0x00, 0xc9, 0x19, 0x07, 0x47, 0xcf, 0x2a, + 0xc6, 0xc6, 0xe1, 0x06, 0xbf, 0x89, 0xc9, 0x49, 0x2a, 0x2e, 0x32, 0x49, 0x93, 0x00, 0x96, 0xae, + 0x03, 0xe0, 0x1d, 0x90, 0xb8, 0xb5, 0xa3, 0x30, 0xd6, 0xcb, 0x82, 0xbf, 0x55, 0x61, 0xe0, 0xff, + 0x8f, 0x49, 0xfc, 0x56, 0xe6, 0xc6, 0x6f, 0x75, 0x21, 0xfc, 0x2a, 0x37, 0xc5, 0x0f, 0x16, 0xc0, + 0xaf, 0xfa, 0x3f, 0xe1, 0xb7, 0xef, 0x9e, 0xa5, 0xf8, 0xfd, 0xa1, 0x81, 0x3e, 0x25, 0x68, 0x51, + 0xff, 0x84, 0x84, 0xfd, 0xf9, 0x10, 0x4c, 0xfb, 0xd0, 0x71, 0xcf, 0x04, 0x71, 0x49, 0x1f, 0x38, + 0xc4, 0x93, 0x9d, 0x5e, 0xbe, 0x4e, 0xa7, 0x47, 0xd5, 0x2a, 0x5e, 0x7d, 0xde, 0x6c, 0x41, 0x73, + 0xd6, 0x5e, 0xd2, 0x0d, 0x3f, 0x87, 0xb5, 0x23, 0xe6, 0x7d, 0x1b, 0xf4, 0x78, 0xcd, 0x3a, 0x61, + 0xa7, 0xcf, 0x32, 0xf1, 0xb5, 0xb1, 0x6e, 0xec, 0x41, 0x39, 0x10, 0x0a, 0x75, 0x1e, 0x9b, 0xb3, + 0xa6, 0x43, 0xc6, 0x51, 0xa9, 0x2b, 0x9f, 0xe9, 0xec, 0x6e, 0xc3, 0xe6, 0xc4, 0xca, 0x49, 0x52, + 0x0f, 0xff, 0x29, 0xc2, 0xf2, 0x11, 0xf3, 0xd0, 0x0f, 0x80, 0x72, 0xae, 0x0e, 0x3b, 0xb3, 0xd6, + 0xcd, 0x3d, 0x5c, 0x8d, 0x4f, 0x17, 0x92, 0x27, 0x39, 0xa0, 0xef, 0xe1, 0x9d, 0xe9, 0x73, 0xf8, + 0xe3, 0xb9, 0x63, 0x1d, 0x87, 0xb1, 0xf1, 0xc9, 0x22, 0xea, 0xd9, 0x0b, 0x73, 0x70, 0xe6, 0x5f, + 0x78, 0xdf, 0x3d, 0x5b, 0x60, 0xe1, 0x0c, 0xfb, 0xe8, 0x67, 0x0d, 0xd6, 0xf3, 0xc1, 0x7f, 0x30, + 0x77, 0x3c, 0xe5, 0x61, 0x3c, 0x5e, 0xd4, 0x23, 0xcd, 0x22, 0x84, 0x0d, 0xc9, 0xc4, 0x48, 0xa6, + 0xb8, 0xbc, 0x77, 0x45, 0xcc, 0x2c, 0x46, 0x86, 0x3d, 0xa7, 0x30, 0x59, 0xd3, 0x28, 0xfd, 0xf8, + 0xe6, 0xc5, 0x7d, 0xed, 0xe0, 0xd9, 0xcb, 0x0b, 0x53, 0x7b, 0x75, 0x61, 0x6a, 0xaf, 0x2f, 0x4c, + 0xed, 0xb7, 0x4b, 0xb3, 0xf0, 0xea, 0xd2, 0x2c, 0xfc, 0x79, 0x69, 0x16, 0xbe, 0xdb, 0xf3, 0x48, + 0x74, 0x3a, 0xe8, 0x5a, 0x2e, 0xed, 0xdb, 0xea, 0x42, 0x4d, 0xba, 0xee, 0x8e, 0x47, 0xed, 0xe1, + 0x13, 0xbb, 0x4f, 0x7b, 0x83, 0x73, 0xcc, 0xe4, 0x85, 0xf8, 0xc1, 0xa3, 0x9d, 0xcc, 0x9d, 0x38, + 0x8a, 0x03, 0xcc, 0xba, 0x65, 0xf1, 0xfb, 0x7f, 0xf4, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x81, + 0x77, 0x9b, 0x70, 0xdb, 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -894,16 +899,18 @@ func (m *MsgConnectionOpenTry) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x62 } - { - size, err := m.ConsensusHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.ConsensusHeight != nil { + { + size, err := m.ConsensusHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x5a } - i-- - dAtA[i] = 0x5a if len(m.ProofConsensus) > 0 { i -= len(m.ProofConsensus) copy(dAtA[i:], m.ProofConsensus) @@ -1050,16 +1057,18 @@ func (m *MsgConnectionOpenAck) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x52 } - { - size, err := m.ConsensusHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.ConsensusHeight != nil { + { + size, err := m.ConsensusHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x4a } - i-- - dAtA[i] = 0x4a if len(m.ProofConsensus) > 0 { i -= len(m.ProofConsensus) copy(dAtA[i:], m.ProofConsensus) @@ -1384,8 +1393,10 @@ func (m *MsgConnectionOpenTry) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = m.ConsensusHeight.Size() - n += 1 + l + sovTx(uint64(l)) + if m.ConsensusHeight != nil { + l = m.ConsensusHeight.Size() + n += 1 + l + sovTx(uint64(l)) + } l = len(m.Signer) if l > 0 { n += 1 + l + sovTx(uint64(l)) @@ -1442,8 +1453,10 @@ func (m *MsgConnectionOpenAck) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = m.ConsensusHeight.Size() - n += 1 + l + sovTx(uint64(l)) + if m.ConsensusHeight != nil { + l = m.ConsensusHeight.Size() + n += 1 + l + sovTx(uint64(l)) + } l = len(m.Signer) if l > 0 { n += 1 + l + sovTx(uint64(l)) @@ -2157,6 +2170,9 @@ func (m *MsgConnectionOpenTry) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.ConsensusHeight == nil { + m.ConsensusHeight = &types1.Height{} + } if err := m.ConsensusHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -2627,6 +2643,9 @@ func (m *MsgConnectionOpenAck) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.ConsensusHeight == nil { + m.ConsensusHeight = &types1.Height{} + } if err := m.ConsensusHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/modules/core/keeper/keeper.go b/modules/core/keeper/keeper.go index 0e89feee358..fed78a94888 100644 --- a/modules/core/keeper/keeper.go +++ b/modules/core/keeper/keeper.go @@ -34,14 +34,10 @@ type Keeper struct { // NewKeeper creates a new ibc Keeper func NewKeeper( cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace types.ParamSubspace, - consensusHost clienttypes.ConsensusHost, upgradeKeeper clienttypes.UpgradeKeeper, + upgradeKeeper clienttypes.UpgradeKeeper, scopedKeeper capabilitykeeper.ScopedKeeper, authority string, ) *Keeper { // panic if any of the keepers passed in is empty - if isEmpty(consensusHost) { - panic(errors.New("cannot initialize IBC keeper: empty consensus host")) - } - if isEmpty(upgradeKeeper) { panic(errors.New("cannot initialize IBC keeper: empty upgrade keeper")) } @@ -54,7 +50,7 @@ func NewKeeper( panic(errors.New("authority must be non-empty")) } - clientKeeper := clientkeeper.NewKeeper(cdc, key, paramSpace, consensusHost, upgradeKeeper) + clientKeeper := clientkeeper.NewKeeper(cdc, key, paramSpace, upgradeKeeper) connectionKeeper := connectionkeeper.NewKeeper(cdc, key, paramSpace, clientKeeper) portKeeper := portkeeper.NewKeeper(scopedKeeper) channelKeeper := channelkeeper.NewKeeper(cdc, key, clientKeeper, connectionKeeper, portKeeper, scopedKeeper) @@ -74,15 +70,6 @@ func (k *Keeper) Codec() codec.BinaryCodec { return k.cdc } -// SetConsensusHost sets a custom ConsensusHost for self client state and consensus state validation. -func (k *Keeper) SetConsensusHost(consensusHost clienttypes.ConsensusHost) { - if consensusHost == nil { - panic(errors.New("cannot set a nil self consensus host")) - } - - k.ClientKeeper.SetConsensusHost(consensusHost) -} - // SetRouter sets the Router in IBC Keeper and seals it. The method panics if // there is an existing router that's already sealed. func (k *Keeper) SetRouter(rtr *porttypes.Router) { diff --git a/modules/core/keeper/keeper_test.go b/modules/core/keeper/keeper_test.go index 282a8a4bc34..ff7fb8b8f11 100644 --- a/modules/core/keeper/keeper_test.go +++ b/modules/core/keeper/keeper_test.go @@ -1,21 +1,16 @@ package keeper_test import ( - "context" "testing" - "time" testifysuite "github.com/stretchr/testify/suite" upgradekeeper "cosmossdk.io/x/upgrade/keeper" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" ibcexported "github.com/cosmos/ibc-go/v9/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v9/modules/core/keeper" - ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" ibctesting "github.com/cosmos/ibc-go/v9/testing" ) @@ -44,24 +39,10 @@ func TestKeeperTestSuite(t *testing.T) { testifysuite.Run(t, new(KeeperTestSuite)) } -// MockStakingKeeper implements clienttypes.StakingKeeper used in ibckeeper.NewKeeper -type MockStakingKeeper struct { - mockField string -} - -func (MockStakingKeeper) GetHistoricalInfo(_ context.Context, _ int64) (stakingtypes.HistoricalInfo, error) { - return stakingtypes.HistoricalInfo{}, nil -} - -func (MockStakingKeeper) UnbondingTime(_ context.Context) (time.Duration, error) { - return 0, nil -} - // Test ibckeeper.NewKeeper used to initialize IBCKeeper when creating an app instance. // It verifies if ibckeeper.NewKeeper panic when any of the keepers passed in is empty. func (suite *KeeperTestSuite) TestNewKeeper() { var ( - consensusHost clienttypes.ConsensusHost upgradeKeeper clienttypes.UpgradeKeeper scopedKeeper capabilitykeeper.ScopedKeeper newIBCKeeperFn func() @@ -72,12 +53,6 @@ func (suite *KeeperTestSuite) TestNewKeeper() { malleate func() expPass bool }{ - {"failure: empty consensus host value", func() { - consensusHost = &ibctm.ConsensusHost{} - }, false}, - {"failure: nil consensus host value", func() { - consensusHost = nil - }, false}, {"failure: empty upgrade keeper value", func() { emptyUpgradeKeeperValue := upgradekeeper.Keeper{} @@ -99,18 +74,12 @@ func (suite *KeeperTestSuite) TestNewKeeper() { suite.chainA.GetSimApp().AppCodec(), suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey), suite.chainA.GetSimApp().GetSubspace(ibcexported.ModuleName), - consensusHost, upgradeKeeper, scopedKeeper, "", // authority ) } }, false}, - {"success: replace stakingKeeper with non-empty MockStakingKeeper", func() { - // use a different implementation of clienttypes.StakingKeeper - mockStakingKeeper := MockStakingKeeper{"not empty"} - consensusHost = ibctm.NewConsensusHost(mockStakingKeeper) - }, true}, } for _, tc := range testCases { @@ -124,14 +93,12 @@ func (suite *KeeperTestSuite) TestNewKeeper() { suite.chainA.GetSimApp().AppCodec(), suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey), suite.chainA.GetSimApp().GetSubspace(ibcexported.ModuleName), - consensusHost, upgradeKeeper, scopedKeeper, suite.chainA.App.GetIBCKeeper().GetAuthority(), ) } - consensusHost = ibctm.NewConsensusHost(suite.chainA.GetSimApp().StakingKeeper) upgradeKeeper = suite.chainA.GetSimApp().UpgradeKeeper scopedKeeper = suite.chainA.GetSimApp().ScopedIBCKeeper diff --git a/modules/core/keeper/msg_server.go b/modules/core/keeper/msg_server.go index 2f9a2acc7be..046271e3b39 100644 --- a/modules/core/keeper/msg_server.go +++ b/modules/core/keeper/msg_server.go @@ -150,15 +150,9 @@ func (k *Keeper) ConnectionOpenInit(goCtx context.Context, msg *connectiontypes. func (k *Keeper) ConnectionOpenTry(goCtx context.Context, msg *connectiontypes.MsgConnectionOpenTry) (*connectiontypes.MsgConnectionOpenTryResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - targetClient, err := clienttypes.UnpackClientState(msg.ClientState) - if err != nil { - return nil, err - } - if _, err := k.ConnectionKeeper.ConnOpenTry( - ctx, msg.Counterparty, msg.DelayPeriod, msg.ClientId, targetClient, - msg.CounterpartyVersions, msg.ProofInit, msg.ProofClient, msg.ProofConsensus, - msg.ProofHeight, msg.ConsensusHeight, + ctx, msg.Counterparty, msg.DelayPeriod, msg.ClientId, + msg.CounterpartyVersions, msg.ProofInit, msg.ProofHeight, ); err != nil { return nil, errorsmod.Wrap(err, "connection handshake open try failed") } @@ -170,15 +164,9 @@ func (k *Keeper) ConnectionOpenTry(goCtx context.Context, msg *connectiontypes.M func (k *Keeper) ConnectionOpenAck(goCtx context.Context, msg *connectiontypes.MsgConnectionOpenAck) (*connectiontypes.MsgConnectionOpenAckResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - targetClient, err := clienttypes.UnpackClientState(msg.ClientState) - if err != nil { - return nil, err - } - if err := k.ConnectionKeeper.ConnOpenAck( - ctx, msg.ConnectionId, targetClient, msg.Version, msg.CounterpartyConnectionId, - msg.ProofTry, msg.ProofClient, msg.ProofConsensus, - msg.ProofHeight, msg.ConsensusHeight, + ctx, msg.ConnectionId, msg.Version, msg.CounterpartyConnectionId, + msg.ProofTry, msg.ProofHeight, ); err != nil { return nil, errorsmod.Wrap(err, "connection handshake open ack failed") } diff --git a/modules/light-clients/07-tendermint/consensus_host.go b/modules/light-clients/07-tendermint/consensus_host.go deleted file mode 100644 index fb7d8dc66a3..00000000000 --- a/modules/light-clients/07-tendermint/consensus_host.go +++ /dev/null @@ -1,138 +0,0 @@ -package tendermint - -import ( - "context" - "reflect" - "time" - - errorsmod "cosmossdk.io/errors" - upgradetypes "cosmossdk.io/x/upgrade/types" - - sdk "github.com/cosmos/cosmos-sdk/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - - "github.com/cometbft/cometbft/light" - - clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" - commitmenttypes "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types" - ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" - "github.com/cosmos/ibc-go/v9/modules/core/exported" -) - -var _ clienttypes.ConsensusHost = (*ConsensusHost)(nil) - -// ConsensusHost implements the 02-client clienttypes.ConsensusHost interface. -type ConsensusHost struct { - stakingKeeper StakingKeeper -} - -// StakingKeeper defines an expected interface for the tendermint ConsensusHost. -type StakingKeeper interface { - GetHistoricalInfo(ctx context.Context, height int64) (stakingtypes.HistoricalInfo, error) - UnbondingTime(ctx context.Context) (time.Duration, error) -} - -// NewConsensusHost creates and returns a new ConsensusHost for tendermint consensus. -func NewConsensusHost(stakingKeeper clienttypes.StakingKeeper) clienttypes.ConsensusHost { - if stakingKeeper == nil { - panic("staking keeper cannot be nil") - } - - return &ConsensusHost{ - stakingKeeper: stakingKeeper, - } -} - -// GetSelfConsensusState implements the 02-client clienttypes.ConsensusHost interface. -func (c *ConsensusHost) GetSelfConsensusState(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) { - selfHeight, ok := height.(clienttypes.Height) - if !ok { - return nil, errorsmod.Wrapf(ibcerrors.ErrInvalidType, "expected %T, got %T", clienttypes.Height{}, height) - } - - // check that height revision matches chainID revision - revision := clienttypes.ParseChainID(ctx.ChainID()) - if revision != height.GetRevisionNumber() { - return nil, errorsmod.Wrapf(clienttypes.ErrInvalidHeight, "chainID revision number does not match height revision number: expected %d, got %d", revision, height.GetRevisionNumber()) - } - - histInfo, err := c.stakingKeeper.GetHistoricalInfo(ctx, int64(selfHeight.RevisionHeight)) - if err != nil { - return nil, errorsmod.Wrapf(err, "height %d", selfHeight.RevisionHeight) - } - - consensusState := &ConsensusState{ - Timestamp: histInfo.Header.Time, - Root: commitmenttypes.NewMerkleRoot(histInfo.Header.GetAppHash()), - NextValidatorsHash: histInfo.Header.NextValidatorsHash, - } - - return consensusState, nil -} - -// ValidateSelfClient implements the 02-client clienttypes.ConsensusHost interface. -func (c *ConsensusHost) ValidateSelfClient(ctx sdk.Context, clientState exported.ClientState) error { - tmClient, ok := clientState.(*ClientState) - if !ok { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "client must be a Tendermint client, expected: %T, got: %T", &ClientState{}, tmClient) - } - - if !tmClient.FrozenHeight.IsZero() { - return clienttypes.ErrClientFrozen - } - - if ctx.ChainID() != tmClient.ChainId { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "invalid chain-id. expected: %s, got: %s", - ctx.ChainID(), tmClient.ChainId) - } - - revision := clienttypes.ParseChainID(ctx.ChainID()) - - // client must be in the same revision as executing chain - if tmClient.LatestHeight.RevisionNumber != revision { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "client is not in the same revision as the chain. expected revision: %d, got: %d", - tmClient.LatestHeight.RevisionNumber, revision) - } - - selfHeight := clienttypes.NewHeight(revision, uint64(ctx.BlockHeight())) - if tmClient.LatestHeight.GTE(selfHeight) { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "client has LatestHeight %d greater than or equal to chain height %d", - tmClient.LatestHeight, selfHeight) - } - - expectedProofSpecs := commitmenttypes.GetSDKSpecs() - if !reflect.DeepEqual(expectedProofSpecs, tmClient.ProofSpecs) { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "client has invalid proof specs. expected: %v got: %v", - expectedProofSpecs, tmClient.ProofSpecs) - } - - if err := light.ValidateTrustLevel(tmClient.TrustLevel.ToTendermint()); err != nil { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "trust-level invalid: %v", err) - } - - expectedUbdPeriod, err := c.stakingKeeper.UnbondingTime(ctx) - if err != nil { - return errorsmod.Wrapf(err, "failed to retrieve unbonding period") - } - - if expectedUbdPeriod != tmClient.UnbondingPeriod { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "invalid unbonding period. expected: %s, got: %s", - expectedUbdPeriod, tmClient.UnbondingPeriod) - } - - if tmClient.UnbondingPeriod < tmClient.TrustingPeriod { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "unbonding period must be greater than trusting period. unbonding period (%d) < trusting period (%d)", - tmClient.UnbondingPeriod, tmClient.TrustingPeriod) - } - - if len(tmClient.UpgradePath) != 0 { - // For now, SDK IBC implementation assumes that upgrade path (if defined) is defined by SDK upgrade module - expectedUpgradePath := []string{upgradetypes.StoreKey, upgradetypes.KeyUpgradedIBCState} - if !reflect.DeepEqual(expectedUpgradePath, tmClient.UpgradePath) { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "upgrade path must be the upgrade path defined by upgrade module. expected %v, got %v", - expectedUpgradePath, tmClient.UpgradePath) - } - } - - return nil -} diff --git a/modules/light-clients/07-tendermint/consensus_host_test.go b/modules/light-clients/07-tendermint/consensus_host_test.go deleted file mode 100644 index f0dca0148df..00000000000 --- a/modules/light-clients/07-tendermint/consensus_host_test.go +++ /dev/null @@ -1,249 +0,0 @@ -package tendermint_test - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - - clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" - commitmenttypes "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types" - "github.com/cosmos/ibc-go/v9/modules/core/exported" - solomachine "github.com/cosmos/ibc-go/v9/modules/light-clients/06-solomachine" - ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" - ibctesting "github.com/cosmos/ibc-go/v9/testing" - "github.com/cosmos/ibc-go/v9/testing/mock" -) - -func (suite *TendermintTestSuite) TestGetSelfConsensusState() { - var height clienttypes.Height - - cases := []struct { - name string - malleate func() - expError error - }{ - { - name: "zero height", - malleate: func() {}, - expError: clienttypes.ErrInvalidHeight, - }, - { - name: "height > latest height", - malleate: func() { - height = clienttypes.NewHeight(1, uint64(suite.chainA.GetContext().BlockHeight())+1) - }, - expError: stakingtypes.ErrNoHistoricalInfo, - }, - { - name: "pruned historical info", - malleate: func() { - height = clienttypes.NewHeight(1, uint64(suite.chainA.GetContext().BlockHeight())-1) - - err := suite.chainA.GetSimApp().StakingKeeper.DeleteHistoricalInfo(suite.chainA.GetContext(), int64(height.GetRevisionHeight())) - suite.Require().NoError(err) - }, - expError: stakingtypes.ErrNoHistoricalInfo, - }, - { - name: "custom consensus host: failure", - malleate: func() { - consensusHost := &mock.ConsensusHost{ - GetSelfConsensusStateFn: func(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) { - return nil, mock.MockApplicationCallbackError - }, - } - suite.chainA.GetSimApp().GetIBCKeeper().SetConsensusHost(consensusHost) - }, - expError: mock.MockApplicationCallbackError, - }, - { - name: "custom consensus host: success", - malleate: func() { - consensusHost := &mock.ConsensusHost{ - GetSelfConsensusStateFn: func(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) { - return &solomachine.ConsensusState{}, nil - }, - } - suite.chainA.GetSimApp().GetIBCKeeper().SetConsensusHost(consensusHost) - }, - expError: nil, - }, - { - name: "latest height - 1", - malleate: func() { - height = clienttypes.NewHeight(1, uint64(suite.chainA.GetContext().BlockHeight())-1) - }, - expError: nil, - }, - { - name: "latest height", - malleate: func() { - // historical info is set on BeginBlock in x/staking, which is now encapsulated within the FinalizeBlock abci method, - // thus, we do not have historical info for current height due to how the ibctesting library operates. - // ibctesting calls app.Commit() as a final step on NextBlock and we invoke test code before FinalizeBlock is called at the current height once again. - err := suite.chainA.GetSimApp().StakingKeeper.TrackHistoricalInfo(suite.chainA.GetContext()) - suite.Require().NoError(err) - - height = clienttypes.GetSelfHeight(suite.chainA.GetContext()) - }, - expError: nil, - }, - } - - for i, tc := range cases { - tc := tc - suite.Run(tc.name, func() { - suite.SetupTest() - - height = clienttypes.ZeroHeight() - - tc.malleate() - - cs, err := suite.chainA.GetSimApp().GetIBCKeeper().ClientKeeper.GetSelfConsensusState(suite.chainA.GetContext(), height) - - expPass := tc.expError == nil - if expPass { - suite.Require().NoError(err, "Case %d should have passed: %s", i, tc.name) - suite.Require().NotNil(cs, "Case %d should have passed: %s", i, tc.name) - } else { - suite.Require().ErrorIs(err, tc.expError, "Case %d should have failed: %s", i, tc.name) - suite.Require().Nil(cs, "Case %d should have failed: %s", i, tc.name) - } - }) - } -} - -func (suite *TendermintTestSuite) TestValidateSelfClient() { - testClientHeight := clienttypes.GetSelfHeight(suite.chainA.GetContext()) - testClientHeight.RevisionHeight-- - - var clientState exported.ClientState - - testCases := []struct { - name string - malleate func() - expError error - }{ - { - name: "success", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath) - }, - expError: nil, - }, - { - name: "success with nil UpgradePath", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), nil) - }, - expError: nil, - }, - { - name: "success with custom self validator: solomachine", - malleate: func() { - clientState = solomachine.NewClientState(1, &solomachine.ConsensusState{}) - - smConsensusHost := &mock.ConsensusHost{ - ValidateSelfClientFn: func(ctx sdk.Context, clientState exported.ClientState) error { - smClientState, ok := clientState.(*solomachine.ClientState) - suite.Require().True(ok) - suite.Require().Equal(uint64(1), smClientState.Sequence) - - return nil - }, - } - - // add mock validation logic - suite.chainA.App.GetIBCKeeper().SetConsensusHost(smConsensusHost) - }, - expError: nil, - }, - { - name: "frozen client", - malleate: func() { - clientState = &ibctm.ClientState{ChainId: suite.chainA.ChainID, TrustLevel: ibctm.DefaultTrustLevel, TrustingPeriod: trustingPeriod, UnbondingPeriod: ubdPeriod, MaxClockDrift: maxClockDrift, FrozenHeight: testClientHeight, LatestHeight: testClientHeight, ProofSpecs: commitmenttypes.GetSDKSpecs(), UpgradePath: ibctesting.UpgradePath} - }, - expError: clienttypes.ErrClientFrozen, - }, - { - name: "incorrect chainID", - malleate: func() { - clientState = ibctm.NewClientState("gaiatestnet", ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "invalid client height", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.GetSelfHeight(suite.chainA.GetContext()).Increment().(clienttypes.Height), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "invalid client type", - malleate: func() { - clientState = solomachine.NewClientState(0, &solomachine.ConsensusState{}) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "invalid client revision", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(1, 5), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "invalid proof specs", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, nil, ibctesting.UpgradePath) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "invalid trust level", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "invalid unbonding period", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod+10, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "invalid trusting period", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, ubdPeriod+10, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "invalid upgrade path", - malleate: func() { - clientState = ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), []string{"bad", "upgrade", "path"}) - }, - expError: clienttypes.ErrInvalidClient, - }, - } - - for _, tc := range testCases { - tc := tc - suite.Run(tc.name, func() { - suite.SetupTest() - - tc.malleate() - - err := suite.chainA.App.GetIBCKeeper().ClientKeeper.ValidateSelfClient(suite.chainA.GetContext(), clientState) - - expPass := tc.expError == nil - if expPass { - suite.Require().NoError(err, "expected valid client for case: %s", tc.name) - } else { - suite.Require().Error(err, "expected invalid client for case: %s", tc.name) - } - }) - } -} diff --git a/modules/light-clients/08-wasm/CHANGELOG.md b/modules/light-clients/08-wasm/CHANGELOG.md index f07b5e94080..b2babf7b08c 100644 --- a/modules/light-clients/08-wasm/CHANGELOG.md +++ b/modules/light-clients/08-wasm/CHANGELOG.md @@ -42,6 +42,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking +* [\#6937](https://github.com/cosmos/ibc-go/pull/6937) Remove `WasmConsensusHost` implementation of the `ConsensusHost` interface. + ### State Machine Breaking ### Improvements diff --git a/modules/light-clients/08-wasm/testing/simapp/app.go b/modules/light-clients/08-wasm/testing/simapp/app.go index 801b35a9ecc..1ebf3d9fd35 100644 --- a/modules/light-clients/08-wasm/testing/simapp/app.go +++ b/modules/light-clients/08-wasm/testing/simapp/app.go @@ -412,7 +412,7 @@ func NewSimApp( app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, runtime.NewKVStoreService(keys[upgradetypes.StoreKey]), appCodec, homePath, app.BaseApp, authtypes.NewModuleAddress(govtypes.ModuleName).String()) app.IBCKeeper = ibckeeper.NewKeeper( - appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), ibctm.NewConsensusHost(app.StakingKeeper), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) govConfig := govtypes.DefaultConfig() diff --git a/modules/light-clients/08-wasm/types/consensus_host.go b/modules/light-clients/08-wasm/types/consensus_host.go deleted file mode 100644 index 2cdfe189243..00000000000 --- a/modules/light-clients/08-wasm/types/consensus_host.go +++ /dev/null @@ -1,77 +0,0 @@ -package types - -import ( - "errors" - - errorsmod "cosmossdk.io/errors" - - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - - clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" - "github.com/cosmos/ibc-go/v9/modules/core/exported" -) - -// WasmConsensusHost implements the 02-client types.ConsensusHost interface. -type WasmConsensusHost struct { - cdc codec.BinaryCodec - delegate clienttypes.ConsensusHost -} - -var _ clienttypes.ConsensusHost = (*WasmConsensusHost)(nil) - -// NewWasmConsensusHost creates and returns a new ConsensusHost for wasm wrapped consensus client state and consensus state self validation. -func NewWasmConsensusHost(cdc codec.BinaryCodec, delegate clienttypes.ConsensusHost) (*WasmConsensusHost, error) { - if cdc == nil { - return nil, errors.New("wasm consensus host codec is nil") - } - - if delegate == nil { - return nil, errors.New("wasm delegate consensus host is nil") - } - - return &WasmConsensusHost{ - cdc: cdc, - delegate: delegate, - }, nil -} - -// GetSelfConsensusState implements the 02-client types.ConsensusHost interface. -func (w *WasmConsensusHost) GetSelfConsensusState(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) { - consensusState, err := w.delegate.GetSelfConsensusState(ctx, height) - if err != nil { - return nil, err - } - - // encode consensusState to wasm.ConsensusState.Data - bz, err := w.cdc.MarshalInterface(consensusState) - if err != nil { - return nil, err - } - - wasmConsensusState := &ConsensusState{ - Data: bz, - } - - return wasmConsensusState, nil -} - -// ValidateSelfClient implements the 02-client types.ConsensusHost interface. -func (w *WasmConsensusHost) ValidateSelfClient(ctx sdk.Context, clientState exported.ClientState) error { - wasmClientState, ok := clientState.(*ClientState) - if !ok { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "client must be a wasm client, expected: %T, got: %T", ClientState{}, wasmClientState) - } - - if wasmClientState.Data == nil { - return errorsmod.Wrapf(clienttypes.ErrInvalidClient, "wasm client state data is nil") - } - - // unmarshal the wasmClientState bytes into the ClientState interface and call self validation - var unwrappedClientState exported.ClientState - if err := w.cdc.UnmarshalInterface(wasmClientState.Data, &unwrappedClientState); err != nil { - return err - } - - return w.delegate.ValidateSelfClient(ctx, unwrappedClientState) -} diff --git a/modules/light-clients/08-wasm/types/consensus_host_test.go b/modules/light-clients/08-wasm/types/consensus_host_test.go deleted file mode 100644 index d85c8143191..00000000000 --- a/modules/light-clients/08-wasm/types/consensus_host_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package types_test - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - wasmtesting "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing" - "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" - "github.com/cosmos/ibc-go/v9/modules/core/exported" - ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" - "github.com/cosmos/ibc-go/v9/testing/mock" -) - -func (suite *TypesTestSuite) TestGetSelfConsensusState() { - var ( - consensusHost clienttypes.ConsensusHost - consensusState exported.ConsensusState - height clienttypes.Height - ) - - cases := []struct { - name string - malleate func() - expError error - }{ - { - name: "success", - malleate: func() {}, - expError: nil, - }, - { - name: "failure: delegate error", - malleate: func() { - consensusHost.(*mock.ConsensusHost).GetSelfConsensusStateFn = func(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) { - return nil, mock.MockApplicationCallbackError - } - }, - expError: mock.MockApplicationCallbackError, - }, - } - - for i, tc := range cases { - tc := tc - suite.Run(tc.name, func() { - suite.SetupTest() - height = clienttypes.ZeroHeight() - - wrappedClientConsensusStateBz := clienttypes.MustMarshalConsensusState(suite.chainA.App.AppCodec(), wasmtesting.MockTendermintClientConsensusState) - consensusState = types.NewConsensusState(wrappedClientConsensusStateBz) - - consensusHost = &mock.ConsensusHost{ - GetSelfConsensusStateFn: func(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) { - return consensusState, nil - }, - } - - tc.malleate() - - var err error - consensusHost, err = types.NewWasmConsensusHost(suite.chainA.Codec, consensusHost) - suite.Require().NoError(err) - - suite.chainA.App.GetIBCKeeper().SetConsensusHost(consensusHost) - - cs, err := suite.chainA.App.GetIBCKeeper().ClientKeeper.GetSelfConsensusState(suite.chainA.GetContext(), height) - - expPass := tc.expError == nil - if expPass { - suite.Require().NoError(err, "Case %d should have passed: %s", i, tc.name) - suite.Require().NotNil(cs, "Case %d should have passed: %s", i, tc.name) - suite.Require().NotNil(cs.(*types.ConsensusState).Data, "Case %d should have passed: %s", i, tc.name) - } else { - suite.Require().ErrorIs(err, tc.expError, "Case %d should have failed: %s", i, tc.name) - suite.Require().Nil(cs, "Case %d should have failed: %s", i, tc.name) - } - }) - } -} - -func (suite *TypesTestSuite) TestValidateSelfClient() { - var ( - mockChecksum = []byte("checksum") - clientState exported.ClientState - consensusHost clienttypes.ConsensusHost - ) - - testCases := []struct { - name string - malleate func() - expError error - }{ - { - name: "success", - malleate: func() {}, - expError: nil, - }, - { - name: "failure: invalid data", - malleate: func() { - clientState = types.NewClientState(nil, wasmtesting.Code, clienttypes.ZeroHeight()) - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "failure: invalid clientstate type", - malleate: func() { - clientState = &ibctm.ClientState{} - }, - expError: clienttypes.ErrInvalidClient, - }, - { - name: "failure: delegate error propagates", - malleate: func() { - consensusHost.(*mock.ConsensusHost).ValidateSelfClientFn = func(ctx sdk.Context, clientState exported.ClientState) error { - return mock.MockApplicationCallbackError - } - }, - expError: mock.MockApplicationCallbackError, - }, - } - - for _, tc := range testCases { - tc := tc - suite.Run(tc.name, func() { - suite.SetupTest() - - clientState = types.NewClientState(wasmtesting.CreateMockClientStateBz(suite.chainA.Codec, mockChecksum), wasmtesting.Code, clienttypes.ZeroHeight()) - consensusHost = &mock.ConsensusHost{} - - tc.malleate() - - var err error - consensusHost, err = types.NewWasmConsensusHost(suite.chainA.Codec, consensusHost) - suite.Require().NoError(err) - - suite.chainA.App.GetIBCKeeper().ClientKeeper.SetConsensusHost(consensusHost) - - err = suite.chainA.App.GetIBCKeeper().ClientKeeper.ValidateSelfClient(suite.chainA.GetContext(), clientState) - - expPass := tc.expError == nil - if expPass { - suite.Require().NoError(err, "expected valid client for case: %s", tc.name) - } else { - suite.Require().ErrorIs(err, tc.expError, "expected %s got %s", tc.expError, err) - } - }) - } -} diff --git a/proto/ibc/core/connection/v1/tx.proto b/proto/ibc/core/connection/v1/tx.proto index b0cd777d1b8..151f72fb2d0 100644 --- a/proto/ibc/core/connection/v1/tx.proto +++ b/proto/ibc/core/connection/v1/tx.proto @@ -59,23 +59,25 @@ message MsgConnectionOpenTry { string client_id = 1; // Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC. - string previous_connection_id = 2 [deprecated = true]; - google.protobuf.Any client_state = 3; - Counterparty counterparty = 4 [(gogoproto.nullable) = false]; - uint64 delay_period = 5; - repeated Version counterparty_versions = 6; - ibc.core.client.v1.Height proof_height = 7 [(gogoproto.nullable) = false]; + string previous_connection_id = 2 [deprecated = true]; + // Deprecated: this field is unused. + google.protobuf.Any client_state = 3 [deprecated = true]; + Counterparty counterparty = 4 [(gogoproto.nullable) = false]; + uint64 delay_period = 5; + repeated Version counterparty_versions = 6; + ibc.core.client.v1.Height proof_height = 7 [(gogoproto.nullable) = false]; // proof of the initialization the connection on Chain A: `UNINITIALIZED -> // INIT` bytes proof_init = 8; - // proof of client state included in message - bytes proof_client = 9; - // proof of client consensus state - bytes proof_consensus = 10; - ibc.core.client.v1.Height consensus_height = 11 [(gogoproto.nullable) = false]; + // Deprecated: this field is unused. + bytes proof_client = 9 [deprecated = true]; + // Deprecated: this field is unused. + bytes proof_consensus = 10 [deprecated = true]; + // Deprecated: this field is unused. + ibc.core.client.v1.Height consensus_height = 11 [deprecated = true]; string signer = 12; - // optional proof data for host state machines that are unable to introspect their own consensus state - bytes host_consensus_state_proof = 13; + // Deprecated: this field is unused. + bytes host_consensus_state_proof = 13 [deprecated = true]; } // MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type. @@ -88,22 +90,24 @@ message MsgConnectionOpenAck { option (gogoproto.goproto_getters) = false; - string connection_id = 1; - string counterparty_connection_id = 2; - Version version = 3; - google.protobuf.Any client_state = 4; - ibc.core.client.v1.Height proof_height = 5 [(gogoproto.nullable) = false]; + string connection_id = 1; + string counterparty_connection_id = 2; + Version version = 3; + // Deprecated: this field is unused. + google.protobuf.Any client_state = 4 [deprecated = true]; + ibc.core.client.v1.Height proof_height = 5 [(gogoproto.nullable) = false]; // proof of the initialization the connection on Chain B: `UNINITIALIZED -> // TRYOPEN` bytes proof_try = 6; - // proof of client state included in message - bytes proof_client = 7; - // proof of client consensus state - bytes proof_consensus = 8; - ibc.core.client.v1.Height consensus_height = 9 [(gogoproto.nullable) = false]; + // Deprecated: this field is unused. + bytes proof_client = 7 [deprecated = true]; + // Deprecated: this field is unused. + bytes proof_consensus = 8 [deprecated = true]; + // Deprecated: this field is unused. + ibc.core.client.v1.Height consensus_height = 9 [deprecated = true]; string signer = 10; - // optional proof data for host state machines that are unable to introspect their own consensus state - bytes host_consensus_state_proof = 11; + // Deprecated: this field is unused. + bytes host_consensus_state_proof = 11 [deprecated = true]; } // MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type. @@ -143,4 +147,4 @@ message MsgUpdateParams { } // MsgUpdateParamsResponse defines the MsgUpdateParams response type. -message MsgUpdateParamsResponse {} \ No newline at end of file +message MsgUpdateParamsResponse {} diff --git a/simapp/app.go b/simapp/app.go index 89cf28c63b8..c40fc75e681 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -404,7 +404,7 @@ func NewSimApp( app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, runtime.NewKVStoreService(keys[upgradetypes.StoreKey]), appCodec, homePath, app.BaseApp, authtypes.NewModuleAddress(govtypes.ModuleName).String()) app.IBCKeeper = ibckeeper.NewKeeper( - appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), ibctm.NewConsensusHost(app.StakingKeeper), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) govConfig := govtypes.DefaultConfig() diff --git a/testing/endpoint.go b/testing/endpoint.go index a790cdd8be7..92bad3331c3 100644 --- a/testing/endpoint.go +++ b/testing/endpoint.go @@ -244,13 +244,12 @@ func (endpoint *Endpoint) ConnOpenTry() error { err := endpoint.UpdateClient() require.NoError(endpoint.Chain.TB, err) - counterpartyClient, clientProof, consensusProof, consensusHeight, initProof, proofHeight := endpoint.QueryConnectionHandshakeProof() + initProof, proofHeight := endpoint.QueryConnectionHandshakeProof() msg := connectiontypes.NewMsgConnectionOpenTry( endpoint.ClientID, endpoint.Counterparty.ConnectionID, endpoint.Counterparty.ClientID, - counterpartyClient, endpoint.Counterparty.Chain.GetPrefix(), []*connectiontypes.Version{ConnectionVersion}, endpoint.ConnectionConfig.DelayPeriod, - initProof, clientProof, consensusProof, - proofHeight, consensusHeight, + endpoint.Counterparty.Chain.GetPrefix(), []*connectiontypes.Version{ConnectionVersion}, + endpoint.ConnectionConfig.DelayPeriod, initProof, proofHeight, endpoint.Chain.SenderAccount.GetAddress().String(), ) res, err := endpoint.Chain.SendMsgs(msg) @@ -271,13 +270,11 @@ func (endpoint *Endpoint) ConnOpenAck() error { err := endpoint.UpdateClient() require.NoError(endpoint.Chain.TB, err) - counterpartyClient, clientProof, consensusProof, consensusHeight, tryProof, proofHeight := endpoint.QueryConnectionHandshakeProof() + tryProof, proofHeight := endpoint.QueryConnectionHandshakeProof() msg := connectiontypes.NewMsgConnectionOpenAck( - endpoint.ConnectionID, endpoint.Counterparty.ConnectionID, counterpartyClient, // testing doesn't use flexible selection - tryProof, clientProof, consensusProof, - proofHeight, consensusHeight, - ConnectionVersion, + endpoint.ConnectionID, endpoint.Counterparty.ConnectionID, // testing doesn't use flexible selection + tryProof, proofHeight, ConnectionVersion, endpoint.Chain.SenderAccount.GetAddress().String(), ) return endpoint.Chain.sendMsgs(msg) @@ -300,33 +297,15 @@ func (endpoint *Endpoint) ConnOpenConfirm() error { } // QueryConnectionHandshakeProof returns all the proofs necessary to execute OpenTry or Open Ack of -// the connection handshakes. It returns the counterparty client state, proof of the counterparty -// client state, proof of the counterparty consensus state, the consensus state height, proof of -// the counterparty connection, and the proof height for all the proofs returned. +// the connection handshakes. It returns the proof of the counterparty connection and the proof height. func (endpoint *Endpoint) QueryConnectionHandshakeProof() ( - clientState exported.ClientState, clientProof, - consensusProof []byte, consensusHeight clienttypes.Height, connectionProof []byte, proofHeight clienttypes.Height, ) { - // obtain the client state on the counterparty chain - clientState = endpoint.Counterparty.Chain.GetClientState(endpoint.Counterparty.ClientID) - - // query proof for the client state on the counterparty - clientKey := host.FullClientStateKey(endpoint.Counterparty.ClientID) - clientProof, proofHeight = endpoint.Counterparty.QueryProof(clientKey) - - var ok bool - consensusHeight, ok = endpoint.Counterparty.GetClientLatestHeight().(clienttypes.Height) - require.True(endpoint.Chain.TB, ok) - // query proof for the consensus state on the counterparty - consensusKey := host.FullConsensusStateKey(endpoint.Counterparty.ClientID, consensusHeight) - consensusProof, _ = endpoint.Counterparty.QueryProofAtHeight(consensusKey, proofHeight.GetRevisionHeight()) - // query proof for the connection on the counterparty connectionKey := host.ConnectionKey(endpoint.Counterparty.ConnectionID) - connectionProof, _ = endpoint.Counterparty.QueryProofAtHeight(connectionKey, proofHeight.GetRevisionHeight()) + connectionProof, proofHeight = endpoint.Counterparty.QueryProof(connectionKey) - return clientState, clientProof, consensusProof, consensusHeight, connectionProof, proofHeight + return connectionProof, proofHeight } var sequenceNumber int diff --git a/testing/mock/consensus_host.go b/testing/mock/consensus_host.go deleted file mode 100644 index 00d0773a3cc..00000000000 --- a/testing/mock/consensus_host.go +++ /dev/null @@ -1,31 +0,0 @@ -package mock - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" - "github.com/cosmos/ibc-go/v9/modules/core/exported" -) - -var _ clienttypes.ConsensusHost = (*ConsensusHost)(nil) - -type ConsensusHost struct { - GetSelfConsensusStateFn func(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) - ValidateSelfClientFn func(ctx sdk.Context, clientState exported.ClientState) error -} - -func (cv *ConsensusHost) GetSelfConsensusState(ctx sdk.Context, height exported.Height) (exported.ConsensusState, error) { - if cv.GetSelfConsensusStateFn == nil { - return nil, nil - } - - return cv.GetSelfConsensusStateFn(ctx, height) -} - -func (cv *ConsensusHost) ValidateSelfClient(ctx sdk.Context, clientState exported.ClientState) error { - if cv.ValidateSelfClientFn == nil { - return nil - } - - return cv.ValidateSelfClientFn(ctx, clientState) -} diff --git a/testing/simapp/app.go b/testing/simapp/app.go index dca117000b3..6ebf791d319 100644 --- a/testing/simapp/app.go +++ b/testing/simapp/app.go @@ -367,7 +367,7 @@ func NewSimApp( app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, runtime.NewKVStoreService(keys[upgradetypes.StoreKey]), appCodec, homePath, app.BaseApp, authtypes.NewModuleAddress(govtypes.ModuleName).String()) app.IBCKeeper = ibckeeper.NewKeeper( - appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), ibctm.NewConsensusHost(app.StakingKeeper), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) govConfig := govtypes.DefaultConfig() diff --git a/testing/solomachine.go b/testing/solomachine.go index 4b57ae2dac1..cca8908a33a 100644 --- a/testing/solomachine.go +++ b/testing/solomachine.go @@ -24,7 +24,6 @@ import ( host "github.com/cosmos/ibc-go/v9/modules/core/24-host" "github.com/cosmos/ibc-go/v9/modules/core/exported" solomachine "github.com/cosmos/ibc-go/v9/modules/light-clients/06-solomachine" - ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" ) var ( @@ -287,18 +286,9 @@ func (solo *Solomachine) ConnOpenInit(chain *TestChain, clientID string) string func (solo *Solomachine) ConnOpenAck(chain *TestChain, clientID, connectionID string) { tryProof := solo.GenerateConnOpenTryProof(clientID, connectionID) - clientState := ibctm.NewClientState(chain.ChainID, DefaultTrustLevel, TrustingPeriod, UnbondingPeriod, MaxClockDrift, chain.LatestCommittedHeader.GetHeight().(clienttypes.Height), commitmenttypes.GetSDKSpecs(), UpgradePath) - clientProof := solo.GenerateClientStateProof(clientState) - - consensusState := chain.LatestCommittedHeader.ConsensusState() - consensusHeight := chain.LatestCommittedHeader.GetHeight() - consensusProof := solo.GenerateConsensusStateProof(consensusState, consensusHeight) - msgConnOpenAck := connectiontypes.NewMsgConnectionOpenAck( - connectionID, connectionIDSolomachine, clientState, - tryProof, clientProof, consensusProof, - clienttypes.ZeroHeight(), clientState.LatestHeight, - ConnectionVersion, + connectionID, connectionIDSolomachine, tryProof, + clienttypes.ZeroHeight(), ConnectionVersion, chain.SenderAccount.GetAddress().String(), ) @@ -513,42 +503,6 @@ func (solo *Solomachine) GenerateProof(signBytes *solomachine.SignBytes) []byte return proof } -// GenerateClientStateProof generates the proof of the client state required for the connection open try and ack handshake steps. -// The client state should be the self client states of the tendermint chain. -func (solo *Solomachine) GenerateClientStateProof(clientState exported.ClientState) []byte { - data, err := clienttypes.MarshalClientState(solo.cdc, clientState) - require.NoError(solo.t, err) - - path := host.FullClientStateKey(clientIDSolomachine) - signBytes := &solomachine.SignBytes{ - Sequence: solo.Sequence, - Timestamp: solo.Time, - Diversifier: solo.Diversifier, - Path: path, - Data: data, - } - - return solo.GenerateProof(signBytes) -} - -// GenerateConsensusStateProof generates the proof of the consensus state required for the connection open try and ack handshake steps. -// The consensus state should be the self consensus states of the tendermint chain. -func (solo *Solomachine) GenerateConsensusStateProof(consensusState exported.ConsensusState, consensusHeight exported.Height) []byte { - data, err := clienttypes.MarshalConsensusState(solo.cdc, consensusState) - require.NoError(solo.t, err) - - path := host.FullConsensusStateKey(clientIDSolomachine, consensusHeight) - signBytes := &solomachine.SignBytes{ - Sequence: solo.Sequence, - Timestamp: solo.Time, - Diversifier: solo.Diversifier, - Path: path, - Data: data, - } - - return solo.GenerateProof(signBytes) -} - // GenerateConnOpenTryProof generates the proofTry required for the connection open ack handshake step. // The clientID, connectionID provided represent the clientID and connectionID created on the counterparty chain, that is the tendermint chain. func (solo *Solomachine) GenerateConnOpenTryProof(counterpartyClientID, counterpartyConnectionID string) []byte { From 3425726ae3f6e490da3b5724584c1bbb2003f6f4 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 7 Aug 2024 12:37:15 +0200 Subject: [PATCH 62/78] deps: bump cosmos-sdk to v0.50.9 (#6828) * deps: bump cosmos-sdk to v0.50.8 * chore: update changelog * deps: bump cosmossdk.io/client to v2.0.0-beta.3. bump x/upgrade to v0.1.4 * chore: make tidy-all * test: bump to 3f6796fba413cca for testing purposes. * deps: bump cosmos sdk to 0.50.9 * Update CHANGELOG.md * chore: update CHANGELOG for submodules. --------- Co-authored-by: DimitrisJim --- CHANGELOG.md | 2 +- e2e/go.mod | 22 +++++------ e2e/go.sum | 44 +++++++++++----------- go.mod | 22 +++++------ go.sum | 44 +++++++++++----------- modules/apps/callbacks/CHANGELOG.md | 2 +- modules/apps/callbacks/go.mod | 22 +++++------ modules/apps/callbacks/go.sum | 44 +++++++++++----------- modules/capability/CHANGELOG.md | 2 +- modules/capability/go.mod | 2 +- modules/capability/go.sum | 4 +- modules/light-clients/08-wasm/CHANGELOG.md | 1 + modules/light-clients/08-wasm/go.mod | 22 +++++------ modules/light-clients/08-wasm/go.sum | 44 +++++++++++----------- simapp/go.mod | 22 +++++------ simapp/go.sum | 44 +++++++++++----------- 16 files changed, 172 insertions(+), 171 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bd77bc57eb..249a4dd8730 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,7 +38,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Dependencies -* [\#6193](https://github.com/cosmos/ibc-go/pull/6193) Bump Cosmos SDK to v0.50.7. +* [\#6828](https://github.com/cosmos/ibc-go/pull/6828) Bump Cosmos SDK to v0.50.9. * [\#6193](https://github.com/cosmos/ibc-go/pull/6193) Bump `cosmossdk.io/store` to v1.1.0. * [\#6848](https://github.com/cosmos/ibc-go/pull/6848) Bump CometBFT to v0.38.10. * [\#6380](https://github.com/cosmos/ibc-go/pull/6380) Bump go to v1.22. diff --git a/e2e/go.mod b/e2e/go.mod index 00a3d222c21..b441a814f9b 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -13,9 +13,9 @@ replace ( require ( cosmossdk.io/errors v1.0.1 cosmossdk.io/math v1.3.0 - cosmossdk.io/x/upgrade v0.1.3 + cosmossdk.io/x/upgrade v0.1.4 github.com/cometbft/cometbft v0.38.10 - github.com/cosmos/cosmos-sdk v0.50.7 + github.com/cosmos/cosmos-sdk v0.50.9 github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.0.0-00010101000000-000000000000 github.com/cosmos/ibc-go/v9 v9.0.0 @@ -38,14 +38,14 @@ require ( cloud.google.com/go/iam v1.1.9 // indirect cloud.google.com/go/storage v1.41.0 // indirect cosmossdk.io/api v0.7.5 // indirect - cosmossdk.io/client/v2 v2.0.0-beta.2 // indirect + cosmossdk.io/client/v2 v2.0.0-beta.3 // indirect cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/core v0.11.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/core v0.11.1 // indirect + cosmossdk.io/depinject v1.0.0 // indirect cosmossdk.io/log v1.3.1 // indirect cosmossdk.io/store v1.1.0 // indirect cosmossdk.io/x/feegrant v0.1.1 // indirect - cosmossdk.io/x/tx v0.13.3 // indirect + cosmossdk.io/x/tx v0.13.4 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -236,19 +236,19 @@ require ( go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.24.0 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/crypto v0.25.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/api v0.186.0 // indirect google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect diff --git a/e2e/go.sum b/e2e/go.sum index 946031aaf67..5b34d4ca181 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -188,14 +188,14 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.2 h1:jnTKB0PLb7qunQibijAftwmNjUbsIAf1sPjF5HaCW/E= -cosmossdk.io/client/v2 v2.0.0-beta.2/go.mod h1:8QAyewD7rDWeJGqedFBpeqJ9XLIJAkt1TDhCf1gsN9o= +cosmossdk.io/client/v2 v2.0.0-beta.3 h1:+TTuH0DwQYsUq2JFAl3fDZzKq5gQG7nt3dAattkjFDU= +cosmossdk.io/client/v2 v2.0.0-beta.3/go.mod h1:CZcL41HpJPOOayTCO28j8weNBQprG+SRiKX39votypo= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= +cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= @@ -210,10 +210,10 @@ cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= -cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= +cosmossdk.io/x/tx v0.13.4 h1:Eg0PbJgeO0gM8p5wx6xa0fKR7hIV6+8lC56UrsvSo0Y= +cosmossdk.io/x/tx v0.13.4/go.mod h1:BkFqrnGGgW50Y6cwTy+JvgAhiffbGEKW6KF9ufcDpvk= +cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= +cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -377,8 +377,8 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.7 h1:LsBGKxifENR/DN4E1RZaitsyL93HU44x0p8EnMHp4V4= -github.com/cosmos/cosmos-sdk v0.50.7/go.mod h1:84xDDJEHttRT7NDGwBaUOLVOMN0JNE9x7NbsYIxXs1s= +github.com/cosmos/cosmos-sdk v0.50.9 h1:gt2usjz0H0qW6KwAxWw7ZJ3XU8uDwmhN+hYG3nTLeSg= +github.com/cosmos/cosmos-sdk v0.50.9/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -1163,8 +1163,8 @@ golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1265,8 +1265,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1405,13 +1405,13 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1672,8 +1672,8 @@ google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 h1:6whtk83KtD3FkGr google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094/go.mod h1:Zs4wYw8z1zr6RNF4cwYb31mvN/EGaKAdQjNCF3DW6K4= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 h1:SbSDUWW1PAO24TNpLdeheoYPd7kllICcLU52x6eD4kQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= diff --git a/go.mod b/go.mod index 92b8b89c510..9583c147399 100644 --- a/go.mod +++ b/go.mod @@ -6,18 +6,18 @@ module github.com/cosmos/ibc-go/v9 require ( cosmossdk.io/api v0.7.5 - cosmossdk.io/client/v2 v2.0.0-beta.2 - cosmossdk.io/core v0.11.0 + cosmossdk.io/client/v2 v2.0.0-beta.3 + cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 cosmossdk.io/log v1.3.1 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.0 - cosmossdk.io/x/tx v0.13.3 - cosmossdk.io/x/upgrade v0.1.3 + cosmossdk.io/x/tx v0.13.4 + cosmossdk.io/x/upgrade v0.1.4 github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.5 - github.com/cosmos/cosmos-sdk v0.50.7 + github.com/cosmos/cosmos-sdk v0.50.9 github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ics23/go v0.10.0 @@ -41,7 +41,7 @@ require ( cloud.google.com/go/iam v1.1.9 // indirect cloud.google.com/go/storage v1.41.0 // indirect cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/depinject v1.0.0 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -177,18 +177,18 @@ require ( go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.24.0 // indirect + golang.org/x/crypto v0.25.0 // indirect golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/api v0.186.0 // indirect google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect diff --git a/go.sum b/go.sum index a1ea8506d9e..876c2859f32 100644 --- a/go.sum +++ b/go.sum @@ -188,14 +188,14 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.2 h1:jnTKB0PLb7qunQibijAftwmNjUbsIAf1sPjF5HaCW/E= -cosmossdk.io/client/v2 v2.0.0-beta.2/go.mod h1:8QAyewD7rDWeJGqedFBpeqJ9XLIJAkt1TDhCf1gsN9o= +cosmossdk.io/client/v2 v2.0.0-beta.3 h1:+TTuH0DwQYsUq2JFAl3fDZzKq5gQG7nt3dAattkjFDU= +cosmossdk.io/client/v2 v2.0.0-beta.3/go.mod h1:CZcL41HpJPOOayTCO28j8weNBQprG+SRiKX39votypo= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= +cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= @@ -204,10 +204,10 @@ cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= -cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= +cosmossdk.io/x/tx v0.13.4 h1:Eg0PbJgeO0gM8p5wx6xa0fKR7hIV6+8lC56UrsvSo0Y= +cosmossdk.io/x/tx v0.13.4/go.mod h1:BkFqrnGGgW50Y6cwTy+JvgAhiffbGEKW6KF9ufcDpvk= +cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= +cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -343,8 +343,8 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.7 h1:LsBGKxifENR/DN4E1RZaitsyL93HU44x0p8EnMHp4V4= -github.com/cosmos/cosmos-sdk v0.50.7/go.mod h1:84xDDJEHttRT7NDGwBaUOLVOMN0JNE9x7NbsYIxXs1s= +github.com/cosmos/cosmos-sdk v0.50.9 h1:gt2usjz0H0qW6KwAxWw7ZJ3XU8uDwmhN+hYG3nTLeSg= +github.com/cosmos/cosmos-sdk v0.50.9/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= @@ -1037,8 +1037,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1137,8 +1137,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1276,13 +1276,13 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1542,8 +1542,8 @@ google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 h1:6whtk83KtD3FkGr google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094/go.mod h1:Zs4wYw8z1zr6RNF4cwYb31mvN/EGaKAdQjNCF3DW6K4= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 h1:SbSDUWW1PAO24TNpLdeheoYPd7kllICcLU52x6eD4kQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= diff --git a/modules/apps/callbacks/CHANGELOG.md b/modules/apps/callbacks/CHANGELOG.md index 8b76e98bda7..b2c50b90190 100644 --- a/modules/apps/callbacks/CHANGELOG.md +++ b/modules/apps/callbacks/CHANGELOG.md @@ -38,7 +38,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Dependencies -* [\#6193](https://github.com/cosmos/ibc-go/pull/6193) Bump Cosmos SDK to v0.50.6. +* [\#6828](https://github.com/cosmos/ibc-go/pull/6828) Bump Cosmos SDK to v0.50.9. * [\#6193](https://github.com/cosmos/ibc-go/pull/6193) Bump `cosmossdk.io/store` to v1.1.0. * [\#6848](https://github.com/cosmos/ibc-go/pull/6848) Bump CometBFT to v0.38.10. diff --git a/modules/apps/callbacks/go.mod b/modules/apps/callbacks/go.mod index 4c9c6ee12c6..ada3feed03f 100644 --- a/modules/apps/callbacks/go.mod +++ b/modules/apps/callbacks/go.mod @@ -10,8 +10,8 @@ replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.2021 require ( cosmossdk.io/api v0.7.5 - cosmossdk.io/client/v2 v2.0.0-beta.2 - cosmossdk.io/core v0.11.0 + cosmossdk.io/client/v2 v2.0.0-beta.3 + cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 cosmossdk.io/log v1.3.1 cosmossdk.io/math v1.3.0 @@ -20,11 +20,11 @@ require ( cosmossdk.io/x/circuit v0.1.1 cosmossdk.io/x/evidence v0.1.1 cosmossdk.io/x/feegrant v0.1.1 - cosmossdk.io/x/tx v0.13.3 - cosmossdk.io/x/upgrade v0.1.3 + cosmossdk.io/x/tx v0.13.4 + cosmossdk.io/x/upgrade v0.1.4 github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 - github.com/cosmos/cosmos-sdk v0.50.7 + github.com/cosmos/cosmos-sdk v0.50.9 github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v9 v9.0.0 @@ -42,7 +42,7 @@ require ( cloud.google.com/go/iam v1.1.9 // indirect cloud.google.com/go/storage v1.41.0 // indirect cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/depinject v1.0.0 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -184,19 +184,19 @@ require ( go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.24.0 // indirect + golang.org/x/crypto v0.25.0 // indirect golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/api v0.186.0 // indirect google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 // indirect google.golang.org/grpc v1.65.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/modules/apps/callbacks/go.sum b/modules/apps/callbacks/go.sum index 834a6d797e4..02989474d6b 100644 --- a/modules/apps/callbacks/go.sum +++ b/modules/apps/callbacks/go.sum @@ -188,14 +188,14 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.2 h1:jnTKB0PLb7qunQibijAftwmNjUbsIAf1sPjF5HaCW/E= -cosmossdk.io/client/v2 v2.0.0-beta.2/go.mod h1:8QAyewD7rDWeJGqedFBpeqJ9XLIJAkt1TDhCf1gsN9o= +cosmossdk.io/client/v2 v2.0.0-beta.3 h1:+TTuH0DwQYsUq2JFAl3fDZzKq5gQG7nt3dAattkjFDU= +cosmossdk.io/client/v2 v2.0.0-beta.3/go.mod h1:CZcL41HpJPOOayTCO28j8weNBQprG+SRiKX39votypo= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= +cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= @@ -212,10 +212,10 @@ cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= -cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= +cosmossdk.io/x/tx v0.13.4 h1:Eg0PbJgeO0gM8p5wx6xa0fKR7hIV6+8lC56UrsvSo0Y= +cosmossdk.io/x/tx v0.13.4/go.mod h1:BkFqrnGGgW50Y6cwTy+JvgAhiffbGEKW6KF9ufcDpvk= +cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= +cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -351,8 +351,8 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.7 h1:LsBGKxifENR/DN4E1RZaitsyL93HU44x0p8EnMHp4V4= -github.com/cosmos/cosmos-sdk v0.50.7/go.mod h1:84xDDJEHttRT7NDGwBaUOLVOMN0JNE9x7NbsYIxXs1s= +github.com/cosmos/cosmos-sdk v0.50.9 h1:gt2usjz0H0qW6KwAxWw7ZJ3XU8uDwmhN+hYG3nTLeSg= +github.com/cosmos/cosmos-sdk v0.50.9/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= @@ -1049,8 +1049,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1149,8 +1149,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1288,13 +1288,13 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1554,8 +1554,8 @@ google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 h1:6whtk83KtD3FkGr google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094/go.mod h1:Zs4wYw8z1zr6RNF4cwYb31mvN/EGaKAdQjNCF3DW6K4= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 h1:SbSDUWW1PAO24TNpLdeheoYPd7kllICcLU52x6eD4kQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= diff --git a/modules/capability/CHANGELOG.md b/modules/capability/CHANGELOG.md index 3f99cc7d569..52e267fb93c 100644 --- a/modules/capability/CHANGELOG.md +++ b/modules/capability/CHANGELOG.md @@ -31,7 +31,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Dependencies -* [\#6193](https://github.com/cosmos/ibc-go/pull/6193) Bump Cosmos SDK to v0.50.6. +* [\#6828](https://github.com/cosmos/ibc-go/pull/6828) Bump Cosmos SDK to v0.50.9. * [\#6193](https://github.com/cosmos/ibc-go/pull/6193) Bump `cosmossdk.io/store` to v1.1.0. * [\#6848](https://github.com/cosmos/ibc-go/pull/6848) Bump CometBFT to v0.38.10. diff --git a/modules/capability/go.mod b/modules/capability/go.mod index 5c1c70f933d..275bcfb2148 100644 --- a/modules/capability/go.mod +++ b/modules/capability/go.mod @@ -14,7 +14,7 @@ require ( cosmossdk.io/store v1.1.0 github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 - github.com/cosmos/cosmos-sdk v0.50.7 + github.com/cosmos/cosmos-sdk v0.50.8 github.com/cosmos/gogoproto v1.5.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/stretchr/testify v1.9.0 diff --git a/modules/capability/go.sum b/modules/capability/go.sum index eae67a799f3..987a5b7e29c 100644 --- a/modules/capability/go.sum +++ b/modules/capability/go.sum @@ -127,8 +127,8 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.7 h1:LsBGKxifENR/DN4E1RZaitsyL93HU44x0p8EnMHp4V4= -github.com/cosmos/cosmos-sdk v0.50.7/go.mod h1:84xDDJEHttRT7NDGwBaUOLVOMN0JNE9x7NbsYIxXs1s= +github.com/cosmos/cosmos-sdk v0.50.8 h1:2UJHssUaGHTl4/dFp8xyREKAnfiRU6VVfqtKG9n8w5g= +github.com/cosmos/cosmos-sdk v0.50.8/go.mod h1:Zb+DgHtiByNwgj71IlJBXwOq6dLhtyAq3AgqpXm/jHo= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= diff --git a/modules/light-clients/08-wasm/CHANGELOG.md b/modules/light-clients/08-wasm/CHANGELOG.md index b2babf7b08c..b3c641ccd9a 100644 --- a/modules/light-clients/08-wasm/CHANGELOG.md +++ b/modules/light-clients/08-wasm/CHANGELOG.md @@ -38,6 +38,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Dependencies +* [\#6828](https://github.com/cosmos/ibc-go/pull/6828) Bump Cosmos SDK to v0.50.9. * [\#6848](https://github.com/cosmos/ibc-go/pull/6848) Bump CometBFT to v0.38.10. ### API Breaking diff --git a/modules/light-clients/08-wasm/go.mod b/modules/light-clients/08-wasm/go.mod index f8da059c7bd..00af43deb0c 100644 --- a/modules/light-clients/08-wasm/go.mod +++ b/modules/light-clients/08-wasm/go.mod @@ -10,9 +10,9 @@ replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.2021 require ( cosmossdk.io/api v0.7.5 - cosmossdk.io/client/v2 v2.0.0-beta.2 + cosmossdk.io/client/v2 v2.0.0-beta.3 cosmossdk.io/collections v0.4.0 - cosmossdk.io/core v0.11.0 + cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 cosmossdk.io/log v1.3.1 cosmossdk.io/math v1.3.0 @@ -21,12 +21,12 @@ require ( cosmossdk.io/x/circuit v0.1.1 cosmossdk.io/x/evidence v0.1.1 cosmossdk.io/x/feegrant v0.1.1 - cosmossdk.io/x/tx v0.13.3 - cosmossdk.io/x/upgrade v0.1.3 + cosmossdk.io/x/tx v0.13.4 + cosmossdk.io/x/upgrade v0.1.4 github.com/CosmWasm/wasmvm/v2 v2.1.0 github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 - github.com/cosmos/cosmos-sdk v0.50.7 + github.com/cosmos/cosmos-sdk v0.50.9 github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v9 v9.0.0 @@ -47,7 +47,7 @@ require ( cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.9 // indirect cloud.google.com/go/storage v1.41.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/depinject v1.0.0 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -188,18 +188,18 @@ require ( go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.24.0 // indirect + golang.org/x/crypto v0.25.0 // indirect golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/api v0.186.0 // indirect google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/modules/light-clients/08-wasm/go.sum b/modules/light-clients/08-wasm/go.sum index 07c2318eec2..6b40b0b97d9 100644 --- a/modules/light-clients/08-wasm/go.sum +++ b/modules/light-clients/08-wasm/go.sum @@ -188,14 +188,14 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.2 h1:jnTKB0PLb7qunQibijAftwmNjUbsIAf1sPjF5HaCW/E= -cosmossdk.io/client/v2 v2.0.0-beta.2/go.mod h1:8QAyewD7rDWeJGqedFBpeqJ9XLIJAkt1TDhCf1gsN9o= +cosmossdk.io/client/v2 v2.0.0-beta.3 h1:+TTuH0DwQYsUq2JFAl3fDZzKq5gQG7nt3dAattkjFDU= +cosmossdk.io/client/v2 v2.0.0-beta.3/go.mod h1:CZcL41HpJPOOayTCO28j8weNBQprG+SRiKX39votypo= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= +cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= @@ -212,10 +212,10 @@ cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= -cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= +cosmossdk.io/x/tx v0.13.4 h1:Eg0PbJgeO0gM8p5wx6xa0fKR7hIV6+8lC56UrsvSo0Y= +cosmossdk.io/x/tx v0.13.4/go.mod h1:BkFqrnGGgW50Y6cwTy+JvgAhiffbGEKW6KF9ufcDpvk= +cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= +cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -353,8 +353,8 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.7 h1:LsBGKxifENR/DN4E1RZaitsyL93HU44x0p8EnMHp4V4= -github.com/cosmos/cosmos-sdk v0.50.7/go.mod h1:84xDDJEHttRT7NDGwBaUOLVOMN0JNE9x7NbsYIxXs1s= +github.com/cosmos/cosmos-sdk v0.50.9 h1:gt2usjz0H0qW6KwAxWw7ZJ3XU8uDwmhN+hYG3nTLeSg= +github.com/cosmos/cosmos-sdk v0.50.9/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= @@ -1053,8 +1053,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1153,8 +1153,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1292,13 +1292,13 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1558,8 +1558,8 @@ google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 h1:6whtk83KtD3FkGr google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094/go.mod h1:Zs4wYw8z1zr6RNF4cwYb31mvN/EGaKAdQjNCF3DW6K4= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 h1:SbSDUWW1PAO24TNpLdeheoYPd7kllICcLU52x6eD4kQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= diff --git a/simapp/go.mod b/simapp/go.mod index 23d1cb1220e..f056f96b7e2 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -11,19 +11,19 @@ replace ( require ( cosmossdk.io/api v0.7.5 - cosmossdk.io/client/v2 v2.0.0-beta.2 - cosmossdk.io/core v0.11.0 + cosmossdk.io/client/v2 v2.0.0-beta.3 + cosmossdk.io/core v0.11.1 cosmossdk.io/log v1.3.1 cosmossdk.io/store v1.1.0 cosmossdk.io/tools/confix v0.1.1 cosmossdk.io/x/circuit v0.1.1 cosmossdk.io/x/evidence v0.1.1 cosmossdk.io/x/feegrant v0.1.1 - cosmossdk.io/x/tx v0.13.3 - cosmossdk.io/x/upgrade v0.1.3 + cosmossdk.io/x/tx v0.13.4 + cosmossdk.io/x/upgrade v0.1.4 github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 - github.com/cosmos/cosmos-sdk v0.50.7 + github.com/cosmos/cosmos-sdk v0.50.9 github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v9 v9.0.0 @@ -41,7 +41,7 @@ require ( cloud.google.com/go/iam v1.1.9 // indirect cloud.google.com/go/storage v1.41.0 // indirect cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/depinject v1.0.0 // indirect cosmossdk.io/errors v1.0.1 // indirect cosmossdk.io/math v1.3.0 // indirect filippo.io/edwards25519 v1.1.0 // indirect @@ -185,19 +185,19 @@ require ( go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.24.0 // indirect + golang.org/x/crypto v0.25.0 // indirect golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/api v0.186.0 // indirect google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 // indirect google.golang.org/grpc v1.65.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/simapp/go.sum b/simapp/go.sum index 58a8e02571b..7901da9e248 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -188,14 +188,14 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.2 h1:jnTKB0PLb7qunQibijAftwmNjUbsIAf1sPjF5HaCW/E= -cosmossdk.io/client/v2 v2.0.0-beta.2/go.mod h1:8QAyewD7rDWeJGqedFBpeqJ9XLIJAkt1TDhCf1gsN9o= +cosmossdk.io/client/v2 v2.0.0-beta.3 h1:+TTuH0DwQYsUq2JFAl3fDZzKq5gQG7nt3dAattkjFDU= +cosmossdk.io/client/v2 v2.0.0-beta.3/go.mod h1:CZcL41HpJPOOayTCO28j8weNBQprG+SRiKX39votypo= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= +cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= @@ -212,10 +212,10 @@ cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= -cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= +cosmossdk.io/x/tx v0.13.4 h1:Eg0PbJgeO0gM8p5wx6xa0fKR7hIV6+8lC56UrsvSo0Y= +cosmossdk.io/x/tx v0.13.4/go.mod h1:BkFqrnGGgW50Y6cwTy+JvgAhiffbGEKW6KF9ufcDpvk= +cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= +cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -351,8 +351,8 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.7 h1:LsBGKxifENR/DN4E1RZaitsyL93HU44x0p8EnMHp4V4= -github.com/cosmos/cosmos-sdk v0.50.7/go.mod h1:84xDDJEHttRT7NDGwBaUOLVOMN0JNE9x7NbsYIxXs1s= +github.com/cosmos/cosmos-sdk v0.50.9 h1:gt2usjz0H0qW6KwAxWw7ZJ3XU8uDwmhN+hYG3nTLeSg= +github.com/cosmos/cosmos-sdk v0.50.9/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= @@ -1047,8 +1047,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1147,8 +1147,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1286,13 +1286,13 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1552,8 +1552,8 @@ google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 h1:6whtk83KtD3FkGr google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094/go.mod h1:Zs4wYw8z1zr6RNF4cwYb31mvN/EGaKAdQjNCF3DW6K4= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 h1:SbSDUWW1PAO24TNpLdeheoYPd7kllICcLU52x6eD4kQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= From 1e6093a55047846626a7f08418a379b2d98d1244 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:20:49 +0200 Subject: [PATCH 63/78] chore(deps): bump github.com/cosmos/cosmos-sdk in /modules/capability (#7077) Bumps [github.com/cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) from 0.50.8 to 0.50.9. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.50.9/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/v0.50.8...v0.50.9) --- updated-dependencies: - dependency-name: github.com/cosmos/cosmos-sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- modules/capability/go.mod | 26 ++++++++++---------- modules/capability/go.sum | 52 +++++++++++++++++++-------------------- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/modules/capability/go.mod b/modules/capability/go.mod index 275bcfb2148..3e9f0a9c286 100644 --- a/modules/capability/go.mod +++ b/modules/capability/go.mod @@ -7,14 +7,14 @@ toolchain go1.22.0 replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 require ( - cosmossdk.io/core v0.11.0 + cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 cosmossdk.io/log v1.3.1 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.0 github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 - github.com/cosmos/cosmos-sdk v0.50.8 + github.com/cosmos/cosmos-sdk v0.50.9 github.com/cosmos/gogoproto v1.5.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/stretchr/testify v1.9.0 @@ -24,8 +24,8 @@ require ( require ( cosmossdk.io/api v0.7.5 // indirect cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect - cosmossdk.io/x/tx v0.13.3 // indirect + cosmossdk.io/depinject v1.0.0 // indirect + cosmossdk.io/x/tx v0.13.4 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect @@ -140,18 +140,18 @@ require ( github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect go.uber.org/multierr v1.10.0 // indirect - golang.org/x/crypto v0.22.0 // indirect + golang.org/x/crypto v0.25.0 // indirect golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect - golang.org/x/net v0.24.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/term v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect + golang.org/x/text v0.16.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect - google.golang.org/grpc v1.63.2 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 // indirect + google.golang.org/grpc v1.64.1 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect diff --git a/modules/capability/go.sum b/modules/capability/go.sum index 987a5b7e29c..2b16c8e9a02 100644 --- a/modules/capability/go.sum +++ b/modules/capability/go.sum @@ -4,10 +4,10 @@ cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= +cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= @@ -16,8 +16,8 @@ cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= +cosmossdk.io/x/tx v0.13.4 h1:Eg0PbJgeO0gM8p5wx6xa0fKR7hIV6+8lC56UrsvSo0Y= +cosmossdk.io/x/tx v0.13.4/go.mod h1:BkFqrnGGgW50Y6cwTy+JvgAhiffbGEKW6KF9ufcDpvk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= @@ -127,8 +127,8 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.8 h1:2UJHssUaGHTl4/dFp8xyREKAnfiRU6VVfqtKG9n8w5g= -github.com/cosmos/cosmos-sdk v0.50.8/go.mod h1:Zb+DgHtiByNwgj71IlJBXwOq6dLhtyAq3AgqpXm/jHo= +github.com/cosmos/cosmos-sdk v0.50.9 h1:gt2usjz0H0qW6KwAxWw7ZJ3XU8uDwmhN+hYG3nTLeSg= +github.com/cosmos/cosmos-sdk v0.50.9/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= @@ -725,8 +725,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= @@ -771,8 +771,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -839,20 +839,20 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -896,10 +896,10 @@ google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5 h1:SbSDUWW1PAO24TNpLdeheoYPd7kllICcLU52x6eD4kQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240709173604-40e1e62336c5/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -917,8 +917,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= +google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -933,8 +933,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 483b60b25c7a8956c104aeaf9b00bb101c61270b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 14:21:27 +0000 Subject: [PATCH 64/78] chore(deps): bump bufbuild/buf-setup-action from 1.35.1 to 1.36.0 (#7070) Bumps [bufbuild/buf-setup-action](https://github.com/bufbuild/buf-setup-action) from 1.35.1 to 1.36.0. - [Release notes](https://github.com/bufbuild/buf-setup-action/releases) - [Commits](https://github.com/bufbuild/buf-setup-action/compare/v1.35.1...v1.36.0) --- updated-dependencies: - dependency-name: bufbuild/buf-setup-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/proto-registry.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/proto-registry.yml b/.github/workflows/proto-registry.yml index 0e37bb53c96..b3d96eab4f8 100644 --- a/.github/workflows/proto-registry.yml +++ b/.github/workflows/proto-registry.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: bufbuild/buf-setup-action@v1.35.1 + - uses: bufbuild/buf-setup-action@v1.36.0 - uses: bufbuild/buf-push-action@v1 with: input: "proto" From c9329bbf6b77f179b0c0767eadaa1c4c64ec0915 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 14:21:39 +0000 Subject: [PATCH 65/78] chore(deps): bump docker/build-push-action from 6.5.0 to 6.6.0 (#7071) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.5.0 to 6.6.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/5176d81f87c23d6fc96624dfdbcd9f3830bbe445...4f7cdeb0f05278b464e71357394bf2c61f94138e) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker.yml | 4 ++-- .github/workflows/e2e-test-workflow-call.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index bd58e9aaf8e..d2317a90645 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -28,7 +28,7 @@ jobs: images: ${{ env.REGISTRY }}/cosmos/${{ env.IMAGE_NAME }} - name: Build Docker image - uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 + uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e with: context: . tags: ${{ steps.meta.outputs.tags }} @@ -46,7 +46,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Push Docker image - uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 + uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e with: context: . push: true diff --git a/.github/workflows/e2e-test-workflow-call.yml b/.github/workflows/e2e-test-workflow-call.yml index 2b80aeefa84..73980d862df 100644 --- a/.github/workflows/e2e-test-workflow-call.yml +++ b/.github/workflows/e2e-test-workflow-call.yml @@ -132,7 +132,7 @@ jobs: - name: Build and push Docker image if: ${{ inputs.build-and-push-docker-image }} - uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 + uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e with: context: . push: true @@ -179,7 +179,7 @@ jobs: - name: Build and push Docker image if: ${{ inputs.build-and-push-docker-image-wasm }} - uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 + uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e with: context: . push: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ff75dabb463..0035d074083 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: images: ${{ env.REGISTRY }}/cosmos/${{ env.IMAGE_NAME }} - name: Build and push Docker image - uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 + uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e with: context: . push: true From eeb5df943c36d13acf8b87aeb6328cf8e0dc9ba1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:27:07 +0200 Subject: [PATCH 66/78] chore(deps): bump golang.org/x/mod from 0.19.0 to 0.20.0 in /e2e (#7050) Bumps [golang.org/x/mod](https://github.com/golang/mod) from 0.19.0 to 0.20.0. - [Commits](https://github.com/golang/mod/compare/v0.19.0...v0.20.0) --- updated-dependencies: - dependency-name: golang.org/x/mod dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- e2e/go.mod | 2 +- e2e/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/go.mod b/e2e/go.mod index b441a814f9b..6adae3b8062 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -25,7 +25,7 @@ require ( github.com/stretchr/testify v1.9.0 go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 - golang.org/x/mod v0.19.0 + golang.org/x/mod v0.20.0 google.golang.org/grpc v1.65.0 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/e2e/go.sum b/e2e/go.sum index 5b34d4ca181..c9064284b72 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -1204,8 +1204,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= From 2b8839e034ee2e6b864a633a7c3122489c7b823f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 14:39:05 +0000 Subject: [PATCH 67/78] chore(deps): bump github.com/spf13/cast from 1.6.0 to 1.7.0 (#7079) * chore(deps): bump github.com/spf13/cast from 1.6.0 to 1.7.0 Bumps [github.com/spf13/cast](https://github.com/spf13/cast) from 1.6.0 to 1.7.0. - [Release notes](https://github.com/spf13/cast/releases) - [Commits](https://github.com/spf13/cast/compare/v1.6.0...v1.7.0) --- updated-dependencies: - dependency-name: github.com/spf13/cast dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * deps: bump spf13/cast to 1.7.0, tidy-all --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: DimitrisJim --- e2e/go.mod | 2 +- e2e/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- modules/apps/callbacks/go.mod | 2 +- modules/apps/callbacks/go.sum | 4 ++-- modules/light-clients/08-wasm/go.mod | 2 +- modules/light-clients/08-wasm/go.sum | 4 ++-- simapp/go.mod | 2 +- simapp/go.sum | 4 ++-- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/e2e/go.mod b/e2e/go.mod index 6adae3b8062..667fe582853 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -215,7 +215,7 @@ require ( github.com/sourcegraph/conc v0.3.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect diff --git a/e2e/go.sum b/e2e/go.sum index c9064284b72..28e5a3eb8fb 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -1036,8 +1036,8 @@ github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0b github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= diff --git a/go.mod b/go.mod index 9583c147399..5057ed5f351 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-metrics v0.5.3 - github.com/spf13/cast v1.6.0 + github.com/spf13/cast v1.7.0 github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.9.0 google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 diff --git a/go.sum b/go.sum index 876c2859f32..88e5945b3d3 100644 --- a/go.sum +++ b/go.sum @@ -925,8 +925,8 @@ github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIK github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= diff --git a/modules/apps/callbacks/go.mod b/modules/apps/callbacks/go.mod index ada3feed03f..874a723b622 100644 --- a/modules/apps/callbacks/go.mod +++ b/modules/apps/callbacks/go.mod @@ -28,7 +28,7 @@ require ( github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v9 v9.0.0 - github.com/spf13/cast v1.6.0 + github.com/spf13/cast v1.7.0 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 diff --git a/modules/apps/callbacks/go.sum b/modules/apps/callbacks/go.sum index 02989474d6b..faf24b44b29 100644 --- a/modules/apps/callbacks/go.sum +++ b/modules/apps/callbacks/go.sum @@ -937,8 +937,8 @@ github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIK github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= diff --git a/modules/light-clients/08-wasm/go.mod b/modules/light-clients/08-wasm/go.mod index 00af43deb0c..f19497b3802 100644 --- a/modules/light-clients/08-wasm/go.mod +++ b/modules/light-clients/08-wasm/go.mod @@ -32,7 +32,7 @@ require ( github.com/cosmos/ibc-go/v9 v9.0.0 github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/spf13/cast v1.6.0 + github.com/spf13/cast v1.7.0 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 diff --git a/modules/light-clients/08-wasm/go.sum b/modules/light-clients/08-wasm/go.sum index 6b40b0b97d9..8e596ccf1ba 100644 --- a/modules/light-clients/08-wasm/go.sum +++ b/modules/light-clients/08-wasm/go.sum @@ -941,8 +941,8 @@ github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIK github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= diff --git a/simapp/go.mod b/simapp/go.mod index f056f96b7e2..ac2327cc885 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -27,7 +27,7 @@ require ( github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v9 v9.0.0 - github.com/spf13/cast v1.6.0 + github.com/spf13/cast v1.7.0 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 diff --git a/simapp/go.sum b/simapp/go.sum index 7901da9e248..d886a3733ec 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -935,8 +935,8 @@ github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIK github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= From f26f709796c23aaa54484bd89b49d8252aeaca70 Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Wed, 7 Aug 2024 17:54:21 +0300 Subject: [PATCH 68/78] chore: regen swagger docs using make proto-swagger-gen (#7005) --- docs/client/swagger-ui/swagger.yaml | 438 +++++++++++++++++++++++++++- 1 file changed, 437 insertions(+), 1 deletion(-) diff --git a/docs/client/swagger-ui/swagger.yaml b/docs/client/swagger-ui/swagger.yaml index 1ae230cad24..bb8d6cb6d2a 100644 --- a/docs/client/swagger-ui/swagger.yaml +++ b/docs/client/swagger-ui/swagger.yaml @@ -3943,6 +3943,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. description: >- QueryClientStateResponse is the response type for the Query/ClientState RPC @@ -4418,6 +4425,13 @@ paths: the RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. consensus_state: type: object properties: @@ -4939,6 +4953,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: >- Height is a monotonically increasing data type @@ -5462,6 +5483,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: >- Height is a monotonically increasing data type @@ -6951,6 +6979,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: >- Height is a monotonically increasing data type @@ -7041,6 +7076,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryClientConnectionsResponse is the response type for the Query/ClientConnections RPC method @@ -7401,6 +7443,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. description: >- QueryConnectionsResponse is the response type for the Query/Connections RPC @@ -7795,6 +7844,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. description: >- QueryConnectionResponse is the response type for the Query/Connection RPC @@ -8243,6 +8299,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryConnectionClientStateResponse is the response type for the Query/ConnectionClientState RPC method @@ -8673,6 +8736,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryConnectionConsensusStateResponse is the response type for the Query/ConnectionConsensusState RPC method @@ -9275,6 +9345,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. description: >- QueryChannelsResponse is the response type for the Query/Channels RPC method. @@ -9662,6 +9739,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. description: >- QueryChannelResponse is the response type for the Query/Channel RPC method. @@ -10117,6 +10201,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryChannelClientStateResponse is the Response type for the Query/QueryChannelClientState RPC method @@ -10552,6 +10643,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryChannelClientStateResponse is the Response type for the Query/QueryChannelClientState RPC method @@ -10823,6 +10921,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QuerySequenceResponse is the response type for the Query/QueryNextSequenceReceiveResponse RPC method @@ -11080,6 +11185,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryNextSequenceSendResponse is the request type for the Query/QueryNextSequenceSend RPC method @@ -11391,6 +11503,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryPacketAcknowledgemetsResponse is the request type for the Query/QueryPacketAcknowledgements RPC method @@ -11713,6 +11832,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: >- QueryPacketAcknowledgementResponse defines the client query response for a @@ -12032,6 +12158,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryPacketCommitmentsResponse is the request type for the Query/QueryPacketCommitments RPC method @@ -12347,6 +12480,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryUnreceivedAcksResponse is the response type for the Query/UnreceivedAcks RPC method @@ -12616,6 +12756,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method @@ -12883,6 +13030,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: >- QueryPacketCommitmentResponse defines the client query response for a packet @@ -13154,6 +13308,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: >- QueryPacketReceiptResponse defines the client query response for a packet @@ -13450,6 +13611,15 @@ paths: as the RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty + jsontag. + + This enforces the Go json marshaller to always emit + zero values for both revision_number and + revision_height. timestamp: type: string format: uint64 @@ -13516,6 +13686,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: >- QueryUpgradeResponse is the response type for the QueryUpgradeResponse RPC method @@ -13785,6 +13962,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: >- QueryUpgradeErrorResponse is the response type for the Query/QueryUpgradeError RPC method @@ -14157,6 +14341,13 @@ paths: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. title: |- QueryConnectionChannelsResponse is the Response type for the Query/QueryConnectionChannels RPC method @@ -14466,6 +14657,15 @@ paths: as the RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty + jsontag. + + This enforces the Go json marshaller to always emit + zero values for both revision_number and + revision_height. timestamp: type: string format: uint64 @@ -16201,6 +16401,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. consensus_state: type: object properties: @@ -16382,13 +16589,25 @@ definitions: type: string format: uint64 title: the height within the given revision - description: |- + description: >- Normally the RevisionHeight is incremented at each height while keeping + RevisionNumber the same. However some consensus algorithms may choose to + reset the height in certain conditions e.g. hard forks, state-machine + breaking changes In these cases, the RevisionNumber is incremented so that + height continues to be monitonically increasing even as the RevisionHeight + gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for both + revision_number and revision_height. title: >- Height is a monotonically increasing data type @@ -16811,6 +17030,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. description: >- QueryClientStateResponse is the response type for the Query/ClientState RPC @@ -17085,6 +17311,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: >- Height is a monotonically increasing data type @@ -17324,6 +17557,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: >- Height is a monotonically increasing data type @@ -17373,6 +17613,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden + to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values + for both revision_number and revision_height. consensus_state: type: object properties: @@ -17963,6 +18210,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: >- Height is a monotonically increasing data type @@ -18286,6 +18540,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryClientConnectionsResponse is the response type for the Query/ClientConnections RPC method @@ -18505,6 +18766,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryConnectionClientStateResponse is the response type for the Query/ConnectionClientState RPC method @@ -18711,6 +18979,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryConnectionConsensusStateResponse is the response type for the Query/ConnectionConsensusState RPC method @@ -18861,6 +19136,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. description: >- QueryConnectionResponse is the response type for the Query/Connection RPC @@ -19009,6 +19291,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. description: >- QueryConnectionsResponse is the response type for the Query/Connections RPC @@ -19300,6 +19589,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values + for both revision_number and revision_height. timestamp: type: string format: uint64 @@ -19532,6 +19828,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryChannelClientStateResponse is the Response type for the Query/QueryChannelClientState RPC method @@ -19738,6 +20041,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryChannelClientStateResponse is the Response type for the Query/QueryChannelClientState RPC method @@ -19780,6 +20090,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. timestamp: type: string format: uint64 @@ -19916,6 +20233,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. description: >- QueryChannelResponse is the response type for the Query/Channel RPC method. @@ -20070,6 +20394,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. description: >- QueryChannelsResponse is the response type for the Query/Channels RPC method. @@ -20220,6 +20551,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryConnectionChannelsResponse is the Response type for the Query/QueryConnectionChannels RPC method @@ -20262,6 +20600,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QuerySequenceResponse is the response type for the Query/QueryNextSequenceReceiveResponse RPC method @@ -20304,6 +20649,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryNextSequenceSendResponse is the request type for the Query/QueryNextSequenceSend RPC method @@ -20346,6 +20698,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryPacketAcknowledgementResponse defines the client query response for a packet which also includes a proof and the height from which the @@ -20436,6 +20795,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryPacketAcknowledgemetsResponse is the request type for the Query/QueryPacketAcknowledgements RPC method @@ -20478,6 +20844,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: >- QueryPacketCommitmentResponse defines the client query response for a packet @@ -20571,6 +20944,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryPacketCommitmentsResponse is the request type for the Query/QueryPacketCommitments RPC method @@ -20612,6 +20992,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: >- QueryPacketReceiptResponse defines the client query response for a packet @@ -20656,6 +21043,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryUnreceivedAcksResponse is the response type for the Query/UnreceivedAcks RPC method @@ -20696,6 +21090,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: |- QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method @@ -20752,6 +21153,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: >- QueryUpgradeErrorResponse is the response type for the Query/QueryUpgradeError RPC method @@ -20818,6 +21226,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are + overridden to explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero + values for both revision_number and revision_height. timestamp: type: string format: uint64 @@ -20881,6 +21296,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. title: >- QueryUpgradeResponse is the response type for the QueryUpgradeResponse RPC method @@ -20939,6 +21361,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values for + both revision_number and revision_height. timestamp: type: string format: uint64 @@ -21013,6 +21442,13 @@ definitions: RevisionHeight gets reset + + + Please note that json tags for generated Go code are overridden to + explicitly exclude the omitempty jsontag. + + This enforces the Go json marshaller to always emit zero values + for both revision_number and revision_height. timestamp: type: string format: uint64 From e70d7480a2640a1a21f1cb9c97867addb86703ad Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Wed, 7 Aug 2024 18:08:26 +0300 Subject: [PATCH 69/78] Add simapp to dependabot (#7039) inb4 dependabot spam --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b5b37a612d0..75e9fb10fae 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -46,4 +46,12 @@ updates: labels: - dependencies + - package-ecosystem: gomod + directory: "/simapp" + schedule: + interval: daily + open-pull-requests-limit: 10 + labels: + - dependencies + From 4ef982f18c0bf19e0522dda3f282cea93c329391 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:13:02 +0000 Subject: [PATCH 70/78] chore(deps): bump cosmossdk.io/log from 1.3.1 to 1.4.0 (#7078) * chore(deps): bump cosmossdk.io/log from 1.3.1 to 1.4.0 Bumps [cosmossdk.io/log](https://github.com/cosmos/cosmos-sdk) from 1.3.1 to 1.4.0. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/log/v1.3.1...log/v1.4.0) --- updated-dependencies: - dependency-name: cosmossdk.io/log dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * deps: bump cosmossdk.io/log to 1.4.0, tidy-all --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: DimitrisJim --- e2e/go.mod | 2 +- e2e/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- modules/apps/callbacks/go.mod | 2 +- modules/apps/callbacks/go.sum | 4 ++-- modules/capability/go.mod | 4 ++-- modules/capability/go.sum | 8 ++++---- modules/light-clients/08-wasm/go.mod | 2 +- modules/light-clients/08-wasm/go.sum | 4 ++-- simapp/go.mod | 2 +- simapp/go.sum | 4 ++-- 12 files changed, 21 insertions(+), 21 deletions(-) diff --git a/e2e/go.mod b/e2e/go.mod index 667fe582853..693edc095b9 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -42,7 +42,7 @@ require ( cosmossdk.io/collections v0.4.0 // indirect cosmossdk.io/core v0.11.1 // indirect cosmossdk.io/depinject v1.0.0 // indirect - cosmossdk.io/log v1.3.1 // indirect + cosmossdk.io/log v1.4.0 // indirect cosmossdk.io/store v1.1.0 // indirect cosmossdk.io/x/feegrant v0.1.1 // indirect cosmossdk.io/x/tx v0.13.4 // indirect diff --git a/e2e/go.sum b/e2e/go.sum index 28e5a3eb8fb..66c07e10e3e 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -198,8 +198,8 @@ cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/log v1.4.0 h1:Ttt9d6fQ0GlktwhcysOeNiIjixW7l0rYBocmoXOb11k= +cosmossdk.io/log v1.4.0/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= diff --git a/go.mod b/go.mod index 5057ed5f351..754e7c4e841 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( cosmossdk.io/client/v2 v2.0.0-beta.3 cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.3.1 + cosmossdk.io/log v1.4.0 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.0 cosmossdk.io/x/tx v0.13.4 diff --git a/go.sum b/go.sum index 88e5945b3d3..1454bbd7121 100644 --- a/go.sum +++ b/go.sum @@ -198,8 +198,8 @@ cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/log v1.4.0 h1:Ttt9d6fQ0GlktwhcysOeNiIjixW7l0rYBocmoXOb11k= +cosmossdk.io/log v1.4.0/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= diff --git a/modules/apps/callbacks/go.mod b/modules/apps/callbacks/go.mod index 874a723b622..251e7d1377d 100644 --- a/modules/apps/callbacks/go.mod +++ b/modules/apps/callbacks/go.mod @@ -13,7 +13,7 @@ require ( cosmossdk.io/client/v2 v2.0.0-beta.3 cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.3.1 + cosmossdk.io/log v1.4.0 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.0 cosmossdk.io/tools/confix v0.1.1 diff --git a/modules/apps/callbacks/go.sum b/modules/apps/callbacks/go.sum index faf24b44b29..1171bf296ce 100644 --- a/modules/apps/callbacks/go.sum +++ b/modules/apps/callbacks/go.sum @@ -198,8 +198,8 @@ cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/log v1.4.0 h1:Ttt9d6fQ0GlktwhcysOeNiIjixW7l0rYBocmoXOb11k= +cosmossdk.io/log v1.4.0/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= diff --git a/modules/capability/go.mod b/modules/capability/go.mod index 3e9f0a9c286..4a112f3421d 100644 --- a/modules/capability/go.mod +++ b/modules/capability/go.mod @@ -9,7 +9,7 @@ replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.2021 require ( cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.3.1 + cosmossdk.io/log v1.4.0 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.0 github.com/cometbft/cometbft v0.38.10 @@ -121,7 +121,7 @@ require ( github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.32.0 // indirect + github.com/rs/zerolog v1.33.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect diff --git a/modules/capability/go.sum b/modules/capability/go.sum index 2b16c8e9a02..ff07144a3c8 100644 --- a/modules/capability/go.sum +++ b/modules/capability/go.sum @@ -10,8 +10,8 @@ cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/log v1.4.0 h1:Ttt9d6fQ0GlktwhcysOeNiIjixW7l0rYBocmoXOb11k= +cosmossdk.io/log v1.4.0/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= @@ -602,8 +602,8 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= -github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= diff --git a/modules/light-clients/08-wasm/go.mod b/modules/light-clients/08-wasm/go.mod index f19497b3802..3d29cebfe46 100644 --- a/modules/light-clients/08-wasm/go.mod +++ b/modules/light-clients/08-wasm/go.mod @@ -14,7 +14,7 @@ require ( cosmossdk.io/collections v0.4.0 cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.3.1 + cosmossdk.io/log v1.4.0 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.0 cosmossdk.io/tools/confix v0.1.1 diff --git a/modules/light-clients/08-wasm/go.sum b/modules/light-clients/08-wasm/go.sum index 8e596ccf1ba..9f3de87d173 100644 --- a/modules/light-clients/08-wasm/go.sum +++ b/modules/light-clients/08-wasm/go.sum @@ -198,8 +198,8 @@ cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/log v1.4.0 h1:Ttt9d6fQ0GlktwhcysOeNiIjixW7l0rYBocmoXOb11k= +cosmossdk.io/log v1.4.0/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= diff --git a/simapp/go.mod b/simapp/go.mod index ac2327cc885..8d1239116cd 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -13,7 +13,7 @@ require ( cosmossdk.io/api v0.7.5 cosmossdk.io/client/v2 v2.0.0-beta.3 cosmossdk.io/core v0.11.1 - cosmossdk.io/log v1.3.1 + cosmossdk.io/log v1.4.0 cosmossdk.io/store v1.1.0 cosmossdk.io/tools/confix v0.1.1 cosmossdk.io/x/circuit v0.1.1 diff --git a/simapp/go.sum b/simapp/go.sum index d886a3733ec..b1c362821aa 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -198,8 +198,8 @@ cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/log v1.4.0 h1:Ttt9d6fQ0GlktwhcysOeNiIjixW7l0rYBocmoXOb11k= +cosmossdk.io/log v1.4.0/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= From 30aa861438ef68d9b6ea93806a046a45eeb37e7d Mon Sep 17 00:00:00 2001 From: Susannah Evans <65018876+womensrights@users.noreply.github.com> Date: Wed, 7 Aug 2024 17:35:45 +0200 Subject: [PATCH 71/78] docs: Path unwinding and forwarding requirements (#6027) * Create path-unwinding-requirements.md * Unwinding forwarding requirements * Update path-unwinding-forwarding -requirements.md * fix linter and remove commented guide * fix eof violation * formatting nits * Update path-unwinding-forwarding -requirements.md * Create path-unwinding-forwarding-requirements.md * Update path-unwinding-forwarding-requirements.md * Update path-unwinding-forwarding-requirements.md * Update docs/requirements/path-unwinding-forwarding-requirements.md Co-authored-by: Damian Nolan --------- Co-authored-by: Carlos Rodriguez Co-authored-by: Damian Nolan --- .../path-unwinding-forwarding-requirements.md | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 docs/requirements/path-unwinding-forwarding-requirements.md diff --git a/docs/requirements/path-unwinding-forwarding-requirements.md b/docs/requirements/path-unwinding-forwarding-requirements.md new file mode 100644 index 00000000000..1c0c7a447a7 --- /dev/null +++ b/docs/requirements/path-unwinding-forwarding-requirements.md @@ -0,0 +1,99 @@ + + +# Business requirements + +The implementation of fungible token path unwinding vastly simplifies token transfers for end users. End users are unlikely to understand IBC denominations in great detail, and the consequences a direct transfer from chain A, to chain B can have on the fungibility of a token at the destination chain B, when the token sent is not a native or originating token from chain A, and is native to another chain, e.g. chain C. + +Path unwinding reduces the complexity of token transfer for the end user; a user simply needs to choose the final destination for their tokens and the complexity of determining the optimal route is abstracted away. This is a huge user experience improvement. + +In addition to unwinding, when a user recieves their token on a destination chain, they then want to use the token in some way. By enabling token forwarding, a user can recieve a token, perform some action with that token, for example a swap, and then send the token onto another chain. We observe that the complexity of IBC is increasingly being abstracted away from end users and automating workflows such as transfer, swap and forward with a single signed transaction significantly enhances usability. + +## Problem + +A fungible token A transferred from chain A to chain B is an IBC denomination at chain B, where the IBC denom trace records the path the token has travelled to reach its destination chain. + +A user now wants to send this IBC denomination of token A, originating from chain A, onto another chain, chain C. If a user transfers token A on chain B directly to chain C, it will not be fungible with token A sent directly from chain A to chain C. This is because the IBC denomination of token A on chain C is different in both cases due to token A travelling along different paths to reach the same destination. This is the most simple case of the problem involving only 3 chains. + +However, this problem is prevalent within the ecosystem and there are cases of IBC denominations on chains with >2 hops in the path. + +Regarding forwarding, if a user wants to transfer tokens between chains, then perform an action with those tokens, without forwarding, a user would have to sign each transaction on every chain and wait for the tokens to arrive at the destination before performing the next action. This is time consuming and a provides a poor user experience, a user also cannot just specify the desired outcome of their workflow in a trivial way. + +## Objectives + +To enable end users to automatically and atomically unwind fungible tokens when they specify a destination chain, so that tokens arrive at the destination chain with only 1 hop in the path and to be able to forward the token to another destination after it has been unwound. + +## Scope + +| Features | Release | +| --------- | ------- | +| Automatic and atomic path unwinding for fungible tokens suitable for end users initiating a transfer | v9.0.0 | +| Token forwarding for fungible tokens for end users initiating a transfer | v9.0.0 | + +# User requirements + +## Use cases + +### 1. Moving non-native assets between DeFi opportunities on different chains + +Users transfer tokens from an origin chain to a DeFi chain to benefit from yield opportunities or other use cases on that chain, different from the origin chain. A better yield opportunity could then arise and a user would want to move the tokens to another chain to take advantage of this opportunity. Rather than having to manually route the tokens back through the originating chain onto the new chain, it would be much simpler if they could only be concerned with the final destination they want the tokens to arrive at. + +For example, ATOM is native to the Cosmos Hub, a user could transfer ATOM to Osmosis and deposit in a liquidity pool to earn yield on this token. After depositing their ATOM into a pool on Osmosis, a better yield opportunity could arise, for example a better pool APY on another Cosmos DEX, e.g. Crescent or a better yield on lending ATOM on Umee. The user would then want to transfer the ATOM from Osmosis to Crescent (or Umee). + +### 2. Transferring liquid staking derivatives + +Liquid staking derivatives are minted on liquid staking zones and represent a staked asset. There is a common misconception from users that these derivatives originate on the chain of the original staked token. This results in users sending derivatives back to the chain of the natively staked token and then onto the next destination. + +For examples, a user has stATOM on Osmosis, they want to move the stATOM to Evmos, instead of going from Osmosis --> Stride --> Evmos, a user tries to unwind themself and routes the tokens Osmosis --> Cosmos Hub --> Evmos. + +### 3. Moving a token that originated from an interoperability zone or chain, or asset issuer + +Tokens that originate from other blockchain ecosystems that don't yet support IBC, flow into the Cosmos ecosystem through interoperability zones. These tokens are then sent onto other chains with a specific use case for these tokens and a user could want to move this token from one chain to another. + +For example, ETH from Ethereum flows into Osmosis via Axelar, where the final step moving ETH from Ethereum to Osmosis uses an ICS-20 transfer from Axelar to Osmosis. A user may then want to move ETH from Osmosis onto another chain, for example Injective. However, the path with 1 hop would be a transfer from Axelar to Injective. + +### 4. Moving a token from one chain to another, swapping the token and transferring it onwards to a new destination + +A user on one chain, for example the Cosmos Hub holds an asset, e.g. ATOM and wants to instead have AKT on Akash. The user must transfer to ATOM to a DEX chain, swap the ATOM for AKT and then send the AKT onwards to Akash. + +# Functional requirements + +## Assumptions and dependencies + +1. A functional relayer implementation is required for this feature. +2. Routing information for the final hop for unwinding or for forwarding is configured for the user through a front end client, or configured by another means using off-chain data. +3. The feature will have no impact on the existing function of a typical ICS-20 transfer where a native token is sent to another chain. +4. Fees are not within the scope of these requirements. +5. The functionality to enable a specific action before forwarding is not in scope of these requirements. +6. If a transfer contains multiple unique tokens, the unwinding and forwarding functionalities only need to support unwinding or forwarding through the same path, i.e. if there is a transfer containing a native token and 1 hop denom being sent from source to destination, both tokens would always go through the same path. In the future, it may be desirable for different tokens to be unwound through different paths, to support actions such as atomic transfer and supply liquidity to a liquidity pool, but it is currently out of scope for the first version of this feature. + +## Features + +| ID | Description | Verification | Status | +| -- | ----------- | ------------ | ------ | +| 1.01 | When a user initiates a transfer to a destination chain with an IBC denom with > 1 hop, the token shall be sent back to its originating chain before being sent onto the destination as a user selected option | | `Draft` | +| 1.02 | If a user wants to unwind tokens, then they can select this as option for the transfer | | `Draft` | +| 1.03 | The unwinding shall completely succeed or the tokens are recoverable on the chain they were sent from by the user | | `Draft` | +| 1.04 | When unwinding is used in combination with forwarding, both the unwind and forwarding should succeed or the tokens should be recoverable on the sending chain | | `Draft` | +| 1.05 | The forwarding mechanism shall allow a user to transfer tokens beyond the first destination for those tokens | | `Draft` | +| 1.06 | The forwarding mechanism shall allow tokens to have some action performed on them before being sent onto a new destination | | `Draft` | +| 1.07 | The routing information for forwarding or to go from unwound token to destination must be input with the initial transfer | | `Draft` | +| 1.08 | If an intermediate chain does not have the unwinding or forwarding functionality, the tokens must be recoverable on the sending chain | | `Draft` | +| 1.09 | If unwinding or forwarding fails, then the reason for the failure should be returned in an error | | `Draft` | +| 1.10 | When unwinding, it should be possible for the forwarding path to be evaluated implicitly from introspecting the denomination trace or to be explicitly input as forwarding hops by the user | | `Draft` | +| 1.11 | When using unwinding in combination with x/authz, a granter can specify the allowed forwarding paths | | `Draft` | + +# External interface requirements + +| ID | Description | Verification | Status | +| -- | ----------- | ------------ | ------ | +| 2.01 | There must be a CLI interface to initiate a transfer using path unwinding | | `Draft` | +| 2.02 | There must be a CLI interface to initiate a transfer using forwarding | | `Draft` | +| 2.03 | There must be a CLI interface to initiate a transfer using unwinding and forwarding in combination | | `Draft` | + +# Non-functional requirements + +## Security + +| ID | Description | Verification | Status | +| -- | ----------- | ------------ | ------ | +| 3.01 | It must not be possible for a users tokens to be intercepted by another actor during path-unwinding or token forwarding | | `Draft` | From 8edab387094c58fe2b3438a2a260390687683dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Wed, 7 Aug 2024 17:56:00 +0200 Subject: [PATCH 72/78] chore: setup new major release cycle docs/workflow (#7054) * chore: setup new major release cycle * Update docs/docs/05-migrations/14-v9-to-v10.md --- CHANGELOG.md | 14 +++++++++++++ docs/docs/05-migrations/14-v9-to-v10.md | 28 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 docs/docs/05-migrations/14-v9-to-v10.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 249a4dd8730..6a75108ce43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,20 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Dependencies +### API Breaking + +### State Machine Breaking + +### Improvements + +### Features + +### Bug Fixes + +## v9.0.0 (unreleased) + +### Dependencies + * [\#6828](https://github.com/cosmos/ibc-go/pull/6828) Bump Cosmos SDK to v0.50.9. * [\#6193](https://github.com/cosmos/ibc-go/pull/6193) Bump `cosmossdk.io/store` to v1.1.0. * [\#6848](https://github.com/cosmos/ibc-go/pull/6848) Bump CometBFT to v0.38.10. diff --git a/docs/docs/05-migrations/14-v9-to-v10.md b/docs/docs/05-migrations/14-v9-to-v10.md new file mode 100644 index 00000000000..5cbe3610be4 --- /dev/null +++ b/docs/docs/05-migrations/14-v9-to-v10.md @@ -0,0 +1,28 @@ +# Migrating from v9 to v10 + +This guide provides instructions for migrating to a new version of ibc-go. + +There are four sections based on the four potential user groups of this document: + +- [Chains](#chains) +- [IBC Apps](#ibc-apps) +- [Relayers](#relayers) +- [IBC Light Clients](#ibc-light-clients) + +**Note:** ibc-go supports golang semantic versioning and therefore all imports must be updated on major version releases. + +## Chains + +- No relevant changes were made in this release. + +## IBC Apps + +- No relevant changes were made in this release. + +## Relayers + +- No relevant changes were made in this release. + +## IBC Light Clients + +- No relevant changes were made in this release. From beaf8bc8cea09335190deda3c557944e31400f38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 11:29:26 +0300 Subject: [PATCH 73/78] chore(deps): bump cosmossdk.io/client/v2 in /simapp (#7085) Bumps [cosmossdk.io/client/v2](https://github.com/cosmos/cosmos-sdk) from 2.0.0-beta.3 to 2.0.0-beta.4. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/client/v2.0.0-beta.3...client/v2.0.0-beta.4) --- updated-dependencies: - dependency-name: cosmossdk.io/client/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- simapp/go.mod | 2 +- simapp/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/simapp/go.mod b/simapp/go.mod index 8d1239116cd..a6a635a709e 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -11,7 +11,7 @@ replace ( require ( cosmossdk.io/api v0.7.5 - cosmossdk.io/client/v2 v2.0.0-beta.3 + cosmossdk.io/client/v2 v2.0.0-beta.4 cosmossdk.io/core v0.11.1 cosmossdk.io/log v1.4.0 cosmossdk.io/store v1.1.0 diff --git a/simapp/go.sum b/simapp/go.sum index b1c362821aa..b7a4d913067 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -188,8 +188,8 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.3 h1:+TTuH0DwQYsUq2JFAl3fDZzKq5gQG7nt3dAattkjFDU= -cosmossdk.io/client/v2 v2.0.0-beta.3/go.mod h1:CZcL41HpJPOOayTCO28j8weNBQprG+SRiKX39votypo= +cosmossdk.io/client/v2 v2.0.0-beta.4 h1:LGIzWbVTOof/IHQZeoWwxPX0fq607ONXhsfA7eUrQIg= +cosmossdk.io/client/v2 v2.0.0-beta.4/go.mod h1:c753d0sBv3AQRx6X+BOKL1aGpKjZMTZAHGiLPbVi5TE= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= From 1f50c8fe20e2c8679fefc936de3ac0610d2f21e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 8 Aug 2024 16:29:31 +0200 Subject: [PATCH 74/78] refactor: remove ics27 channel capability migration introduced in v6 (#7053) * refactor: remove ics27 migration introduced in v6 * changelog * fix: remove v6 upgrade handler from simapp * chore: remove V5 upgrade handler const --- CHANGELOG.md | 1 + docs/docs/05-migrations/14-v9-to-v10.md | 5 +- .../controller/keeper/migrations.go | 33 --- .../controller/keeper/migrations_test.go | 72 ------- .../controller/migrations/v6/migrations.go | 78 ------- .../migrations/v6/migrations_test.go | 199 ------------------ modules/apps/27-interchain-accounts/module.go | 4 - simapp/upgrades/upgrades.go | 27 --- 8 files changed, 5 insertions(+), 414 deletions(-) delete mode 100644 modules/apps/27-interchain-accounts/controller/migrations/v6/migrations.go delete mode 100644 modules/apps/27-interchain-accounts/controller/migrations/v6/migrations_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a75108ce43..39fa4c483eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -92,6 +92,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (core/04-channel) [\#6902](https://github.com/cosmos/ibc-go/pull/6902) Add channel version to core application callbacks. * (core/03-connection, core/02-client) [\#6937](https://github.com/cosmos/ibc-go/pull/6937) Remove 'ConsensusHost' interface, also removing self client and consensus state validation in the connection handshake. * (core/24-host) [\#6882](https://github.com/cosmos/ibc-go/issues/6882) All functions ending in `Path` have been removed from 24-host in favour of their sybling functions ending in `Key`. +* (apps/27-interchain-accounts) [\#7053](https://github.com/cosmos/ibc-go/pull/7053) Remove ICS27 channel capability migration introduced in v6. ### State Machine Breaking diff --git a/docs/docs/05-migrations/14-v9-to-v10.md b/docs/docs/05-migrations/14-v9-to-v10.md index 5cbe3610be4..f35f15de487 100644 --- a/docs/docs/05-migrations/14-v9-to-v10.md +++ b/docs/docs/05-migrations/14-v9-to-v10.md @@ -6,6 +6,7 @@ There are four sections based on the four potential user groups of this document - [Chains](#chains) - [IBC Apps](#ibc-apps) + - [ICS27 - Interchain Accounts](#ics27---interchain-accounts) - [Relayers](#relayers) - [IBC Light Clients](#ibc-light-clients) @@ -17,7 +18,9 @@ There are four sections based on the four potential user groups of this document ## IBC Apps -- No relevant changes were made in this release. +### ICS27 - Interchain Accounts + +The channel capability migration introduced in v6 has been removed. Chains must upgrade from v6 or higher. ## Relayers diff --git a/modules/apps/27-interchain-accounts/controller/keeper/migrations.go b/modules/apps/27-interchain-accounts/controller/keeper/migrations.go index ac6e2fb41c7..ad69ceacc65 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/migrations.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/migrations.go @@ -1,16 +1,9 @@ package keeper import ( - "fmt" - - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" controllertypes "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/types" - icatypes "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/types" - host "github.com/cosmos/ibc-go/v9/modules/core/24-host" ) // Migrator is a struct for handling in-place store migrations. @@ -25,32 +18,6 @@ func NewMigrator(k *Keeper) Migrator { } } -// AssertChannelCapabilityMigrations checks that all channel capabilities generated using the interchain accounts controller port prefix -// are owned by the controller submodule and ibc. -func (m Migrator) AssertChannelCapabilityMigrations(ctx sdk.Context) error { - if m.keeper != nil { - filteredChannels := m.keeper.channelKeeper.GetAllChannelsWithPortPrefix(ctx, icatypes.ControllerPortPrefix) - for _, ch := range filteredChannels { - name := host.ChannelCapabilityPath(ch.PortId, ch.ChannelId) - capability, found := m.keeper.scopedKeeper.GetCapability(ctx, name) - if !found { - m.keeper.Logger(ctx).Error(fmt.Sprintf("failed to find capability: %s", name)) - return errorsmod.Wrapf(capabilitytypes.ErrCapabilityNotFound, "failed to find capability: %s", name) - } - - isAuthenticated := m.keeper.scopedKeeper.AuthenticateCapability(ctx, capability, name) - if !isAuthenticated { - m.keeper.Logger(ctx).Error(fmt.Sprintf("expected capability owner: %s", controllertypes.SubModuleName)) - return errorsmod.Wrapf(capabilitytypes.ErrCapabilityNotOwned, "expected capability owner: %s", controllertypes.SubModuleName) - } - - m.keeper.SetMiddlewareEnabled(ctx, ch.PortId, ch.ConnectionHops[0]) - m.keeper.Logger(ctx).Info("successfully migrated channel capability", "name", name) - } - } - return nil -} - // MigrateParams migrates the controller submodule's parameters from the x/params to self store. func (m Migrator) MigrateParams(ctx sdk.Context) error { if m.keeper != nil { diff --git a/modules/apps/27-interchain-accounts/controller/keeper/migrations_test.go b/modules/apps/27-interchain-accounts/controller/keeper/migrations_test.go index 45562f1788e..f4d25b37ea7 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/migrations_test.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/migrations_test.go @@ -5,80 +5,8 @@ import ( icacontrollerkeeper "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/types" - icatypes "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/types" - channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v9/testing" ) -func (suite *KeeperTestSuite) TestAssertChannelCapabilityMigrations() { - testCases := []struct { - name string - malleate func() - expPass bool - }{ - { - "success", - func() {}, - true, - }, - { - "channel with different port is filtered out", - func() { - portIDWithOutPrefix := ibctesting.MockPort - suite.chainA.GetSimApp().IBCKeeper.ChannelKeeper.SetChannel(suite.chainA.GetContext(), portIDWithOutPrefix, ibctesting.FirstChannelID, channeltypes.Channel{ - ConnectionHops: []string{ibctesting.FirstConnectionID}, - }) - }, - true, - }, - { - "capability not found", - func() { - portIDWithPrefix := fmt.Sprintf("%s%s", icatypes.ControllerPortPrefix, "port-without-capability") - suite.chainA.GetSimApp().IBCKeeper.ChannelKeeper.SetChannel(suite.chainA.GetContext(), portIDWithPrefix, ibctesting.FirstChannelID, channeltypes.Channel{ - ConnectionHops: []string{ibctesting.FirstConnectionID}, - }) - }, - false, - }, - } - - for _, ordering := range []channeltypes.Order{channeltypes.UNORDERED, channeltypes.ORDERED} { - for _, tc := range testCases { - tc := tc - - suite.Run(tc.name, func() { - suite.SetupTest() - - path := NewICAPath(suite.chainA, suite.chainB, ordering) - path.SetupConnections() - - err := SetupICAPath(path, ibctesting.TestAccAddress) - suite.Require().NoError(err) - - tc.malleate() - - migrator := icacontrollerkeeper.NewMigrator(&suite.chainA.GetSimApp().ICAControllerKeeper) - err = migrator.AssertChannelCapabilityMigrations(suite.chainA.GetContext()) - - if tc.expPass { - suite.Require().NoError(err) - - isMiddlewareEnabled := suite.chainA.GetSimApp().ICAControllerKeeper.IsMiddlewareEnabled( - suite.chainA.GetContext(), - path.EndpointA.ChannelConfig.PortID, - path.EndpointA.ConnectionID, - ) - - suite.Require().True(isMiddlewareEnabled) - } else { - suite.Require().Error(err) - } - }) - } - } -} - func (suite *KeeperTestSuite) TestMigratorMigrateParams() { testCases := []struct { msg string diff --git a/modules/apps/27-interchain-accounts/controller/migrations/v6/migrations.go b/modules/apps/27-interchain-accounts/controller/migrations/v6/migrations.go deleted file mode 100644 index 8e2a4f29fb9..00000000000 --- a/modules/apps/27-interchain-accounts/controller/migrations/v6/migrations.go +++ /dev/null @@ -1,78 +0,0 @@ -package v6 - -import ( - "cosmossdk.io/store/prefix" - storetypes "cosmossdk.io/store/types" - - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - - capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - controllertypes "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/types" - ibcexported "github.com/cosmos/ibc-go/v9/modules/core/exported" -) - -// MigrateICS27ChannelCapability performs a search on a prefix store using the provided store key and module name. -// It retrieves the associated channel capability index and reassigns ownership to the ICS27 controller submodule. -func MigrateICS27ChannelCapability( - ctx sdk.Context, - cdc codec.BinaryCodec, - capabilityStoreKey storetypes.StoreKey, - capabilityKeeper *capabilitykeeper.Keeper, - module string, // the name of the scoped keeper for the underlying app module -) error { - // construct a prefix store using the x/capability index prefix: index->capability owners - prefixStore := prefix.NewStore(ctx.KVStore(capabilityStoreKey), capabilitytypes.KeyPrefixIndexCapability) - iterator := storetypes.KVStorePrefixIterator(prefixStore, nil) - defer sdk.LogDeferred(ctx.Logger(), func() error { return iterator.Close() }) - - for ; iterator.Valid(); iterator.Next() { - // unmarshal the capability index value and set of owners - index := capabilitytypes.IndexFromKey(iterator.Key()) - - var owners capabilitytypes.CapabilityOwners - cdc.MustUnmarshal(iterator.Value(), &owners) - - if !hasIBCOwner(owners.GetOwners()) { - continue - } - - for _, owner := range owners.GetOwners() { - if owner.Module == module { - // remove the owner from the set - owners.Remove(owner) - - // reassign the owner module to icacontroller - owner.Module = controllertypes.SubModuleName - - // add the controller submodule to the set of owners - if err := owners.Set(owner); err != nil { - return err - } - - // set the new owners for the current capability index - capabilityKeeper.SetOwners(ctx, index, owners) - } - } - } - - // initialise the x/capability memstore - capabilityKeeper.InitMemStore(ctx) - - return nil -} - -func hasIBCOwner(owners []capabilitytypes.Owner) bool { - if len(owners) != 2 { - return false - } - - for _, owner := range owners { - if owner.Module == ibcexported.ModuleName { - return true - } - } - - return false -} diff --git a/modules/apps/27-interchain-accounts/controller/migrations/v6/migrations_test.go b/modules/apps/27-interchain-accounts/controller/migrations/v6/migrations_test.go deleted file mode 100644 index e7f79b81fed..00000000000 --- a/modules/apps/27-interchain-accounts/controller/migrations/v6/migrations_test.go +++ /dev/null @@ -1,199 +0,0 @@ -package v6_test - -import ( - "testing" - - testifysuite "github.com/stretchr/testify/suite" - - sdk "github.com/cosmos/cosmos-sdk/types" - - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/migrations/v6" - "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/types" - icatypes "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/types" - channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v9/modules/core/24-host" - ibctesting "github.com/cosmos/ibc-go/v9/testing" - ibcmock "github.com/cosmos/ibc-go/v9/testing/mock" -) - -type MigrationsTestSuite struct { - testifysuite.Suite - - chainA *ibctesting.TestChain - chainB *ibctesting.TestChain - - coordinator *ibctesting.Coordinator - path *ibctesting.Path -} - -func (suite *MigrationsTestSuite) SetupTest() { - version := icatypes.NewDefaultMetadataString(ibctesting.FirstConnectionID, ibctesting.FirstConnectionID) - - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) - - suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) - suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(2)) - - suite.path = ibctesting.NewPath(suite.chainA, suite.chainB) - suite.path.EndpointA.ChannelConfig.PortID = icatypes.HostPortID - suite.path.EndpointB.ChannelConfig.PortID = icatypes.HostPortID - suite.path.EndpointA.ChannelConfig.Order = channeltypes.ORDERED - suite.path.EndpointB.ChannelConfig.Order = channeltypes.ORDERED - suite.path.EndpointA.ChannelConfig.Version = version - suite.path.EndpointB.ChannelConfig.Version = version -} - -func (suite *MigrationsTestSuite) SetupPath() error { - if err := suite.RegisterInterchainAccount(suite.path.EndpointA, ibctesting.TestAccAddress); err != nil { - return err - } - - if err := suite.path.EndpointB.ChanOpenTry(); err != nil { - return err - } - - if err := suite.path.EndpointA.ChanOpenAck(); err != nil { - return err - } - - return suite.path.EndpointB.ChanOpenConfirm() -} - -func (*MigrationsTestSuite) RegisterInterchainAccount(endpoint *ibctesting.Endpoint, owner string) error { - portID, err := icatypes.NewControllerPortID(owner) - if err != nil { - return err - } - - channelSequence := endpoint.Chain.App.GetIBCKeeper().ChannelKeeper.GetNextChannelSequence(endpoint.Chain.GetContext()) - - if err := endpoint.Chain.GetSimApp().ICAControllerKeeper.RegisterInterchainAccount(endpoint.Chain.GetContext(), endpoint.ConnectionID, owner, endpoint.ChannelConfig.Version, channeltypes.ORDERED); err != nil { - return err - } - - // commit state changes for proof verification - endpoint.Chain.NextBlock() - - // update port/channel ids - endpoint.ChannelID = channeltypes.FormatChannelIdentifier(channelSequence) - endpoint.ChannelConfig.PortID = portID - - return nil -} - -func TestKeeperTestSuite(t *testing.T) { - testifysuite.Run(t, new(MigrationsTestSuite)) -} - -func (suite *MigrationsTestSuite) TestMigrateICS27ChannelCapability() { - suite.SetupTest() - suite.path.SetupConnections() - - err := suite.SetupPath() - suite.Require().NoError(err) - - // create additional capabilities to cover edge cases - suite.CreateMockCapabilities() - - // create and claim a new capability with ibc/mock for "channel-1" - // note: suite.SetupPath() now claims the channel capability using icacontroller for "channel-0" - capName := host.ChannelCapabilityPath(suite.path.EndpointA.ChannelConfig.PortID, channeltypes.FormatChannelIdentifier(1)) - - capability, err := suite.chainA.GetSimApp().ScopedIBCKeeper.NewCapability(suite.chainA.GetContext(), capName) - suite.Require().NoError(err) - - err = suite.chainA.GetSimApp().ScopedICAMockKeeper.ClaimCapability(suite.chainA.GetContext(), capability, capName) - suite.Require().NoError(err) - - // assert the capability is owned by the mock module - capability, found := suite.chainA.GetSimApp().ScopedICAMockKeeper.GetCapability(suite.chainA.GetContext(), capName) - suite.Require().NotNil(capability) - suite.Require().True(found) - - isAuthenticated := suite.chainA.GetSimApp().ScopedICAMockKeeper.AuthenticateCapability(suite.chainA.GetContext(), capability, capName) - suite.Require().True(isAuthenticated) - - capability, found = suite.chainA.GetSimApp().ScopedICAControllerKeeper.GetCapability(suite.chainA.GetContext(), capName) - suite.Require().Nil(capability) - suite.Require().False(found) - - suite.ResetMemStore() // empty the x/capability in-memory store - - err = v6.MigrateICS27ChannelCapability( - suite.chainA.GetContext(), - suite.chainA.Codec, - suite.chainA.GetSimApp().GetKey(capabilitytypes.StoreKey), - suite.chainA.GetSimApp().CapabilityKeeper, - ibcmock.ModuleName+types.SubModuleName, - ) - - suite.Require().NoError(err) - - // assert the capability is now owned by the ICS27 controller submodule - capability, found = suite.chainA.GetSimApp().ScopedICAControllerKeeper.GetCapability(suite.chainA.GetContext(), capName) - suite.Require().NotNil(capability) - suite.Require().True(found) - - isAuthenticated = suite.chainA.GetSimApp().ScopedICAControllerKeeper.AuthenticateCapability(suite.chainA.GetContext(), capability, capName) - suite.Require().True(isAuthenticated) - - capability, found = suite.chainA.GetSimApp().ScopedICAMockKeeper.GetCapability(suite.chainA.GetContext(), capName) - suite.Require().Nil(capability) - suite.Require().False(found) - - // ensure channel capability for "channel-0" is still owned by the controller - capName = host.ChannelCapabilityPath(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID) - capability, found = suite.chainA.GetSimApp().ScopedICAControllerKeeper.GetCapability(suite.chainA.GetContext(), capName) - suite.Require().NotNil(capability) - suite.Require().True(found) - - isAuthenticated = suite.chainA.GetSimApp().ScopedICAControllerKeeper.AuthenticateCapability(suite.chainA.GetContext(), capability, capName) - suite.Require().True(isAuthenticated) - - suite.AssertMockCapabiltiesUnchanged() -} - -// CreateMockCapabilities creates an additional two capabilities used for testing purposes: -// 1. A capability with a single owner -// 2. A capability with two owners, neither of which is "ibc" -func (suite *MigrationsTestSuite) CreateMockCapabilities() { - capability, err := suite.chainA.GetSimApp().ScopedIBCMockKeeper.NewCapability(suite.chainA.GetContext(), "mock_one") - suite.Require().NoError(err) - suite.Require().NotNil(capability) - - capability, err = suite.chainA.GetSimApp().ScopedICAMockKeeper.NewCapability(suite.chainA.GetContext(), "mock_two") - suite.Require().NoError(err) - suite.Require().NotNil(capability) - - err = suite.chainA.GetSimApp().ScopedIBCMockKeeper.ClaimCapability(suite.chainA.GetContext(), capability, "mock_two") - suite.Require().NoError(err) -} - -// AssertMockCapabiltiesUnchanged authenticates the mock capabilities created at the start of the test to ensure they remain unchanged -func (suite *MigrationsTestSuite) AssertMockCapabiltiesUnchanged() { - capability, found := suite.chainA.GetSimApp().ScopedIBCMockKeeper.GetCapability(suite.chainA.GetContext(), "mock_one") - suite.Require().True(found) - suite.Require().NotNil(capability) - - capability, found = suite.chainA.GetSimApp().ScopedIBCMockKeeper.GetCapability(suite.chainA.GetContext(), "mock_two") - suite.Require().True(found) - suite.Require().NotNil(capability) - - isAuthenticated := suite.chainA.GetSimApp().ScopedICAMockKeeper.AuthenticateCapability(suite.chainA.GetContext(), capability, "mock_two") - suite.Require().True(isAuthenticated) -} - -// ResetMemstore removes all existing fwd and rev capability kv pairs and deletes `KeyMemInitialised` from the x/capability memstore. -// This effectively mocks a new chain binary being started. Migration code is run against persisted state only and allows the memstore to be reinitialised. -func (suite *MigrationsTestSuite) ResetMemStore() { - memStore := suite.chainA.GetContext().KVStore(suite.chainA.GetSimApp().GetMemKey(capabilitytypes.MemStoreKey)) - memStore.Delete(capabilitytypes.KeyMemInitialized) - - iterator := memStore.Iterator(nil, nil) - defer sdk.LogDeferred(suite.chainA.GetContext().Logger(), func() error { return iterator.Close() }) - - for ; iterator.Valid(); iterator.Next() { - memStore.Delete(iterator.Key()) - } -} diff --git a/modules/apps/27-interchain-accounts/module.go b/modules/apps/27-interchain-accounts/module.go index ede08eaa29d..293be361b51 100644 --- a/modules/apps/27-interchain-accounts/module.go +++ b/modules/apps/27-interchain-accounts/module.go @@ -134,10 +134,6 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { } controllerMigrator := controllerkeeper.NewMigrator(am.controllerKeeper) - if err := cfg.RegisterMigration(types.ModuleName, 1, controllerMigrator.AssertChannelCapabilityMigrations); err != nil { - panic(fmt.Errorf("failed to migrate interchainaccounts app from version 1 to 2 (channel capabilities owned by controller submodule check): %v", err)) - } - hostMigrator := hostkeeper.NewMigrator(am.hostKeeper) if err := cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { if err := hostMigrator.MigrateParams(ctx); err != nil { diff --git a/simapp/upgrades/upgrades.go b/simapp/upgrades/upgrades.go index ddc14baaf8f..863318da367 100644 --- a/simapp/upgrades/upgrades.go +++ b/simapp/upgrades/upgrades.go @@ -3,7 +3,6 @@ package upgrades import ( "context" - storetypes "cosmossdk.io/store/types" upgradetypes "cosmossdk.io/x/upgrade/types" "github.com/cosmos/cosmos-sdk/baseapp" @@ -14,18 +13,12 @@ import ( paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" - "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/migrations/v6" clientkeeper "github.com/cosmos/ibc-go/v9/modules/core/02-client/keeper" "github.com/cosmos/ibc-go/v9/modules/core/exported" ibctmmigrations "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint/migrations" ) const ( - // V5 defines the upgrade name for the ibc-go/v5 upgrade handler. - V5 = "normal upgrade" // NOTE: keeping as "normal upgrade" as existing tags depend on this name - // V6 defines the upgrade name for the ibc-go/v6 upgrade handler. - V6 = "v6" // V7 defines the upgrade name for the ibc-go/v7 upgrade handler. V7 = "v7" // V7_1 defines the upgrade name for the ibc-go/v7.1 upgrade handler. @@ -49,26 +42,6 @@ func CreateDefaultUpgradeHandler( } } -// CreateV6UpgradeHandler creates an upgrade handler for the ibc-go/v6 SimApp upgrade. -// NOTE: The v6.MigrateICS27ChannelCapabiliity function can be omitted if chains do not yet implement an ICS27 controller module -func CreateV6UpgradeHandler( - mm *module.Manager, - configurator module.Configurator, - cdc codec.BinaryCodec, - capabilityStoreKey *storetypes.KVStoreKey, - capabilityKeeper *capabilitykeeper.Keeper, - moduleName string, -) upgradetypes.UpgradeHandler { - return func(ctx context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { - sdkCtx := sdk.UnwrapSDKContext(ctx) - if err := v6.MigrateICS27ChannelCapability(sdkCtx, cdc, capabilityStoreKey, capabilityKeeper, moduleName); err != nil { - return nil, err - } - - return mm.RunMigrations(ctx, configurator, vm) - } -} - // CreateV7UpgradeHandler creates an upgrade handler for the ibc-go/v7 SimApp upgrade. func CreateV7UpgradeHandler( mm *module.Manager, From 1bbf7162e4fb2b5710e2fe2a86aadaca94ba2a74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 14:31:53 +0000 Subject: [PATCH 75/78] chore(deps): bump github.com/cosmos/gogoproto from 1.5.0 to 1.6.0 (#7101) * chore(deps): bump github.com/cosmos/gogoproto from 1.5.0 to 1.6.0 Bumps [github.com/cosmos/gogoproto](https://github.com/cosmos/gogoproto) from 1.5.0 to 1.6.0. - [Release notes](https://github.com/cosmos/gogoproto/releases) - [Changelog](https://github.com/cosmos/gogoproto/blob/main/CHANGELOG.md) - [Commits](https://github.com/cosmos/gogoproto/compare/v1.5.0...v1.6.0) --- updated-dependencies: - dependency-name: github.com/cosmos/gogoproto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * deps: bump gogoproto to 1.6.0 in all modules; tidy. --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: DimitrisJim --- e2e/go.mod | 2 +- e2e/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- modules/apps/callbacks/go.mod | 2 +- modules/apps/callbacks/go.sum | 4 ++-- modules/capability/go.mod | 2 +- modules/capability/go.sum | 4 ++-- modules/light-clients/08-wasm/go.mod | 2 +- modules/light-clients/08-wasm/go.sum | 4 ++-- simapp/go.mod | 2 +- simapp/go.sum | 4 ++-- 12 files changed, 18 insertions(+), 18 deletions(-) diff --git a/e2e/go.mod b/e2e/go.mod index 693edc095b9..9fce2b9ef13 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -16,7 +16,7 @@ require ( cosmossdk.io/x/upgrade v0.1.4 github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-sdk v0.50.9 - github.com/cosmos/gogoproto v1.5.0 + github.com/cosmos/gogoproto v1.6.0 github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.0.0-00010101000000-000000000000 github.com/cosmos/ibc-go/v9 v9.0.0 github.com/docker/docker v24.0.7+incompatible diff --git a/e2e/go.sum b/e2e/go.sum index 66c07e10e3e..6eb87242aab 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -385,8 +385,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/gogoproto v1.6.0 h1:Xm0F/96O5Ox4g6xGgjA41rWaaPjYtOdTi59uBcV2qEE= +github.com/cosmos/gogoproto v1.6.0/go.mod h1:Y+g956rcUf2vr4uwtCcK/1Xx9BWVluCtcI9vsh0GHmk= github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI= diff --git a/go.mod b/go.mod index 754e7c4e841..5deb517af05 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.50.9 - github.com/cosmos/gogoproto v1.5.0 + github.com/cosmos/gogoproto v1.6.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ics23/go v0.10.0 github.com/golang/protobuf v1.5.4 diff --git a/go.sum b/go.sum index 1454bbd7121..dc30683140a 100644 --- a/go.sum +++ b/go.sum @@ -350,8 +350,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/gogoproto v1.6.0 h1:Xm0F/96O5Ox4g6xGgjA41rWaaPjYtOdTi59uBcV2qEE= +github.com/cosmos/gogoproto v1.6.0/go.mod h1:Y+g956rcUf2vr4uwtCcK/1Xx9BWVluCtcI9vsh0GHmk= github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI= diff --git a/modules/apps/callbacks/go.mod b/modules/apps/callbacks/go.mod index 251e7d1377d..2010a3dd53e 100644 --- a/modules/apps/callbacks/go.mod +++ b/modules/apps/callbacks/go.mod @@ -25,7 +25,7 @@ require ( github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-sdk v0.50.9 - github.com/cosmos/gogoproto v1.5.0 + github.com/cosmos/gogoproto v1.6.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v9 v9.0.0 github.com/spf13/cast v1.7.0 diff --git a/modules/apps/callbacks/go.sum b/modules/apps/callbacks/go.sum index 1171bf296ce..6899bb6bc10 100644 --- a/modules/apps/callbacks/go.sum +++ b/modules/apps/callbacks/go.sum @@ -358,8 +358,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/gogoproto v1.6.0 h1:Xm0F/96O5Ox4g6xGgjA41rWaaPjYtOdTi59uBcV2qEE= +github.com/cosmos/gogoproto v1.6.0/go.mod h1:Y+g956rcUf2vr4uwtCcK/1Xx9BWVluCtcI9vsh0GHmk= github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI= diff --git a/modules/capability/go.mod b/modules/capability/go.mod index 4a112f3421d..a2919c4f450 100644 --- a/modules/capability/go.mod +++ b/modules/capability/go.mod @@ -15,7 +15,7 @@ require ( github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-sdk v0.50.9 - github.com/cosmos/gogoproto v1.5.0 + github.com/cosmos/gogoproto v1.6.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/stretchr/testify v1.9.0 sigs.k8s.io/yaml v1.4.0 diff --git a/modules/capability/go.sum b/modules/capability/go.sum index ff07144a3c8..a0edfaca7e9 100644 --- a/modules/capability/go.sum +++ b/modules/capability/go.sum @@ -134,8 +134,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/gogoproto v1.6.0 h1:Xm0F/96O5Ox4g6xGgjA41rWaaPjYtOdTi59uBcV2qEE= +github.com/cosmos/gogoproto v1.6.0/go.mod h1:Y+g956rcUf2vr4uwtCcK/1Xx9BWVluCtcI9vsh0GHmk= github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= diff --git a/modules/light-clients/08-wasm/go.mod b/modules/light-clients/08-wasm/go.mod index 3d29cebfe46..19b7299b4ec 100644 --- a/modules/light-clients/08-wasm/go.mod +++ b/modules/light-clients/08-wasm/go.mod @@ -27,7 +27,7 @@ require ( github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-sdk v0.50.9 - github.com/cosmos/gogoproto v1.5.0 + github.com/cosmos/gogoproto v1.6.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v9 v9.0.0 github.com/golang/protobuf v1.5.4 diff --git a/modules/light-clients/08-wasm/go.sum b/modules/light-clients/08-wasm/go.sum index 9f3de87d173..ec8d5ed4530 100644 --- a/modules/light-clients/08-wasm/go.sum +++ b/modules/light-clients/08-wasm/go.sum @@ -360,8 +360,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/gogoproto v1.6.0 h1:Xm0F/96O5Ox4g6xGgjA41rWaaPjYtOdTi59uBcV2qEE= +github.com/cosmos/gogoproto v1.6.0/go.mod h1:Y+g956rcUf2vr4uwtCcK/1Xx9BWVluCtcI9vsh0GHmk= github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI= diff --git a/simapp/go.mod b/simapp/go.mod index a6a635a709e..e6809ae0f6b 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -24,7 +24,7 @@ require ( github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-sdk v0.50.9 - github.com/cosmos/gogoproto v1.5.0 + github.com/cosmos/gogoproto v1.6.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v9 v9.0.0 github.com/spf13/cast v1.7.0 diff --git a/simapp/go.sum b/simapp/go.sum index b7a4d913067..19d13f8b903 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -358,8 +358,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/gogoproto v1.6.0 h1:Xm0F/96O5Ox4g6xGgjA41rWaaPjYtOdTi59uBcV2qEE= +github.com/cosmos/gogoproto v1.6.0/go.mod h1:Y+g956rcUf2vr4uwtCcK/1Xx9BWVluCtcI9vsh0GHmk= github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= From 168f223f04237848e91dc08b7514e92fe3b69fbd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 14:32:18 +0000 Subject: [PATCH 76/78] chore(deps): bump docker/build-push-action from 6.6.0 to 6.6.1 (#7097) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.6.0 to 6.6.1. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/4f7cdeb0f05278b464e71357394bf2c61f94138e...16ebe778df0e7752d2cfcbd924afdbbd89c1a755) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker.yml | 4 ++-- .github/workflows/e2e-test-workflow-call.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index d2317a90645..b46907dae05 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -28,7 +28,7 @@ jobs: images: ${{ env.REGISTRY }}/cosmos/${{ env.IMAGE_NAME }} - name: Build Docker image - uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e + uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755 with: context: . tags: ${{ steps.meta.outputs.tags }} @@ -46,7 +46,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Push Docker image - uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e + uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755 with: context: . push: true diff --git a/.github/workflows/e2e-test-workflow-call.yml b/.github/workflows/e2e-test-workflow-call.yml index 73980d862df..5e155eeaa50 100644 --- a/.github/workflows/e2e-test-workflow-call.yml +++ b/.github/workflows/e2e-test-workflow-call.yml @@ -132,7 +132,7 @@ jobs: - name: Build and push Docker image if: ${{ inputs.build-and-push-docker-image }} - uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e + uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755 with: context: . push: true @@ -179,7 +179,7 @@ jobs: - name: Build and push Docker image if: ${{ inputs.build-and-push-docker-image-wasm }} - uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e + uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755 with: context: . push: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0035d074083..880a4311ffb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: images: ${{ env.REGISTRY }}/cosmos/${{ env.IMAGE_NAME }} - name: Build and push Docker image - uses: docker/build-push-action@4f7cdeb0f05278b464e71357394bf2c61f94138e + uses: docker/build-push-action@16ebe778df0e7752d2cfcbd924afdbbd89c1a755 with: context: . push: true From 9efb7104e93ecbc1bc2e1f5e9fb770fe556633ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 16:37:20 +0200 Subject: [PATCH 77/78] chore(deps): bump github.com/CosmWasm/wasmvm/v2 from 2.1.0 to 2.1.1 in /modules/light-clients/08-wasm (#7099) * chore(deps): bump github.com/CosmWasm/wasmvm/v2 Bumps [github.com/CosmWasm/wasmvm/v2](https://github.com/CosmWasm/wasmvm) from 2.1.0 to 2.1.1. - [Release notes](https://github.com/CosmWasm/wasmvm/releases) - [Changelog](https://github.com/CosmWasm/wasmvm/blob/main/CHANGELOG.md) - [Commits](https://github.com/CosmWasm/wasmvm/compare/v2.1.0...v2.1.1) --- updated-dependencies: - dependency-name: github.com/CosmWasm/wasmvm/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * chore: add to changelog * deps: bump e2e indirect. --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: DimitrisJim --- e2e/go.mod | 2 +- e2e/go.sum | 4 ++-- modules/light-clients/08-wasm/CHANGELOG.md | 1 + modules/light-clients/08-wasm/go.mod | 2 +- modules/light-clients/08-wasm/go.sum | 4 ++-- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/e2e/go.mod b/e2e/go.mod index 9fce2b9ef13..c4b25b10b49 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -53,7 +53,7 @@ require ( github.com/ChainSafe/go-schnorrkel v1.1.0 // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect - github.com/CosmWasm/wasmvm/v2 v2.1.0 // indirect + github.com/CosmWasm/wasmvm/v2 v2.1.1 // indirect github.com/DataDog/datadog-go v4.8.3+incompatible // indirect github.com/DataDog/zstd v1.5.5 // indirect github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect diff --git a/e2e/go.sum b/e2e/go.sum index 6eb87242aab..78633fbbb45 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -233,8 +233,8 @@ github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRr github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= -github.com/CosmWasm/wasmvm/v2 v2.1.0 h1:bleLhNA36hM8iPjFJsNRi9RjrQW6MtXafw2+wVjAWAE= -github.com/CosmWasm/wasmvm/v2 v2.1.0/go.mod h1:bMhLQL4Yp9CzJi9A83aR7VO9wockOsSlZbT4ztOl6bg= +github.com/CosmWasm/wasmvm/v2 v2.1.1 h1:2avJEKozrCav4tVeVeLYJERqHFzm+MQ9v7kKAdz/zgA= +github.com/CosmWasm/wasmvm/v2 v2.1.1/go.mod h1:bMhLQL4Yp9CzJi9A83aR7VO9wockOsSlZbT4ztOl6bg= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= diff --git a/modules/light-clients/08-wasm/CHANGELOG.md b/modules/light-clients/08-wasm/CHANGELOG.md index b3c641ccd9a..b5255e8985f 100644 --- a/modules/light-clients/08-wasm/CHANGELOG.md +++ b/modules/light-clients/08-wasm/CHANGELOG.md @@ -38,6 +38,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Dependencies +* [\#7099](https://github.com/cosmos/ibc-go/pull/7099) Bump WasmVM to v2.1.1. * [\#6828](https://github.com/cosmos/ibc-go/pull/6828) Bump Cosmos SDK to v0.50.9. * [\#6848](https://github.com/cosmos/ibc-go/pull/6848) Bump CometBFT to v0.38.10. diff --git a/modules/light-clients/08-wasm/go.mod b/modules/light-clients/08-wasm/go.mod index 19b7299b4ec..369b87a7556 100644 --- a/modules/light-clients/08-wasm/go.mod +++ b/modules/light-clients/08-wasm/go.mod @@ -23,7 +23,7 @@ require ( cosmossdk.io/x/feegrant v0.1.1 cosmossdk.io/x/tx v0.13.4 cosmossdk.io/x/upgrade v0.1.4 - github.com/CosmWasm/wasmvm/v2 v2.1.0 + github.com/CosmWasm/wasmvm/v2 v2.1.1 github.com/cometbft/cometbft v0.38.10 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-sdk v0.50.9 diff --git a/modules/light-clients/08-wasm/go.sum b/modules/light-clients/08-wasm/go.sum index ec8d5ed4530..7c98cbff48d 100644 --- a/modules/light-clients/08-wasm/go.sum +++ b/modules/light-clients/08-wasm/go.sum @@ -227,8 +227,8 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CosmWasm/wasmvm/v2 v2.1.0 h1:bleLhNA36hM8iPjFJsNRi9RjrQW6MtXafw2+wVjAWAE= -github.com/CosmWasm/wasmvm/v2 v2.1.0/go.mod h1:bMhLQL4Yp9CzJi9A83aR7VO9wockOsSlZbT4ztOl6bg= +github.com/CosmWasm/wasmvm/v2 v2.1.1 h1:2avJEKozrCav4tVeVeLYJERqHFzm+MQ9v7kKAdz/zgA= +github.com/CosmWasm/wasmvm/v2 v2.1.1/go.mod h1:bMhLQL4Yp9CzJi9A83aR7VO9wockOsSlZbT4ztOl6bg= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= From 1650a955a858e82c48539f802bf545d795b805db Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Fri, 9 Aug 2024 10:51:07 +0300 Subject: [PATCH 78/78] fix: allow unwind on its own and don't fail if only two arguments are provided (#7090) * fix: allow unwind on its own and don't fail if only two arguments are provided. * fix typo --------- Co-authored-by: Carlos Rodriguez --- modules/apps/transfer/client/cli/tx.go | 46 +++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/modules/apps/transfer/client/cli/tx.go b/modules/apps/transfer/client/cli/tx.go index 1805375031f..3da6dc4308d 100644 --- a/modules/apps/transfer/client/cli/tx.go +++ b/modules/apps/transfer/client/cli/tx.go @@ -44,17 +44,23 @@ Timeout height can be set by passing in the height string in the form {revision} Note, relative timeout height is not supported. Relative timeout timestamp is added to the value of the user's local system clock time using the {packet-timeout-timestamp} flag. If no timeout value is set then a default relative timeout value of 10 minutes is used. IBC tokens can be automatically unwound to their native chain using the {unwind} flag. Please note that if the {unwind} flag is used, then the transfer should contain only -a single token. Tokens can also be automatically forwarded through multiple chains using the {fowarding} flag and specifying +a single token and the src-port and src-channel arguments must not be specified. Tokens can also be automatically forwarded through multiple chains using the {fowarding} flag and specifying a comma-separated list of source portID/channelID pairs for each intermediary chain. {unwind} and {forwarding} flags can be used together to first unwind IBC tokens to their native chain and then forward them to the final destination.`), Example: fmt.Sprintf("%s tx ibc-transfer transfer [src-port] [src-channel] [receiver] [coins]", version.AppName), - Args: cobra.ExactArgs(4), + Args: cobra.RangeArgs(2, 4), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err } sender := clientCtx.GetFromAddress().String() + + args, err = normalizeArgs(cmd, args) + if err != nil { + return err + } + srcPort := args[0] srcChannel := args[1] receiver := args[2] @@ -146,12 +152,20 @@ to first unwind IBC tokens to their native chain and then forward them to the fi func parseForwarding(cmd *cobra.Command) (*types.Forwarding, error) { var hops []types.Hop + unwind, err := cmd.Flags().GetBool(flagUnwind) + if err != nil { + return nil, err + } + forwarding := types.NewForwarding(unwind) + forwardingString, err := cmd.Flags().GetString(flagForwarding) if err != nil { return nil, err } + if strings.TrimSpace(forwardingString) == "" { - return nil, nil + // If forwarding not specified, we might have unwind set + return forwarding, nil } pairs := strings.Split(forwardingString, ",") @@ -165,10 +179,34 @@ func parseForwarding(cmd *cobra.Command) (*types.Forwarding, error) { hops = append(hops, hop) } + forwarding.Hops = hops + return forwarding, nil +} + +// normalizeArgs takes the positional arguments specified and if the unwind flag +// is false and the args array is of length 4, returns them as-is or, if unwind is true and the +// args array has a length of 2, inserts two empty strings at the beginning signifying the +// portID and channelID. +func normalizeArgs(cmd *cobra.Command, args []string) ([]string, error) { unwind, err := cmd.Flags().GetBool(flagUnwind) if err != nil { return nil, err } - return types.NewForwarding(unwind, hops...), nil + if unwind { + if len(args) != 2 { + return nil, fmt.Errorf("expected only 2 arguments, got %d", len(args)) + } + + // Inject empty source portID/channelID. + args = append([]string{"", ""}, args...) + return args, nil + } + + // Unwind false, just ensure we have 4 args. + if len(args) != 4 { + return nil, fmt.Errorf("expected 4 args, got %d", len(args)) + } + + return args, nil }