From 1492f6e7cfffb8ff29a185f1df22954ff6404388 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Mon, 20 Nov 2023 11:21:18 -0600 Subject: [PATCH 01/10] wip: add dummy middleware to modify packets --- .../testing/simapp/app.go | 34 +- .../testing/simapp/x/dummyware/Makefile | 44 + .../simapp/x/dummyware/client/cli/cli.go | 61 + .../simapp/x/dummyware/ibc_middleware.go | 167 +++ .../simapp/x/dummyware/keeper/genesis.go | 29 + .../simapp/x/dummyware/keeper/grpc_query.go | 20 + .../simapp/x/dummyware/keeper/keeper.go | 188 +++ .../simapp/x/dummyware/keeper/msg_server.go | 39 + .../simapp/x/dummyware/keeper/params.go | 33 + .../testing/simapp/x/dummyware/module.go | 156 ++ .../x/dummyware/proto/buf.gen.gogo.yaml | 8 + .../testing/simapp/x/dummyware/proto/buf.lock | 19 + .../testing/simapp/x/dummyware/proto/buf.yaml | 20 + .../proto/dummyware/v1/genesis.proto | 41 + .../dummyware/proto/dummyware/v1/query.proto | 24 + .../x/dummyware/proto/dummyware/v1/tx.proto | 39 + .../simapp/x/dummyware/scripts/protocgen.sh | 16 + .../testing/simapp/x/dummyware/types/codec.go | 42 + .../x/dummyware/types/expected_keepers.go | 39 + .../simapp/x/dummyware/types/forward.go | 117 ++ .../simapp/x/dummyware/types/genesis.go | 22 + .../simapp/x/dummyware/types/genesis.pb.go | 1302 +++++++++++++++++ .../testing/simapp/x/dummyware/types/keys.go | 29 + .../testing/simapp/x/dummyware/types/msgs.go | 29 + .../simapp/x/dummyware/types/params.go | 23 + .../simapp/x/dummyware/types/params_legacy.go | 23 + .../simapp/x/dummyware/types/query.pb.go | 542 +++++++ .../simapp/x/dummyware/types/query.pb.gw.go | 153 ++ .../testing/simapp/x/dummyware/types/tx.pb.go | 606 ++++++++ 29 files changed, 3860 insertions(+), 5 deletions(-) create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/Makefile create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/client/cli/cli.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/genesis.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/grpc_query.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/params.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/module.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.gen.gogo.yaml create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.lock create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.yaml create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/genesis.proto create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/query.proto create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/tx.proto create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/scripts/protocgen.sh create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/codec.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/forward.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.pb.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/msgs.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.gw.go create mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/tx.pb.go diff --git a/middleware/packet-forward-middleware/testing/simapp/app.go b/middleware/packet-forward-middleware/testing/simapp/app.go index 0aafef24..832cb5ed 100644 --- a/middleware/packet-forward-middleware/testing/simapp/app.go +++ b/middleware/packet-forward-middleware/testing/simapp/app.go @@ -10,6 +10,11 @@ import ( packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward" packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" + + dummyware "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware" + dummywarekeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/keeper" + dummywaretypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + upgrades "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/upgrades" "github.com/gorilla/mux" "github.com/rakyll/statik/fs" @@ -214,6 +219,7 @@ type SimApp struct { AuthzKeeper authzkeeper.Keeper IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly PacketForwardKeeper *packetforwardkeeper.Keeper + DummyWareKeeper *dummywarekeeper.Keeper EvidenceKeeper evidencekeeper.Keeper TransferKeeper ibctransferkeeper.Keeper FeeGrantKeeper feegrantkeeper.Keeper @@ -282,7 +288,7 @@ func NewSimApp( authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, crisistypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, group.StoreKey, paramstypes.StoreKey, consensusparamtypes.StoreKey, ibcexported.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey, - evidencetypes.StoreKey, packetforwardtypes.StoreKey, ibctransfertypes.StoreKey, authzkeeper.StoreKey, capabilitytypes.StoreKey, + evidencetypes.StoreKey, packetforwardtypes.StoreKey, dummywaretypes.ModuleName, ibctransfertypes.StoreKey, authzkeeper.StoreKey, capabilitytypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) // NOTE: The testingkey is just mounted for testing purposes. Actual applications should @@ -433,6 +439,17 @@ func NewSimApp( groupConfig.MaxMetadataLen = 1000 app.GroupKeeper = groupkeeper.NewKeeper(keys[group.StoreKey], appCodec, app.MsgServiceRouter(), app.AccountKeeper, groupConfig) + app.DummyWareKeeper = dummywarekeeper.NewKeeper( + appCodec, + app.keys[dummywaretypes.StoreKey], + nil, + app.IBCKeeper.ChannelKeeper, + app.DistrKeeper, + app.BankKeeper, + app.IBCKeeper.ChannelKeeper, + authority, + ) + // Packet Forward Middleware Keeper app.PacketForwardKeeper = packetforwardkeeper.NewKeeper( appCodec, @@ -441,7 +458,7 @@ func NewSimApp( app.IBCKeeper.ChannelKeeper, app.DistrKeeper, app.BankKeeper, - app.IBCKeeper.ChannelKeeper, + app.DummyWareKeeper, authority, ) @@ -460,11 +477,16 @@ func NewSimApp( scopedTransferKeeper, ) + app.DummyWareKeeper.SetTransferKeeper(app.TransferKeeper) app.PacketForwardKeeper.SetTransferKeeper(app.TransferKeeper) // Create Transfer Stack var transferStack ibcporttypes.IBCModule transferStack = transfer.NewIBCModule(app.TransferKeeper) + transferStack = dummyware.NewIBCMiddleware( + transferStack, + app.DummyWareKeeper, + ) transferStack = packetforward.NewIBCMiddleware( transferStack, app.PacketForwardKeeper, @@ -521,6 +543,7 @@ func NewSimApp( // IBC modules ibc.NewAppModule(app.IBCKeeper), packetforward.NewAppModule(app.PacketForwardKeeper, app.GetSubspace(packetforwardtypes.ModuleName)), + dummyware.NewAppModule(app.DummyWareKeeper), transfer.NewAppModule(app.TransferKeeper), ) @@ -533,13 +556,13 @@ func NewSimApp( upgradetypes.ModuleName, capabilitytypes.ModuleName, minttypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, evidencetypes.ModuleName, stakingtypes.ModuleName, ibcexported.ModuleName, packetforwardtypes.ModuleName, ibctransfertypes.StoreKey, authtypes.ModuleName, banktypes.ModuleName, govtypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, authz.ModuleName, feegrant.ModuleName, - paramstypes.ModuleName, vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, + paramstypes.ModuleName, vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, dummywaretypes.ModuleName, ) app.mm.SetOrderEndBlockers( crisistypes.ModuleName, govtypes.ModuleName, stakingtypes.ModuleName, ibcexported.ModuleName, packetforwardtypes.ModuleName, ibctransfertypes.StoreKey, capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, minttypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, feegrant.ModuleName, paramstypes.ModuleName, - upgradetypes.ModuleName, vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, + upgradetypes.ModuleName, vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, dummywaretypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -553,7 +576,7 @@ func NewSimApp( slashingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, packetforwardtypes.ModuleName, ibctransfertypes.StoreKey, feegrant.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, - vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, + vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, dummywaretypes.ModuleName, } app.mm.SetOrderInitGenesis(genesisModuleOrder...) @@ -857,6 +880,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(ibcexported.ModuleName) paramsKeeper.Subspace(ibctransfertypes.ModuleName) paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable()) + paramsKeeper.Subspace(dummywaretypes.ModuleName).WithKeyTable(dummywaretypes.ParamKeyTable()) return paramsKeeper } diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/Makefile b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/Makefile new file mode 100644 index 00000000..90897e5a --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/Makefile @@ -0,0 +1,44 @@ +PACKAGES_NOSIMULATION=$(shell go list ./... | grep -v '/simulation') +PACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation') +VERSION := $(shell echo $(shell git describe --always) | sed 's/^v//') +COMMIT := $(shell git log -1 --format='%H') +GOMOD := $(shell go list -m) +LEDGER_ENABLED ?= true +BINDIR ?= $(GOPATH)/bin +BUILDDIR ?= $(CURDIR)/build +SIMAPP = ./testing/simapp +MOCKS_DIR = $(CURDIR)/test/mock +HTTPS_GIT := https://github.com/cosmos/ibc-go.git +DOCKER := $(shell which docker) +DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf + +############################################################################### +### Protobuf ### +############################################################################### + +containerProtoVer=v0.2 +containerProtoImage=tendermintdev/sdk-proto-gen:$(containerProtoVer) +containerProtoGen=cosmos-sdk-proto-gen-$(containerProtoVer) +containerProtoGenSwagger=cosmos-sdk-proto-gen-swagger-$(containerProtoVer) +containerProtoFmt=cosmos-sdk-proto-fmt-$(containerProtoVer) + +protoVer=0.13.1 +protoImageName=ghcr.io/cosmos/proto-builder:$(protoVer) +protoImage=$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(protoImageName) + +proto-all: proto-format proto-lint proto-gen + +proto-gen: + @echo "Generating Protobuf files" + @$(protoImage) sh ./scripts/protocgen.sh + +proto-format: + @$(protoImage) find ./ -name "*.proto" -exec clang-format -i {} \; + +proto-lint: + @$(protoImage) buf lint --error-format=json + +proto-swagger-gen: + @echo "Generating Protobuf Swagger" + @if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerProtoGenSwagger}$$"; then docker start -a $(containerProtoGenSwagger); else docker run --name $(containerProtoGenSwagger) -v $(CURDIR):/workspace --workdir /workspace $(containerProtoImage) \ + sh ./scripts/protoc-swagger-gen.sh; fi \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/client/cli/cli.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/client/cli/cli.go new file mode 100644 index 00000000..d0f6749e --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/client/cli/cli.go @@ -0,0 +1,61 @@ +package cli + +import ( + "fmt" + + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/version" +) + +// GetQueryCmd returns the query commands for dummyware +func GetQueryCmd() *cobra.Command { + queryCmd := &cobra.Command{ + Use: types.ModuleName, + Short: "Querying commands for the " + types.ModuleName + " module", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + } + + queryCmd.AddCommand( + GetCmdParams(), + ) + + return queryCmd +} + +// GetCmdParams returns the command handler for dummyware parameter querying. +func GetCmdParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "Query the current dummyware parameters", + Long: "Query the current dummyware parameters", + Args: cobra.NoArgs, + Example: fmt.Sprintf("%s query dummyware params", version.AppName), + RunE: func(cmd *cobra.Command, _ []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) + if err != nil { + return err + } + return clientCtx.PrintProto(res.Params) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// NewTxCmd returns the transaction commands for dummyware +func NewTxCmd() *cobra.Command { + return nil +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go new file mode 100644 index 00000000..f6a110b5 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go @@ -0,0 +1,167 @@ +package packetforward + +import ( + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/keeper" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + + errorsmod "cosmossdk.io/errors" + + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" +) + +var _ porttypes.Middleware = &IBCMiddleware{} + +// IBCMiddleware implements the ICS26 callbacks for the forward middleware given the +// forward keeper and the underlying application. +type IBCMiddleware struct { + app porttypes.IBCModule + keeper *keeper.Keeper +} + +// NewIBCMiddleware creates a new IBCMiddleware given the keeper and underlying application. +func NewIBCMiddleware( + app porttypes.IBCModule, + k *keeper.Keeper, +) IBCMiddleware { + return IBCMiddleware{ + app: app, + keeper: k, + } +} + +// OnChanOpenInit implements the IBCModule interface. +func (im IBCMiddleware) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return im.app.OnChanOpenInit(ctx, order, connectionHops, portID, channelID, chanCap, counterparty, version) +} + +// OnChanOpenTry implements the IBCModule interface. +func (im IBCMiddleware) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (version string, err error) { + return im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, chanCap, counterparty, counterpartyVersion) +} + +// OnChanOpenAck implements the IBCModule interface. +func (im IBCMiddleware) OnChanOpenAck( + ctx sdk.Context, + portID, channelID string, + counterpartyChannelID string, + counterpartyVersion string, +) error { + return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) +} + +// OnChanOpenConfirm implements the IBCModule interface. +func (im IBCMiddleware) OnChanOpenConfirm(ctx sdk.Context, portID, channelID string) error { + return im.app.OnChanOpenConfirm(ctx, portID, channelID) +} + +// OnChanCloseInit implements the IBCModule interface. +func (im IBCMiddleware) OnChanCloseInit(ctx sdk.Context, portID, channelID string) error { + return im.app.OnChanCloseInit(ctx, portID, channelID) +} + +// OnChanCloseConfirm implements the IBCModule interface. +func (im IBCMiddleware) OnChanCloseConfirm(ctx sdk.Context, portID, channelID string) error { + return im.app.OnChanCloseConfirm(ctx, portID, channelID) +} + +// OnRecvPacket checks the memo field on this packet and if the metadata inside's root key indicates this packet +// should be handled by the swap middleware it attempts to perform a swap. If the swap is successful +// the underlying application's OnRecvPacket callback is invoked, an ack error is returned otherwise. +func (im IBCMiddleware) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + return im.app.OnRecvPacket(ctx, packet, relayer) +} + +// OnAcknowledgementPacket implements the IBCModule interface. +func (im IBCMiddleware) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + var data transfertypes.FungibleTokenPacketData + if err := transfertypes.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil { + im.keeper.Logger(ctx).Error("packetForwardMiddleware error parsing packet data from ack packet", + "sequence", packet.GetSequence(), + "src-channel", packet.GetSourceChannel(), "src-port", packet.GetSourcePort(), + "dst-channel", packet.GetDestChannel(), "dst-port", packet.GetDestPort(), + "error", err, + ) + return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) + } + + var ack channeltypes.Acknowledgement + if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) + } + + inFlightPacket := im.keeper.GetAndClearInFlightPacket(ctx, packet.GetSourceChannel(), packet.GetSourcePort(), packet.GetSequence()) + if inFlightPacket != nil { + // this is a forwarded packet, so override handling to avoid refund from being processed. + return im.keeper.WriteAcknowledgementForForwardedPacket(ctx, packet, data, inFlightPacket, ack) + } + + return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) +} + +// OnTimeoutPacket implements the IBCModule interface. +func (im IBCMiddleware) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) error { + return im.app.OnTimeoutPacket(ctx, packet, relayer) +} + +// SendPacket implements the ICS4 Wrapper interface. +func (im IBCMiddleware) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + sourcePort string, sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, +) (sequence uint64, err error) { + return im.keeper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +// WriteAcknowledgement implements the ICS4 Wrapper interface. +func (im IBCMiddleware) WriteAcknowledgement( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet ibcexported.PacketI, + ack ibcexported.Acknowledgement, +) error { + return im.keeper.WriteAcknowledgement(ctx, chanCap, packet, ack) +} + +func (im IBCMiddleware) GetAppVersion( + ctx sdk.Context, + portID, + channelID string, +) (string, bool) { + return im.keeper.GetAppVersion(ctx, portID, channelID) +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/genesis.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/genesis.go new file mode 100644 index 00000000..f37bc183 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/genesis.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// InitGenesis +func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) { + if err := k.SetParams(ctx, state.Params); err != nil { + panic(err) + } +} + +// ExportGenesis +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + store := ctx.KVStore(k.storeKey) + + inFlightPackets := make(map[string]types.InFlightPacket) + + itr := store.Iterator(nil, nil) + for ; itr.Valid(); itr.Next() { + var inFlightPacket types.InFlightPacket + k.cdc.MustUnmarshal(itr.Value(), &inFlightPacket) + inFlightPackets[string(itr.Key())] = inFlightPacket + } + return &types.GenesisState{Params: k.GetParams(ctx), InFlightPackets: inFlightPackets} +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/grpc_query.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/grpc_query.go new file mode 100644 index 00000000..efb51bfd --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/grpc_query.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var _ types.QueryServer = Keeper{} + +func (k Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + params := k.GetParams(ctx) + + return &types.QueryParamsResponse{ + Params: ¶ms, + }, nil +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go new file mode 100644 index 00000000..cdc5d8ee --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go @@ -0,0 +1,188 @@ +package keeper + +import ( + "time" + + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + + errorsmod "cosmossdk.io/errors" + + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + + "github.com/cometbft/cometbft/libs/log" + + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" +) + +var ( + // DefaultTransferPacketTimeoutHeight is the timeout height following IBC defaults + DefaultTransferPacketTimeoutHeight = clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: 0, + } + + // DefaultForwardTransferPacketTimeoutTimestamp is the timeout timestamp following IBC defaults + DefaultForwardTransferPacketTimeoutTimestamp = time.Duration(transfertypes.DefaultRelativePacketTimeoutTimestamp) * time.Nanosecond + + // DefaultRefundTransferPacketTimeoutTimestamp is a 28-day timeout for refund packets since funds are stuck in packetforward module otherwise. + DefaultRefundTransferPacketTimeoutTimestamp = 28 * 24 * time.Hour +) + +// Keeper defines the packet forward middleware keeper +type Keeper struct { + cdc codec.BinaryCodec + storeKey storetypes.StoreKey + + transferKeeper types.TransferKeeper + channelKeeper types.ChannelKeeper + distrKeeper types.DistributionKeeper + bankKeeper types.BankKeeper + ics4Wrapper porttypes.ICS4Wrapper + + // the address capable of executing a MsgUpdateParams message. Typically, this + // should be the x/gov module account. + authority string +} + +// NewKeeper creates a new forward Keeper instance +func NewKeeper( + cdc codec.BinaryCodec, + key storetypes.StoreKey, + transferKeeper types.TransferKeeper, + channelKeeper types.ChannelKeeper, + distrKeeper types.DistributionKeeper, + bankKeeper types.BankKeeper, + ics4Wrapper porttypes.ICS4Wrapper, + authority string, +) *Keeper { + return &Keeper{ + cdc: cdc, + storeKey: key, + transferKeeper: transferKeeper, + channelKeeper: channelKeeper, + distrKeeper: distrKeeper, + bankKeeper: bankKeeper, + ics4Wrapper: ics4Wrapper, + authority: authority, + } +} + +// GetAuthority returns the module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// SetTransferKeeper sets the transferKeeper +func (k *Keeper) SetTransferKeeper(transferKeeper types.TransferKeeper) { + k.transferKeeper = transferKeeper +} + +// Logger returns a module-specific logger. +func (k *Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", "x/"+ibcexported.ModuleName+"-"+types.ModuleName) +} + +func (k *Keeper) WriteAcknowledgementForForwardedPacket( + ctx sdk.Context, + packet channeltypes.Packet, + data transfertypes.FungibleTokenPacketData, + inFlightPacket *types.InFlightPacket, + ack channeltypes.Acknowledgement, +) error { + + // set inFlightPacket to be non refundable + + inFlightPacket.Nonrefundable = true + + // Lookup module by channel capability + _, chanCap, err := k.channelKeeper.LookupModuleByChannel(ctx, inFlightPacket.RefundPortId, inFlightPacket.RefundChannelId) + if err != nil { + return errorsmod.Wrap(err, "could not retrieve module from port-id") + } + + return k.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, channeltypes.Packet{ + Data: inFlightPacket.PacketData, + Sequence: inFlightPacket.RefundSequence, + SourcePort: inFlightPacket.PacketSrcPortId, + SourceChannel: inFlightPacket.PacketSrcChannelId, + DestinationPort: inFlightPacket.RefundPortId, + DestinationChannel: inFlightPacket.RefundChannelId, + TimeoutHeight: clienttypes.MustParseHeight(inFlightPacket.PacketTimeoutHeight), + TimeoutTimestamp: inFlightPacket.PacketTimeoutTimestamp, + }, ack) +} + +func (k *Keeper) RemoveInFlightPacket(ctx sdk.Context, packet channeltypes.Packet) { + store := ctx.KVStore(k.storeKey) + key := types.RefundPacketKey(packet.SourceChannel, packet.SourcePort, packet.Sequence) + if !store.Has(key) { + // not a forwarded packet, ignore. + return + } + + // done with packet key now, delete. + store.Delete(key) +} + +// GetAndClearInFlightPacket will fetch an InFlightPacket from the store, remove it if it exists, and return it. +func (k *Keeper) GetAndClearInFlightPacket( + ctx sdk.Context, + channel string, + port string, + sequence uint64, +) *types.InFlightPacket { + store := ctx.KVStore(k.storeKey) + key := types.RefundPacketKey(channel, port, sequence) + if !store.Has(key) { + // this is either not a forwarded packet, or it is the final destination for the refund. + return nil + } + + bz := store.Get(key) + + // done with packet key now, delete. + store.Delete(key) + + var inFlightPacket types.InFlightPacket + k.cdc.MustUnmarshal(bz, &inFlightPacket) + return &inFlightPacket +} + +// SendPacket wraps IBC ChannelKeeper's SendPacket function +func (k Keeper) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + sourcePort string, sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, +) (sequence uint64, err error) { + return k.ics4Wrapper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +// WriteAcknowledgement wraps IBC ICS4Wrapper WriteAcknowledgement function. +// ICS29 WriteAcknowledgement is used for asynchronous acknowledgements. +func (k *Keeper) WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error { + return k.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, packet, acknowledgement) +} + +// WriteAcknowledgement wraps IBC ICS4Wrapper GetAppVersion function. +func (k *Keeper) GetAppVersion( + ctx sdk.Context, + portID, + channelID string, +) (string, bool) { + return k.ics4Wrapper.GetAppVersion(ctx, portID, channelID) +} + +// LookupModuleByChannel wraps ChannelKeeper LookupModuleByChannel function. +func (k *Keeper) LookupModuleByChannel(ctx sdk.Context, portID, channelID string) (string, *capabilitytypes.Capability, error) { + return k.channelKeeper.LookupModuleByChannel(ctx, portID, channelID) +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go new file mode 100644 index 00000000..a1f13880 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go @@ -0,0 +1,39 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + + "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +var _ types.MsgServer = msgServer{} + +type msgServer struct { + *Keeper +} + +// NewMsgServerImpl returns an implementation of the x/packetforward MsgServer interface. +func NewMsgServerImpl(k *Keeper) types.MsgServer { + return &msgServer{ + Keeper: k, + } +} + +// UpdateParams implements types.MsgServer. +func (ms msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if ms.authority != req.Authority { + return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, req.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + if err := ms.SetParams(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/params.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/params.go new file mode 100644 index 00000000..b9c31c11 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/params.go @@ -0,0 +1,33 @@ +package keeper + +import ( + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// SetParams sets the module parameters. +func (k Keeper) SetParams(ctx sdk.Context, p types.Params) error { + if err := p.Validate(); err != nil { + return err + } + + store := ctx.KVStore(k.storeKey) + bz := k.cdc.MustMarshal(&p) + store.Set(types.ParamsKey, bz) + return nil +} + +// GetParams returns the current module parameters. +func (k Keeper) GetParams(ctx sdk.Context) types.Params { + var p types.Params + + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.ParamsKey) + if bz == nil { + return p + } + + k.cdc.MustUnmarshal(bz, &p) + return p +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/module.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/module.go new file mode 100644 index 00000000..c2a5d99b --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/module.go @@ -0,0 +1,156 @@ +package packetforward + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/client/cli" + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/keeper" + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + abci "github.com/cometbft/cometbft/abci/types" +) + +var ( + _ module.AppModule = AppModule{} + _ module.AppModuleBasic = AppModuleBasic{} + _ module.AppModuleSimulation = AppModule{} +) + +// AppModuleBasic is the packetforward AppModuleBasic +type AppModuleBasic struct{} + +// Name implements AppModuleBasic interface +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec implements AppModuleBasic interface +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterInterfaces registers module concrete types into protobuf Any. +func (AppModuleBasic) RegisterInterfaces(r codectypes.InterfaceRegistry) { + types.RegisterInterfaces(r) +} + +// DefaultGenesis returns default genesis state as raw bytes for the ibc +// packetforward module. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesisState()) +} + +// ValidateGenesis performs genesis state validation for the packetforward module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { + var gs types.GenesisState + if err := cdc.UnmarshalJSON(bz, &gs); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + + return gs.Validate() +} + +// RegisterRESTRoutes implements AppModuleBasic interface +func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the packetforward module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + _ = types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) +} + +// GetTxCmd implements AppModuleBasic interface +func (AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.NewTxCmd() +} + +// GetQueryCmd implements AppModuleBasic interface +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd() +} + +// AppModule represents the AppModule for this module +type AppModule struct { + AppModuleBasic + keeper *keeper.Keeper +} + +// NewAppModule creates a new packetforward module +func NewAppModule(k *keeper.Keeper) AppModule { + return AppModule{ + keeper: k, + } +} + +// QuerierRoute implements the AppModule interface +func (AppModule) QuerierRoute() string { + return types.QuerierRoute +} + +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) +} + +// InitGenesis performs genesis initialization for the packetforward module. It returns +// no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { + err := am.ValidateGenesis(cdc, nil, data) + if err != nil { + panic(err) + } + + var genesisState types.GenesisState + cdc.MustUnmarshalJSON(data, &genesisState) + am.keeper.InitGenesis(ctx, genesisState) + + return []abci.ValidatorUpdate{} +} + +// ExportGenesis returns the exported genesis state as raw bytes for the packetforward +// module. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + gs := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(gs) +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 2 } + +// BeginBlock implements the AppModule interface +func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} + +// EndBlock implements the AppModule interface +func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { + return []abci.ValidatorUpdate{} +} + +// AppModuleSimulation functions + +// GenerateGenesisState creates a randomized GenState of the packetforward module. +func (AppModule) GenerateGenesisState(_ *module.SimulationState) {} + +// ProposalContents doesn't return any content functions for governance proposals. +func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { //nolint:staticcheck // WeightedProposalContent is necessary to satisfy the module interface + return nil +} + +// RegisterStoreDecoder registers a decoder for packetforward module's types +func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} + +// WeightedOperations returns the all the packetforward module operations with their respective weights. +func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { + return nil +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.gen.gogo.yaml b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.gen.gogo.yaml new file mode 100644 index 00000000..855ea251 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.gen.gogo.yaml @@ -0,0 +1,8 @@ +version: v1 +plugins: + - name: gocosmos + out: .. + opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types + - name: grpc-gateway + out: .. + opt: logtostderr=true,allow_colon_final_segments=true \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.lock b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.lock new file mode 100644 index 00000000..9b1b283c --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.lock @@ -0,0 +1,19 @@ +# Generated by buf. DO NOT EDIT. +version: v1 +deps: + - remote: buf.build + owner: cosmos + repository: cosmos-proto + commit: 1935555c206d4afb9e94615dfd0fad31 + - remote: buf.build + owner: cosmos + repository: cosmos-sdk + commit: 79b0b35b0aaf4cb1833f181ec979791b + - remote: buf.build + owner: cosmos + repository: gogo-proto + commit: 34d970b699f84aa382f3c29773a60836 + - remote: buf.build + owner: googleapis + repository: googleapis + commit: 75b4300737fb4efca0831636be94e517 diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.yaml b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.yaml new file mode 100644 index 00000000..ac022583 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.yaml @@ -0,0 +1,20 @@ +version: v1 +deps: + - buf.build/cosmos/cosmos-sdk + - buf.build/cosmos/cosmos-proto + - buf.build/cosmos/gogo-proto + - buf.build/googleapis/googleapis +breaking: + use: + - FILE +lint: + use: + - DEFAULT + - COMMENTS + - FILE_LOWER_SNAKE_CASE + except: + - UNARY_RPC + - COMMENT_FIELD + - SERVICE_SUFFIX + - PACKAGE_VERSION_SUFFIX + - RPC_REQUEST_STANDARD_NAME \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/genesis.proto b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/genesis.proto new file mode 100644 index 00000000..c7e4904c --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/genesis.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +package dummyware.v1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types"; + +// GenesisState defines the packetforward genesis state +message GenesisState { + Params params = 1 [ (gogoproto.nullable) = false ]; + + // key - information about forwarded packet: src_channel + // (parsedReceiver.Channel), src_port (parsedReceiver.Port), sequence value - + // information about original packet for refunding if necessary: retries, + // srcPacketSender, srcPacket.DestinationChannel, srcPacket.DestinationPort + map in_flight_packets = 2 [ + (gogoproto.moretags) = "yaml:\"in_flight_packets\"", + (gogoproto.nullable) = false + ]; +} + +// Params defines the set of packetforward parameters. +message Params { +} + +// InFlightPacket contains information about original packet for +// writing the acknowledgement and refunding if necessary. +message InFlightPacket { + string original_sender_address = 1; + string refund_channel_id = 2; + string refund_port_id = 3; + string packet_src_channel_id = 4; + string packet_src_port_id = 5; + uint64 packet_timeout_timestamp = 6; + string packet_timeout_height = 7; + bytes packet_data = 8; + uint64 refund_sequence = 9; + int32 retries_remaining = 10; + uint64 timeout = 11; + bool nonrefundable = 12; +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/query.proto b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/query.proto new file mode 100644 index 00000000..53ca1dcf --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/query.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package dummyware.v1; + +import "google/api/annotations.proto"; +import "dummyware/v1/genesis.proto"; + +option go_package = "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types"; + +// Query provides defines the gRPC querier service. +service Query { + // Params queries all parameters of the packetforward module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ibc/apps/dummyware/v1/params"; + } +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1; +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/tx.proto b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/tx.proto new file mode 100644 index 00000000..79e9e853 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/tx.proto @@ -0,0 +1,39 @@ +syntax = "proto3"; +package dummyware.v1; + +import "cosmos/msg/v1/msg.proto"; +import "dummyware/v1/genesis.proto"; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; + +option go_package = "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types"; + +// Msg defines the Msg service. +service Msg { + // UpdateParams defines a governance operation for updating the x/packetforward module + // parameters. The authority is hard-coded to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + + // authority is the address of the governance account. + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/packetforward parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/scripts/protocgen.sh b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/scripts/protocgen.sh new file mode 100644 index 00000000..5b05c508 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/scripts/protocgen.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -eo pipefail + +echo "Generating gogo proto code" +cd proto + +buf generate --template buf.gen.gogo.yaml $file + +cd .. + +# move proto files to the right places +# +# Note: Proto files are suffixed with the current binary version. +cp -r github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types/* types/ +rm -rf github.com \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/codec.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/codec.go new file mode 100644 index 00000000..0d9e2b1b --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/codec.go @@ -0,0 +1,42 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" + authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" +) + +var ( + amino = codec.NewLegacyAmino() + ModuleCdc = codec.NewAminoCodec(amino) +) + +func init() { + RegisterLegacyAminoCodec(amino) + cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) + + // Register all Amino interfaces and concrete types on the authz Amino codec + // so that this can later be used to properly serialize MsgGrant and MsgExec + // instances. + RegisterLegacyAminoCodec(authzcodec.Amino) +} + +// RegisterLegacyAminoCodec registers concrete types on the LegacyAmino codec +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(Params{}, "dummyware/Params", nil) + legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "dummyware/MsgUpdateParams") +} + +func RegisterInterfaces(registry types.InterfaceRegistry) { + registry.RegisterImplementations( + (*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go new file mode 100644 index 00000000..97575175 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go @@ -0,0 +1,39 @@ +package types + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + + "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" +) + +// TransferKeeper defines the expected transfer keeper +type TransferKeeper interface { + Transfer(ctx context.Context, msg *types.MsgTransfer) (*types.MsgTransferResponse, error) + DenomPathFromHash(ctx sdk.Context, denom string) (string, error) + GetTotalEscrowForDenom(ctx sdk.Context, denom string) sdk.Coin + SetTotalEscrowForDenom(ctx sdk.Context, coin sdk.Coin) +} + +// ChannelKeeper defines the expected IBC channel keeper +type ChannelKeeper interface { + GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) + GetPacketCommitment(ctx sdk.Context, portID, channelID string, sequence uint64) []byte + GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) + LookupModuleByChannel(ctx sdk.Context, portID, channelID string) (string, *capabilitytypes.Capability, error) +} + +// DistributionKeeper defines the expected distribution keeper +type DistributionKeeper interface { + FundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk.AccAddress) error +} + +// BankKeeper defines the expected bank keeper +type BankKeeper interface { + SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/forward.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/forward.go new file mode 100644 index 00000000..e9010390 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/forward.go @@ -0,0 +1,117 @@ +package types + +import ( + "encoding/json" + "errors" + "fmt" + "time" + + "github.com/iancoleman/orderedmap" + + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" +) + +type PacketMetadata struct { + Forward *ForwardMetadata `json:"forward"` +} + +type ForwardMetadata struct { + Receiver string `json:"receiver,omitempty"` + Port string `json:"port,omitempty"` + Channel string `json:"channel,omitempty"` + Timeout Duration `json:"timeout,omitempty"` + Retries *uint8 `json:"retries,omitempty"` + + // Using JSONObject so that objects for next property will not be mutated by golang's lexicographic key sort on map keys during Marshal. + // Supports primitives for Unmarshal/Marshal so that an escaped JSON-marshaled string is also valid. + Next *JSONObject `json:"next,omitempty"` +} + +type Duration time.Duration + +func (m *ForwardMetadata) Validate() error { + if m.Receiver == "" { + return fmt.Errorf("failed to validate metadata. receiver cannot be empty") + } + if err := host.PortIdentifierValidator(m.Port); err != nil { + return fmt.Errorf("failed to validate metadata: %w", err) + } + if err := host.ChannelIdentifierValidator(m.Channel); err != nil { + return fmt.Errorf("failed to validate metadata: %w", err) + } + + return nil +} + +// JSONObject is a wrapper type to allow either a primitive type or a JSON object. +// In the case the value is a JSON object, OrderedMap type is used so that key order +// is retained across Unmarshal/Marshal. +type JSONObject struct { + obj bool + primitive []byte + orderedMap orderedmap.OrderedMap +} + +// NewJSONObject is a constructor used for tests. +// The usage of JSONObject in the middleware is only json Marshal/Unmarshal +func NewJSONObject(object bool, primitive []byte, orderedMap orderedmap.OrderedMap) *JSONObject { + return &JSONObject{ + obj: object, + primitive: primitive, + orderedMap: orderedMap, + } +} + +// UnmarshalJSON overrides the default json.Unmarshal behavior +func (o *JSONObject) UnmarshalJSON(b []byte) error { + if err := o.orderedMap.UnmarshalJSON(b); err != nil { + // If ordered map unmarshal fails, this is a primitive value + o.obj = false + // Attempt to unmarshal as string, this removes extra JSON escaping + var primitiveStr string + if err := json.Unmarshal(b, &primitiveStr); err != nil { + o.primitive = b + return nil + } + o.primitive = []byte(primitiveStr) + return nil + } + // This is a JSON object, now stored as an ordered map to retain key order. + o.obj = true + return nil +} + +// MarshalJSON overrides the default json.Marshal behavior +func (o JSONObject) MarshalJSON() ([]byte, error) { + if o.obj { + // non-primitive, return marshaled ordered map. + return o.orderedMap.MarshalJSON() + } + // primitive, return raw bytes. + return o.primitive, nil +} + +func (d Duration) MarshalJSON() ([]byte, error) { + return json.Marshal(time.Duration(d).Nanoseconds()) +} + +func (d *Duration) UnmarshalJSON(b []byte) error { + var v interface{} + if err := json.Unmarshal(b, &v); err != nil { + return err + } + switch value := v.(type) { + case float64: + *d = Duration(time.Duration(value)) + return nil + case string: + tmp, err := time.ParseDuration(value) + if err != nil { + return err + } + *d = Duration(tmp) + return nil + default: + return errors.New("invalid duration") + } +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go new file mode 100644 index 00000000..a6f39848 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go @@ -0,0 +1,22 @@ +package types + +// NewGenesisState creates a pfm GenesisState instance. +func NewGenesisState(params Params, inFlightPackets map[string]InFlightPacket) *GenesisState { + return &GenesisState{ + Params: params, + InFlightPackets: inFlightPackets, + } +} + +// DefaultGenesisState returns a GenesisState with a default fee percentage of 0. +func DefaultGenesisState() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + InFlightPackets: make(map[string]InFlightPacket), + } +} + +// Validate performs basic genesis state validation returning an error upon any failure. +func (gs GenesisState) Validate() error { + return gs.Params.Validate() +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.pb.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.pb.go new file mode 100644 index 00000000..7e9e7f07 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.pb.go @@ -0,0 +1,1302 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: dummyware/v1/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the packetforward genesis state +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + // key - information about forwarded packet: src_channel + // (parsedReceiver.Channel), src_port (parsedReceiver.Port), sequence value - + // information about original packet for refunding if necessary: retries, + // srcPacketSender, srcPacket.DestinationChannel, srcPacket.DestinationPort + InFlightPackets map[string]InFlightPacket `protobuf:"bytes,2,rep,name=in_flight_packets,json=inFlightPackets,proto3" json:"in_flight_packets" yaml:"in_flight_packets" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_5e57ced72fbee3ae, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.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 *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetInFlightPackets() map[string]InFlightPacket { + if m != nil { + return m.InFlightPackets + } + return nil +} + +// Params defines the set of packetforward parameters. +type Params struct { +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_5e57ced72fbee3ae, []int{1} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +// InFlightPacket contains information about original packet for +// writing the acknowledgement and refunding if necessary. +type InFlightPacket struct { + OriginalSenderAddress string `protobuf:"bytes,1,opt,name=original_sender_address,json=originalSenderAddress,proto3" json:"original_sender_address,omitempty"` + RefundChannelId string `protobuf:"bytes,2,opt,name=refund_channel_id,json=refundChannelId,proto3" json:"refund_channel_id,omitempty"` + RefundPortId string `protobuf:"bytes,3,opt,name=refund_port_id,json=refundPortId,proto3" json:"refund_port_id,omitempty"` + PacketSrcChannelId string `protobuf:"bytes,4,opt,name=packet_src_channel_id,json=packetSrcChannelId,proto3" json:"packet_src_channel_id,omitempty"` + PacketSrcPortId string `protobuf:"bytes,5,opt,name=packet_src_port_id,json=packetSrcPortId,proto3" json:"packet_src_port_id,omitempty"` + PacketTimeoutTimestamp uint64 `protobuf:"varint,6,opt,name=packet_timeout_timestamp,json=packetTimeoutTimestamp,proto3" json:"packet_timeout_timestamp,omitempty"` + PacketTimeoutHeight string `protobuf:"bytes,7,opt,name=packet_timeout_height,json=packetTimeoutHeight,proto3" json:"packet_timeout_height,omitempty"` + PacketData []byte `protobuf:"bytes,8,opt,name=packet_data,json=packetData,proto3" json:"packet_data,omitempty"` + RefundSequence uint64 `protobuf:"varint,9,opt,name=refund_sequence,json=refundSequence,proto3" json:"refund_sequence,omitempty"` + RetriesRemaining int32 `protobuf:"varint,10,opt,name=retries_remaining,json=retriesRemaining,proto3" json:"retries_remaining,omitempty"` + Timeout uint64 `protobuf:"varint,11,opt,name=timeout,proto3" json:"timeout,omitempty"` + Nonrefundable bool `protobuf:"varint,12,opt,name=nonrefundable,proto3" json:"nonrefundable,omitempty"` +} + +func (m *InFlightPacket) Reset() { *m = InFlightPacket{} } +func (m *InFlightPacket) String() string { return proto.CompactTextString(m) } +func (*InFlightPacket) ProtoMessage() {} +func (*InFlightPacket) Descriptor() ([]byte, []int) { + return fileDescriptor_5e57ced72fbee3ae, []int{2} +} +func (m *InFlightPacket) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *InFlightPacket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_InFlightPacket.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 *InFlightPacket) XXX_Merge(src proto.Message) { + xxx_messageInfo_InFlightPacket.Merge(m, src) +} +func (m *InFlightPacket) XXX_Size() int { + return m.Size() +} +func (m *InFlightPacket) XXX_DiscardUnknown() { + xxx_messageInfo_InFlightPacket.DiscardUnknown(m) +} + +var xxx_messageInfo_InFlightPacket proto.InternalMessageInfo + +func (m *InFlightPacket) GetOriginalSenderAddress() string { + if m != nil { + return m.OriginalSenderAddress + } + return "" +} + +func (m *InFlightPacket) GetRefundChannelId() string { + if m != nil { + return m.RefundChannelId + } + return "" +} + +func (m *InFlightPacket) GetRefundPortId() string { + if m != nil { + return m.RefundPortId + } + return "" +} + +func (m *InFlightPacket) GetPacketSrcChannelId() string { + if m != nil { + return m.PacketSrcChannelId + } + return "" +} + +func (m *InFlightPacket) GetPacketSrcPortId() string { + if m != nil { + return m.PacketSrcPortId + } + return "" +} + +func (m *InFlightPacket) GetPacketTimeoutTimestamp() uint64 { + if m != nil { + return m.PacketTimeoutTimestamp + } + return 0 +} + +func (m *InFlightPacket) GetPacketTimeoutHeight() string { + if m != nil { + return m.PacketTimeoutHeight + } + return "" +} + +func (m *InFlightPacket) GetPacketData() []byte { + if m != nil { + return m.PacketData + } + return nil +} + +func (m *InFlightPacket) GetRefundSequence() uint64 { + if m != nil { + return m.RefundSequence + } + return 0 +} + +func (m *InFlightPacket) GetRetriesRemaining() int32 { + if m != nil { + return m.RetriesRemaining + } + return 0 +} + +func (m *InFlightPacket) GetTimeout() uint64 { + if m != nil { + return m.Timeout + } + return 0 +} + +func (m *InFlightPacket) GetNonrefundable() bool { + if m != nil { + return m.Nonrefundable + } + return false +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "dummyware.v1.GenesisState") + proto.RegisterMapType((map[string]InFlightPacket)(nil), "dummyware.v1.GenesisState.InFlightPacketsEntry") + proto.RegisterType((*Params)(nil), "dummyware.v1.Params") + proto.RegisterType((*InFlightPacket)(nil), "dummyware.v1.InFlightPacket") +} + +func init() { proto.RegisterFile("dummyware/v1/genesis.proto", fileDescriptor_5e57ced72fbee3ae) } + +var fileDescriptor_5e57ced72fbee3ae = []byte{ + // 604 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x93, 0x4f, 0x4f, 0xdb, 0x30, + 0x18, 0xc6, 0x9b, 0x52, 0x0a, 0xb8, 0x1d, 0x7f, 0x3c, 0xd8, 0x2c, 0x34, 0x95, 0xa8, 0x42, 0x5a, + 0x35, 0x44, 0x23, 0x3a, 0x69, 0x43, 0xdc, 0xc6, 0xfe, 0x72, 0x43, 0x29, 0xa7, 0x5d, 0x32, 0x37, + 0x36, 0xa9, 0x45, 0x62, 0x67, 0xb6, 0x53, 0xd6, 0x03, 0xdf, 0x61, 0xdf, 0x60, 0x87, 0x7d, 0x19, + 0x8e, 0x1c, 0x77, 0x42, 0x13, 0x7c, 0x83, 0x7d, 0x82, 0x29, 0x76, 0x52, 0x1a, 0x6d, 0xa7, 0x38, + 0xef, 0xef, 0x79, 0x1e, 0xbf, 0xef, 0x2b, 0x19, 0x6c, 0x93, 0x2c, 0x49, 0xa6, 0x97, 0x58, 0x52, + 0x6f, 0x72, 0xe0, 0x45, 0x94, 0x53, 0xc5, 0x54, 0x3f, 0x95, 0x42, 0x0b, 0xd8, 0x9e, 0xb1, 0xfe, + 0xe4, 0x60, 0x7b, 0x33, 0x12, 0x91, 0x30, 0xc0, 0xcb, 0x4f, 0x56, 0xd3, 0xfd, 0x59, 0x07, 0xed, + 0x8f, 0xd6, 0x35, 0xd4, 0x58, 0x53, 0x38, 0x00, 0xcd, 0x14, 0x4b, 0x9c, 0x28, 0xe4, 0xb8, 0x4e, + 0xaf, 0x35, 0xd8, 0xec, 0xcf, 0xa7, 0xf4, 0x4f, 0x0d, 0x3b, 0x6e, 0x5c, 0xdf, 0xee, 0xd4, 0xfc, + 0x42, 0x09, 0xaf, 0xc0, 0x06, 0xe3, 0xc1, 0x79, 0xcc, 0xa2, 0xb1, 0x0e, 0x52, 0x1c, 0x5e, 0x50, + 0xad, 0x50, 0xdd, 0x5d, 0xe8, 0xb5, 0x06, 0x5e, 0xd5, 0x3e, 0x7f, 0x55, 0xff, 0x84, 0x7f, 0x30, + 0x96, 0x53, 0xeb, 0x78, 0xcf, 0xb5, 0x9c, 0x1e, 0xbb, 0x79, 0xf2, 0x9f, 0xdb, 0x1d, 0x34, 0xc5, + 0x49, 0x7c, 0xd4, 0xfd, 0x27, 0xb7, 0xeb, 0xaf, 0xb1, 0xaa, 0x6f, 0xfb, 0x0b, 0xd8, 0xfc, 0x5f, + 0x14, 0x5c, 0x07, 0x0b, 0x17, 0x74, 0x6a, 0xe6, 0x58, 0xf1, 0xf3, 0x23, 0x1c, 0x80, 0xc5, 0x09, + 0x8e, 0x33, 0x8a, 0xea, 0x66, 0xb6, 0x67, 0xd5, 0xe6, 0xaa, 0x21, 0xbe, 0x95, 0x1e, 0xd5, 0x0f, + 0x9d, 0xee, 0x32, 0x68, 0xda, 0xc1, 0xbb, 0x3f, 0x1a, 0x60, 0xb5, 0xaa, 0x83, 0xaf, 0xc0, 0x53, + 0x21, 0x59, 0xc4, 0x38, 0x8e, 0x03, 0x45, 0x39, 0xa1, 0x32, 0xc0, 0x84, 0x48, 0xaa, 0x54, 0x71, + 0xf5, 0x56, 0x89, 0x87, 0x86, 0xbe, 0xb1, 0x10, 0xbe, 0x00, 0x1b, 0x92, 0x9e, 0x67, 0x9c, 0x04, + 0xe1, 0x18, 0x73, 0x4e, 0xe3, 0x80, 0x11, 0xd3, 0xd8, 0x8a, 0xbf, 0x66, 0xc1, 0x5b, 0x5b, 0x3f, + 0x21, 0x70, 0x17, 0xac, 0x16, 0xda, 0x54, 0x48, 0x9d, 0x0b, 0x17, 0x8c, 0xb0, 0x6d, 0xab, 0xa7, + 0x42, 0xea, 0x13, 0x02, 0x0f, 0xc0, 0x96, 0xdd, 0x52, 0xa0, 0x64, 0x38, 0x9f, 0xda, 0x30, 0x62, + 0x68, 0xe1, 0x50, 0x86, 0x0f, 0xc1, 0x7b, 0x00, 0xce, 0x59, 0xca, 0xf0, 0x45, 0xdb, 0xc5, 0x4c, + 0x5f, 0xe4, 0x1f, 0x02, 0x54, 0x88, 0x35, 0x4b, 0xa8, 0xc8, 0xec, 0x57, 0x69, 0x9c, 0xa4, 0xa8, + 0xe9, 0x3a, 0xbd, 0x86, 0xff, 0xc4, 0xf2, 0x33, 0x8b, 0xcf, 0x4a, 0x0a, 0x07, 0xb3, 0xce, 0x4a, + 0xe7, 0x98, 0xe6, 0x2b, 0x44, 0x4b, 0xe6, 0xa6, 0xc7, 0x15, 0xdb, 0x27, 0x83, 0xe0, 0x0e, 0x68, + 0x15, 0x1e, 0x82, 0x35, 0x46, 0xcb, 0xae, 0xd3, 0x6b, 0xfb, 0xc0, 0x96, 0xde, 0x61, 0x8d, 0xe1, + 0x73, 0x50, 0xec, 0x29, 0x50, 0xf4, 0x6b, 0x46, 0x79, 0x48, 0xd1, 0x8a, 0xe9, 0xa2, 0xd8, 0xd5, + 0xb0, 0xa8, 0xc2, 0xbd, 0x7c, 0xd3, 0x5a, 0x32, 0xaa, 0x02, 0x49, 0x13, 0xcc, 0x38, 0xe3, 0x11, + 0x02, 0xae, 0xd3, 0x5b, 0xf4, 0xd7, 0x0b, 0xe0, 0x97, 0x75, 0x88, 0xc0, 0x52, 0xd1, 0x23, 0x6a, + 0x99, 0xb4, 0xf2, 0x17, 0xee, 0x82, 0x47, 0x5c, 0x70, 0x9b, 0x8d, 0x47, 0x31, 0x45, 0x6d, 0xd7, + 0xe9, 0x2d, 0xfb, 0xd5, 0xe2, 0xf1, 0xd5, 0xf5, 0x5d, 0xc7, 0xb9, 0xb9, 0xeb, 0x38, 0xbf, 0xef, + 0x3a, 0xce, 0xf7, 0xfb, 0x4e, 0xed, 0xe6, 0xbe, 0x53, 0xfb, 0x75, 0xdf, 0xa9, 0x7d, 0x0e, 0x23, + 0xa6, 0xc7, 0xd9, 0xa8, 0x1f, 0x8a, 0xc4, 0x0b, 0x85, 0x4a, 0x84, 0xf2, 0xd8, 0x28, 0xdc, 0xc7, + 0x69, 0xaa, 0xbc, 0x84, 0x11, 0x12, 0x53, 0xf3, 0x8e, 0xed, 0x84, 0xfb, 0xe7, 0x42, 0x5e, 0x62, + 0x49, 0xf6, 0xe7, 0xc8, 0xe4, 0xb5, 0xa7, 0xa9, 0xd2, 0x8c, 0x47, 0x9e, 0x62, 0x09, 0x4e, 0x53, + 0xef, 0x9b, 0xf7, 0xf0, 0xfe, 0xf5, 0x34, 0xa5, 0x6a, 0xd4, 0x34, 0xef, 0xfa, 0xe5, 0xdf, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xe1, 0x8f, 0x4d, 0xad, 0x19, 0x04, 0x00, 0x00, +} + +func (m *GenesisState) 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 *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.InFlightPackets) > 0 { + for k := range m.InFlightPackets { + v := m.InFlightPackets[k] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(k) + copy(dAtA[i:], k) + i = encodeVarintGenesis(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenesis(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Params.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 (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *InFlightPacket) 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 *InFlightPacket) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *InFlightPacket) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Nonrefundable { + i-- + if m.Nonrefundable { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x60 + } + if m.Timeout != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Timeout)) + i-- + dAtA[i] = 0x58 + } + if m.RetriesRemaining != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.RetriesRemaining)) + i-- + dAtA[i] = 0x50 + } + if m.RefundSequence != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.RefundSequence)) + i-- + dAtA[i] = 0x48 + } + if len(m.PacketData) > 0 { + i -= len(m.PacketData) + copy(dAtA[i:], m.PacketData) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PacketData))) + i-- + dAtA[i] = 0x42 + } + if len(m.PacketTimeoutHeight) > 0 { + i -= len(m.PacketTimeoutHeight) + copy(dAtA[i:], m.PacketTimeoutHeight) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PacketTimeoutHeight))) + i-- + dAtA[i] = 0x3a + } + if m.PacketTimeoutTimestamp != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.PacketTimeoutTimestamp)) + i-- + dAtA[i] = 0x30 + } + if len(m.PacketSrcPortId) > 0 { + i -= len(m.PacketSrcPortId) + copy(dAtA[i:], m.PacketSrcPortId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PacketSrcPortId))) + i-- + dAtA[i] = 0x2a + } + if len(m.PacketSrcChannelId) > 0 { + i -= len(m.PacketSrcChannelId) + copy(dAtA[i:], m.PacketSrcChannelId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PacketSrcChannelId))) + i-- + dAtA[i] = 0x22 + } + if len(m.RefundPortId) > 0 { + i -= len(m.RefundPortId) + copy(dAtA[i:], m.RefundPortId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.RefundPortId))) + i-- + dAtA[i] = 0x1a + } + if len(m.RefundChannelId) > 0 { + i -= len(m.RefundChannelId) + copy(dAtA[i:], m.RefundChannelId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.RefundChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.OriginalSenderAddress) > 0 { + i -= len(m.OriginalSenderAddress) + copy(dAtA[i:], m.OriginalSenderAddress) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.OriginalSenderAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.InFlightPackets) > 0 { + for k, v := range m.InFlightPackets { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenesis(uint64(len(k))) + 1 + l + sovGenesis(uint64(l)) + n += mapEntrySize + 1 + sovGenesis(uint64(mapEntrySize)) + } + } + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *InFlightPacket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OriginalSenderAddress) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.RefundChannelId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.RefundPortId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.PacketSrcChannelId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.PacketSrcPortId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.PacketTimeoutTimestamp != 0 { + n += 1 + sovGenesis(uint64(m.PacketTimeoutTimestamp)) + } + l = len(m.PacketTimeoutHeight) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.PacketData) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.RefundSequence != 0 { + n += 1 + sovGenesis(uint64(m.RefundSequence)) + } + if m.RetriesRemaining != 0 { + n += 1 + sovGenesis(uint64(m.RetriesRemaining)) + } + if m.Timeout != 0 { + n += 1 + sovGenesis(uint64(m.Timeout)) + } + if m.Nonrefundable { + n += 2 + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) 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: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", 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.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InFlightPackets", 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 m.InFlightPackets == nil { + m.InFlightPackets = make(map[string]InFlightPacket) + } + var mapkey string + mapvalue := &InFlightPacket{} + for iNdEx < postIndex { + entryPreIndex := 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) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenesis + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenesis + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenesis + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenesis + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &InFlightPacket{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.InFlightPackets[mapkey] = *mapvalue + 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 *Params) 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: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + 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 *InFlightPacket) 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: InFlightPacket: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: InFlightPacket: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OriginalSenderAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OriginalSenderAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RefundChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RefundChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RefundPortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RefundPortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketSrcChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PacketSrcChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketSrcPortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PacketSrcPortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketTimeoutTimestamp", wireType) + } + m.PacketTimeoutTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PacketTimeoutTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketTimeoutHeight", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PacketTimeoutHeight = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketData", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PacketData = append(m.PacketData[:0], dAtA[iNdEx:postIndex]...) + if m.PacketData == nil { + m.PacketData = []byte{} + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RefundSequence", wireType) + } + m.RefundSequence = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RefundSequence |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RetriesRemaining", wireType) + } + m.RetriesRemaining = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RetriesRemaining |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) + } + m.Timeout = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timeout |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Nonrefundable", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Nonrefundable = bool(v != 0) + 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 skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go new file mode 100644 index 00000000..cbd3b02c --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go @@ -0,0 +1,29 @@ +package types + +import fmt "fmt" + +const ( + // ModuleName defines the module name + ModuleName = "dummyware" + + // StoreKey is the store key string for IBC transfer + StoreKey = ModuleName + + // RouterKey is the message route for IBC transfer + RouterKey = ModuleName + + // QuerierRoute is the querier route for IBC transfer + QuerierRoute = ModuleName +) + +var ParamsKey = []byte{0x00} + +type ( + NonrefundableKey struct{} + DisableDenomCompositionKey struct{} + ProcessedKey struct{} +) + +func RefundPacketKey(channelID, portID string, sequence uint64) []byte { + return []byte(fmt.Sprintf("%s/%s/%d", channelID, portID, sequence)) +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/msgs.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/msgs.go new file mode 100644 index 00000000..e0ce8a24 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/msgs.go @@ -0,0 +1,29 @@ +package types + +import ( + "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var _ sdk.Msg = &MsgUpdateParams{} + +// GetSignBytes implements the LegacyMsg interface. +func (m MsgUpdateParams) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) +} + +// GetSigners returns the expected signers for a MsgUpdateParams message. +func (m *MsgUpdateParams) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(m.Authority) + return []sdk.AccAddress{addr} +} + +// ValidateBasic does a sanity check on the provided data. +func (m *MsgUpdateParams) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { + return errors.Wrap(err, "invalid authority address") + } + + return m.Params.Validate() +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go new file mode 100644 index 00000000..64af85cb --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go @@ -0,0 +1,23 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// DefaultFeePercentage is the default value used to extract a fee from all forwarded packets. +var DefaultFeePercentage = sdk.NewDec(0) + +// NewParams creates a new parameter configuration for the pfm module. +func NewParams(feePercentage sdk.Dec) Params { + return Params{} +} + +// DefaultParams is the default parameter configuration for the pfm module. +func DefaultParams() Params { + return NewParams(DefaultFeePercentage) +} + +// Validate the pfm module parameters. +func (p Params) Validate() error { + return nil +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go new file mode 100644 index 00000000..8ff5d017 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go @@ -0,0 +1,23 @@ +/* +NOTE: Usage of x/params to manage parameters is deprecated in favor of x/gov +controlled execution of MsgUpdateParams messages. These types remains solely +for migration purposes and will be removed in a future release. +*/ +package types + +import ( + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +// KeyFeePercentage is store's key for FeePercentage Params +var KeyFeePercentage = []byte("FeePercentage") + +// ParamKeyTable type declaration for parameters. +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// ParamSetPairs implements params.ParamSet. +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{} +} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.go new file mode 100644 index 00000000..097c9899 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.go @@ -0,0 +1,542 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: dummyware/v1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryParamsRequest is the request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a5ca4900db76f35a, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.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 *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is the response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params defines the parameters of the module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a5ca4900db76f35a, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.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 *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() *Params { + if m != nil { + return m.Params + } + return nil +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "dummyware.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "dummyware.v1.QueryParamsResponse") +} + +func init() { proto.RegisterFile("dummyware/v1/query.proto", fileDescriptor_a5ca4900db76f35a) } + +var fileDescriptor_a5ca4900db76f35a = []byte{ + // 300 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xbf, 0x4e, 0xc3, 0x30, + 0x10, 0xc6, 0x1b, 0x24, 0x3a, 0x18, 0x26, 0xd3, 0xa1, 0x8a, 0xc0, 0x94, 0x4a, 0x48, 0x0c, 0x34, + 0x56, 0xcb, 0xc0, 0x0e, 0x2f, 0x00, 0x8c, 0x6c, 0x6e, 0x72, 0x04, 0x8b, 0xfa, 0x4f, 0x7d, 0x4e, + 0x4b, 0x87, 0x2e, 0x3c, 0x01, 0x12, 0x2f, 0xc5, 0x58, 0x89, 0x85, 0x11, 0x25, 0x3c, 0x08, 0x6a, + 0x12, 0xa1, 0x44, 0x48, 0xac, 0xf7, 0xfd, 0xfc, 0xbb, 0xcf, 0x47, 0xfa, 0x49, 0xa6, 0xd4, 0x6a, + 0x29, 0x1c, 0xf0, 0xc5, 0x98, 0xcf, 0x33, 0x70, 0xab, 0xc8, 0x3a, 0xe3, 0x0d, 0xdd, 0xff, 0x4d, + 0xa2, 0xc5, 0x38, 0x3c, 0x4c, 0x8d, 0x49, 0x67, 0xc0, 0x85, 0x95, 0x5c, 0x68, 0x6d, 0xbc, 0xf0, + 0xd2, 0x68, 0xac, 0xd8, 0x30, 0x6c, 0x59, 0x52, 0xd0, 0x80, 0xb2, 0xce, 0x86, 0x3d, 0x42, 0x6f, + 0xb7, 0xda, 0x1b, 0xe1, 0x84, 0xc2, 0x3b, 0x98, 0x67, 0x80, 0x7e, 0x78, 0x4d, 0x0e, 0x5a, 0x53, + 0xb4, 0x46, 0x23, 0xd0, 0x73, 0xd2, 0xb5, 0xe5, 0xa4, 0x1f, 0x0c, 0x82, 0xb3, 0xbd, 0x49, 0x2f, + 0x6a, 0xb6, 0x88, 0x6a, 0xba, 0x66, 0x26, 0x6b, 0xb2, 0x5b, 0x4a, 0xa8, 0x27, 0xdd, 0x2a, 0xa2, + 0x83, 0xf6, 0x83, 0xbf, 0x9b, 0xc3, 0x93, 0x7f, 0x88, 0xaa, 0xc5, 0xf0, 0xf4, 0xe5, 0xe3, 0xfb, + 0x6d, 0xe7, 0x98, 0x1e, 0x71, 0x39, 0x8d, 0xb9, 0xb0, 0x16, 0x79, 0xeb, 0x83, 0xd5, 0xfa, 0xab, + 0xf5, 0x7b, 0xce, 0x82, 0x4d, 0xce, 0x82, 0xaf, 0x9c, 0x05, 0xaf, 0x05, 0xeb, 0x6c, 0x0a, 0xd6, + 0xf9, 0x2c, 0x58, 0xe7, 0x3e, 0x4e, 0xa5, 0x7f, 0xcc, 0xa6, 0x51, 0x6c, 0x14, 0x8f, 0x0d, 0x2a, + 0x83, 0x5b, 0xd3, 0xa8, 0x34, 0x29, 0x99, 0x24, 0x33, 0x28, 0x55, 0x56, 0xc4, 0x4f, 0xe0, 0x47, + 0x0f, 0xc6, 0x2d, 0x85, 0x4b, 0x46, 0x8d, 0x64, 0x71, 0xc9, 0x3d, 0xa0, 0x97, 0x3a, 0xe5, 0x28, + 0x95, 0xb0, 0x96, 0x3f, 0x37, 0x2a, 0xf8, 0x95, 0x05, 0x9c, 0x76, 0xcb, 0xfb, 0x5e, 0xfc, 0x04, + 0x00, 0x00, 0xff, 0xff, 0xce, 0x5c, 0x9d, 0x0c, 0xc3, 0x01, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Params queries all parameters of the packetforward module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/dummyware.v1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Params queries all parameters of the packetforward module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dummyware.v1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "dummyware.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "dummyware/v1/query.proto", +} + +func (m *QueryParamsRequest) 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 *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) 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 *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Params != nil { + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Params != nil { + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) 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 ErrIntOverflowQuery + } + 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: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) 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 ErrIntOverflowQuery + } + 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: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Params == nil { + m.Params = &Params{} + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.gw.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.gw.go new file mode 100644 index 00000000..9d7d84f0 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: dummyware/v1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ibc", "apps", "dummyware", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage +) diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/tx.pb.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/tx.pb.go new file mode 100644 index 00000000..98929557 --- /dev/null +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/tx.pb.go @@ -0,0 +1,606 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: dummyware/v1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +type MsgUpdateParams struct { + // authority is the address of the governance account. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // params defines the x/packetforward parameters to update. + // + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_c548eea5d504be9d, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.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 *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_c548eea5d504be9d, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.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 *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgUpdateParams)(nil), "dummyware.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "dummyware.v1.MsgUpdateParamsResponse") +} + +func init() { proto.RegisterFile("dummyware/v1/tx.proto", fileDescriptor_c548eea5d504be9d) } + +var fileDescriptor_c548eea5d504be9d = []byte{ + // 358 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xcf, 0x4a, 0x2b, 0x31, + 0x14, 0xc6, 0x67, 0xee, 0xbd, 0x14, 0x3a, 0xb7, 0xdc, 0x0b, 0x43, 0xa5, 0xed, 0x80, 0x63, 0x29, + 0x08, 0x45, 0x98, 0x09, 0xad, 0xa0, 0xe0, 0xce, 0xee, 0x0b, 0x52, 0x75, 0xa3, 0x0b, 0x49, 0x27, + 0x31, 0x0d, 0x9a, 0x49, 0xc8, 0x49, 0xff, 0x2d, 0xdc, 0xb8, 0x17, 0x7c, 0x14, 0x17, 0x3e, 0x44, + 0x97, 0xc5, 0x95, 0x2b, 0x91, 0x76, 0xe1, 0x6b, 0x48, 0x67, 0x46, 0xfb, 0x67, 0xe1, 0xee, 0xe4, + 0x7c, 0xdf, 0xf9, 0xe5, 0x24, 0x9f, 0xb3, 0x45, 0xfa, 0x42, 0x8c, 0x87, 0x58, 0x53, 0x34, 0x68, + 0x20, 0x33, 0x0a, 0x95, 0x96, 0x46, 0xba, 0x85, 0xef, 0x76, 0x38, 0x68, 0x78, 0xa5, 0x48, 0x82, + 0x90, 0x80, 0x04, 0xb0, 0x85, 0x4b, 0x00, 0x4b, 0x6d, 0x9e, 0xb7, 0x36, 0xcd, 0x68, 0x4c, 0x81, + 0x43, 0xa6, 0x15, 0x99, 0x64, 0x32, 0x29, 0xd1, 0xa2, 0xca, 0xba, 0x95, 0x14, 0x75, 0x95, 0x0a, + 0xe9, 0x21, 0x95, 0x6a, 0x0f, 0xb6, 0xf3, 0xbf, 0x0d, 0xec, 0x5c, 0x11, 0x6c, 0xe8, 0x09, 0xd6, + 0x58, 0x80, 0x7b, 0xe0, 0xe4, 0x71, 0xdf, 0xf4, 0xa4, 0xe6, 0x66, 0x5c, 0xb6, 0xab, 0x76, 0x3d, + 0xdf, 0x2a, 0xbf, 0x3c, 0x07, 0xc5, 0x6c, 0xf0, 0x98, 0x10, 0x4d, 0x01, 0x4e, 0x8d, 0xe6, 0x31, + 0xeb, 0x2c, 0xad, 0x6e, 0xd3, 0xc9, 0xa9, 0x84, 0x50, 0xfe, 0x55, 0xb5, 0xeb, 0x7f, 0x9b, 0xc5, + 0x70, 0xf5, 0x41, 0x61, 0x4a, 0x6f, 0xfd, 0x99, 0xbc, 0xed, 0x58, 0x9d, 0xcc, 0x79, 0xf4, 0xef, + 0xfe, 0xe3, 0x69, 0x6f, 0xc9, 0xa8, 0x55, 0x9c, 0xd2, 0xc6, 0x3a, 0x1d, 0x0a, 0x4a, 0xc6, 0x40, + 0x9b, 0x97, 0xce, 0xef, 0x36, 0x30, 0xf7, 0xcc, 0x29, 0xac, 0x6d, 0xbb, 0xbd, 0x7e, 0xcb, 0xc6, + 0xb4, 0xb7, 0xfb, 0xa3, 0xfc, 0x05, 0x6f, 0xdd, 0x4d, 0x66, 0xbe, 0x3d, 0x9d, 0xf9, 0xf6, 0xfb, + 0xcc, 0xb7, 0x1f, 0xe7, 0xbe, 0x35, 0x9d, 0xfb, 0xd6, 0xeb, 0xdc, 0xb7, 0x2e, 0x22, 0xc6, 0x4d, + 0xaf, 0xdf, 0x0d, 0x23, 0x29, 0xb2, 0xaf, 0x43, 0xbc, 0x1b, 0x05, 0x58, 0x29, 0x40, 0x82, 0x13, + 0x72, 0x4b, 0x93, 0x28, 0x14, 0x8e, 0x6e, 0xa8, 0x09, 0xae, 0xa5, 0x1e, 0x62, 0x4d, 0x82, 0x15, + 0x65, 0x70, 0x88, 0x0c, 0x05, 0xc3, 0x63, 0x86, 0x80, 0x0b, 0xac, 0x14, 0x1a, 0xa1, 0x65, 0x84, + 0x66, 0xac, 0x28, 0x74, 0x73, 0x49, 0x1a, 0xfb, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8c, 0xa9, + 0x34, 0x10, 0x1a, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a governance operation for updating the x/packetforward module + // parameters. The authority is hard-coded to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/dummyware.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // UpdateParams defines a governance operation for updating the x/packetforward module + // parameters. The authority is hard-coded to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dummyware.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "dummyware.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "dummyware/v1/tx.proto", +} + +func (m *MsgUpdateParams) 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 *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) 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 *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgUpdateParams) 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 ErrIntOverflowTx + } + 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: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", 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.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) 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 ErrIntOverflowTx + } + 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: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) From ad825519617d0e64e9fd1171954aa7689413dc8f Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Mon, 20 Nov 2023 11:29:28 -0600 Subject: [PATCH 02/10] rm unused --- .../testing/simapp/app.go | 3 -- .../simapp/x/dummyware/ibc_middleware.go | 4 +- .../simapp/x/dummyware/keeper/keeper.go | 48 ------------------- .../simapp/x/dummyware/keeper/msg_server.go | 8 +--- 4 files changed, 3 insertions(+), 60 deletions(-) diff --git a/middleware/packet-forward-middleware/testing/simapp/app.go b/middleware/packet-forward-middleware/testing/simapp/app.go index 832cb5ed..eb2fea83 100644 --- a/middleware/packet-forward-middleware/testing/simapp/app.go +++ b/middleware/packet-forward-middleware/testing/simapp/app.go @@ -444,10 +444,7 @@ func NewSimApp( app.keys[dummywaretypes.StoreKey], nil, app.IBCKeeper.ChannelKeeper, - app.DistrKeeper, - app.BankKeeper, app.IBCKeeper.ChannelKeeper, - authority, ) // Packet Forward Middleware Keeper diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go index f6a110b5..44d5af07 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go @@ -3,12 +3,12 @@ package packetforward import ( "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/keeper" + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - errorsmod "cosmossdk.io/errors" - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go index cdc5d8ee..fd47b72b 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go @@ -1,8 +1,6 @@ package keeper import ( - "time" - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" errorsmod "cosmossdk.io/errors" @@ -21,20 +19,6 @@ import ( ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ) -var ( - // DefaultTransferPacketTimeoutHeight is the timeout height following IBC defaults - DefaultTransferPacketTimeoutHeight = clienttypes.Height{ - RevisionNumber: 0, - RevisionHeight: 0, - } - - // DefaultForwardTransferPacketTimeoutTimestamp is the timeout timestamp following IBC defaults - DefaultForwardTransferPacketTimeoutTimestamp = time.Duration(transfertypes.DefaultRelativePacketTimeoutTimestamp) * time.Nanosecond - - // DefaultRefundTransferPacketTimeoutTimestamp is a 28-day timeout for refund packets since funds are stuck in packetforward module otherwise. - DefaultRefundTransferPacketTimeoutTimestamp = 28 * 24 * time.Hour -) - // Keeper defines the packet forward middleware keeper type Keeper struct { cdc codec.BinaryCodec @@ -42,13 +26,7 @@ type Keeper struct { transferKeeper types.TransferKeeper channelKeeper types.ChannelKeeper - distrKeeper types.DistributionKeeper - bankKeeper types.BankKeeper ics4Wrapper porttypes.ICS4Wrapper - - // the address capable of executing a MsgUpdateParams message. Typically, this - // should be the x/gov module account. - authority string } // NewKeeper creates a new forward Keeper instance @@ -57,28 +35,17 @@ func NewKeeper( key storetypes.StoreKey, transferKeeper types.TransferKeeper, channelKeeper types.ChannelKeeper, - distrKeeper types.DistributionKeeper, - bankKeeper types.BankKeeper, ics4Wrapper porttypes.ICS4Wrapper, - authority string, ) *Keeper { return &Keeper{ cdc: cdc, storeKey: key, transferKeeper: transferKeeper, channelKeeper: channelKeeper, - distrKeeper: distrKeeper, - bankKeeper: bankKeeper, ics4Wrapper: ics4Wrapper, - authority: authority, } } -// GetAuthority returns the module's authority. -func (k Keeper) GetAuthority() string { - return k.authority -} - // SetTransferKeeper sets the transferKeeper func (k *Keeper) SetTransferKeeper(transferKeeper types.TransferKeeper) { k.transferKeeper = transferKeeper @@ -96,9 +63,6 @@ func (k *Keeper) WriteAcknowledgementForForwardedPacket( inFlightPacket *types.InFlightPacket, ack channeltypes.Acknowledgement, ) error { - - // set inFlightPacket to be non refundable - inFlightPacket.Nonrefundable = true // Lookup module by channel capability @@ -119,18 +83,6 @@ func (k *Keeper) WriteAcknowledgementForForwardedPacket( }, ack) } -func (k *Keeper) RemoveInFlightPacket(ctx sdk.Context, packet channeltypes.Packet) { - store := ctx.KVStore(k.storeKey) - key := types.RefundPacketKey(packet.SourceChannel, packet.SourcePort, packet.Sequence) - if !store.Has(key) { - // not a forwarded packet, ignore. - return - } - - // done with packet key now, delete. - store.Delete(key) -} - // GetAndClearInFlightPacket will fetch an InFlightPacket from the store, remove it if it exists, and return it. func (k *Keeper) GetAndClearInFlightPacket( ctx sdk.Context, diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go index a1f13880..669c87a1 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go @@ -5,10 +5,7 @@ import ( "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) var _ types.MsgServer = msgServer{} @@ -26,10 +23,7 @@ func NewMsgServerImpl(k *Keeper) types.MsgServer { // UpdateParams implements types.MsgServer. func (ms msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { - if ms.authority != req.Authority { - return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, req.Authority) - } - + // Anyone can update the params for this module ctx := sdk.UnwrapSDKContext(goCtx) if err := ms.SetParams(ctx, req.Params); err != nil { return nil, err From 848d0e42b240c9489e4805cd2a0911a52de09cc5 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Mon, 20 Nov 2023 11:44:57 -0600 Subject: [PATCH 03/10] force inFlightPacket.Nonrefundable = true --- .../testing/simapp/app.go | 4 +- .../simapp/x/dummyware/ibc_middleware.go | 13 +- .../simapp/x/dummyware/keeper/keeper.go | 2 +- .../x/dummyware/types/expected_keepers.go | 12 -- .../simapp/x/dummyware/types/forward.go | 117 ------------------ .../simapp/x/dummyware/types/genesis.go | 6 +- .../testing/simapp/x/dummyware/types/keys.go | 6 - .../simapp/x/dummyware/types/params.go | 15 +-- .../simapp/x/dummyware/types/params_legacy.go | 3 - 9 files changed, 14 insertions(+), 164 deletions(-) delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/forward.go diff --git a/middleware/packet-forward-middleware/testing/simapp/app.go b/middleware/packet-forward-middleware/testing/simapp/app.go index eb2fea83..ee4e5f89 100644 --- a/middleware/packet-forward-middleware/testing/simapp/app.go +++ b/middleware/packet-forward-middleware/testing/simapp/app.go @@ -10,12 +10,10 @@ import ( packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward" packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" - + upgrades "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/upgrades" dummyware "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware" dummywarekeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/keeper" dummywaretypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - - upgrades "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/upgrades" "github.com/gorilla/mux" "github.com/rakyll/statik/fs" "github.com/spf13/cast" diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go index 44d5af07..1c96da2f 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go @@ -117,15 +117,14 @@ func (im IBCMiddleware) OnAcknowledgementPacket( return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) } - var ack channeltypes.Acknowledgement - if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { - return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) - } - inFlightPacket := im.keeper.GetAndClearInFlightPacket(ctx, packet.GetSourceChannel(), packet.GetSourcePort(), packet.GetSequence()) if inFlightPacket != nil { - // this is a forwarded packet, so override handling to avoid refund from being processed. - return im.keeper.WriteAcknowledgementForForwardedPacket(ctx, packet, data, inFlightPacket, ack) + var ack channeltypes.Acknowledgement + if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement") + } + + return im.keeper.WriteAcknowledgementForForcedNonRefundablePacket(ctx, packet, data, inFlightPacket, ack) } return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go index fd47b72b..26e32ea4 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go @@ -56,7 +56,7 @@ func (k *Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", "x/"+ibcexported.ModuleName+"-"+types.ModuleName) } -func (k *Keeper) WriteAcknowledgementForForwardedPacket( +func (k *Keeper) WriteAcknowledgementForForcedNonRefundablePacket( ctx sdk.Context, packet channeltypes.Packet, data transfertypes.FungibleTokenPacketData, diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go index 97575175..a175f5f8 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go @@ -25,15 +25,3 @@ type ChannelKeeper interface { GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) LookupModuleByChannel(ctx sdk.Context, portID, channelID string) (string, *capabilitytypes.Capability, error) } - -// DistributionKeeper defines the expected distribution keeper -type DistributionKeeper interface { - FundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk.AccAddress) error -} - -// BankKeeper defines the expected bank keeper -type BankKeeper interface { - SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error - SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error - BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/forward.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/forward.go deleted file mode 100644 index e9010390..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/forward.go +++ /dev/null @@ -1,117 +0,0 @@ -package types - -import ( - "encoding/json" - "errors" - "fmt" - "time" - - "github.com/iancoleman/orderedmap" - - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" -) - -type PacketMetadata struct { - Forward *ForwardMetadata `json:"forward"` -} - -type ForwardMetadata struct { - Receiver string `json:"receiver,omitempty"` - Port string `json:"port,omitempty"` - Channel string `json:"channel,omitempty"` - Timeout Duration `json:"timeout,omitempty"` - Retries *uint8 `json:"retries,omitempty"` - - // Using JSONObject so that objects for next property will not be mutated by golang's lexicographic key sort on map keys during Marshal. - // Supports primitives for Unmarshal/Marshal so that an escaped JSON-marshaled string is also valid. - Next *JSONObject `json:"next,omitempty"` -} - -type Duration time.Duration - -func (m *ForwardMetadata) Validate() error { - if m.Receiver == "" { - return fmt.Errorf("failed to validate metadata. receiver cannot be empty") - } - if err := host.PortIdentifierValidator(m.Port); err != nil { - return fmt.Errorf("failed to validate metadata: %w", err) - } - if err := host.ChannelIdentifierValidator(m.Channel); err != nil { - return fmt.Errorf("failed to validate metadata: %w", err) - } - - return nil -} - -// JSONObject is a wrapper type to allow either a primitive type or a JSON object. -// In the case the value is a JSON object, OrderedMap type is used so that key order -// is retained across Unmarshal/Marshal. -type JSONObject struct { - obj bool - primitive []byte - orderedMap orderedmap.OrderedMap -} - -// NewJSONObject is a constructor used for tests. -// The usage of JSONObject in the middleware is only json Marshal/Unmarshal -func NewJSONObject(object bool, primitive []byte, orderedMap orderedmap.OrderedMap) *JSONObject { - return &JSONObject{ - obj: object, - primitive: primitive, - orderedMap: orderedMap, - } -} - -// UnmarshalJSON overrides the default json.Unmarshal behavior -func (o *JSONObject) UnmarshalJSON(b []byte) error { - if err := o.orderedMap.UnmarshalJSON(b); err != nil { - // If ordered map unmarshal fails, this is a primitive value - o.obj = false - // Attempt to unmarshal as string, this removes extra JSON escaping - var primitiveStr string - if err := json.Unmarshal(b, &primitiveStr); err != nil { - o.primitive = b - return nil - } - o.primitive = []byte(primitiveStr) - return nil - } - // This is a JSON object, now stored as an ordered map to retain key order. - o.obj = true - return nil -} - -// MarshalJSON overrides the default json.Marshal behavior -func (o JSONObject) MarshalJSON() ([]byte, error) { - if o.obj { - // non-primitive, return marshaled ordered map. - return o.orderedMap.MarshalJSON() - } - // primitive, return raw bytes. - return o.primitive, nil -} - -func (d Duration) MarshalJSON() ([]byte, error) { - return json.Marshal(time.Duration(d).Nanoseconds()) -} - -func (d *Duration) UnmarshalJSON(b []byte) error { - var v interface{} - if err := json.Unmarshal(b, &v); err != nil { - return err - } - switch value := v.(type) { - case float64: - *d = Duration(time.Duration(value)) - return nil - case string: - tmp, err := time.ParseDuration(value) - if err != nil { - return err - } - *d = Duration(tmp) - return nil - default: - return errors.New("invalid duration") - } -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go index a6f39848..dd87f1c1 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go @@ -3,16 +3,14 @@ package types // NewGenesisState creates a pfm GenesisState instance. func NewGenesisState(params Params, inFlightPackets map[string]InFlightPacket) *GenesisState { return &GenesisState{ - Params: params, - InFlightPackets: inFlightPackets, + Params: params, } } // DefaultGenesisState returns a GenesisState with a default fee percentage of 0. func DefaultGenesisState() *GenesisState { return &GenesisState{ - Params: DefaultParams(), - InFlightPackets: make(map[string]InFlightPacket), + Params: DefaultParams(), } } diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go index cbd3b02c..51526a65 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go @@ -18,12 +18,6 @@ const ( var ParamsKey = []byte{0x00} -type ( - NonrefundableKey struct{} - DisableDenomCompositionKey struct{} - ProcessedKey struct{} -) - func RefundPacketKey(channelID, portID string, sequence uint64) []byte { return []byte(fmt.Sprintf("%s/%s/%d", channelID, portID, sequence)) } diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go index 64af85cb..9894dfe1 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go @@ -1,20 +1,13 @@ package types -import ( - sdk "github.com/cosmos/cosmos-sdk/types" -) - -// DefaultFeePercentage is the default value used to extract a fee from all forwarded packets. -var DefaultFeePercentage = sdk.NewDec(0) - -// NewParams creates a new parameter configuration for the pfm module. -func NewParams(feePercentage sdk.Dec) Params { +// NewParams creates a new parameter configuration for the module. +func NewParams() Params { return Params{} } -// DefaultParams is the default parameter configuration for the pfm module. +// DefaultParams is the default parameter configuration for the module. func DefaultParams() Params { - return NewParams(DefaultFeePercentage) + return NewParams() } // Validate the pfm module parameters. diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go index 8ff5d017..8b8898b2 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go @@ -9,9 +9,6 @@ import ( paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ) -// KeyFeePercentage is store's key for FeePercentage Params -var KeyFeePercentage = []byte("FeePercentage") - // ParamKeyTable type declaration for parameters. func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) From 7e658f57a726c9a8fa4386c4f61f8b1e448dad9e Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Mon, 20 Nov 2023 11:46:02 -0600 Subject: [PATCH 04/10] dummyware.AppModuleBasic --- middleware/packet-forward-middleware/testing/simapp/app.go | 1 + 1 file changed, 1 insertion(+) diff --git a/middleware/packet-forward-middleware/testing/simapp/app.go b/middleware/packet-forward-middleware/testing/simapp/app.go index ee4e5f89..b723cecc 100644 --- a/middleware/packet-forward-middleware/testing/simapp/app.go +++ b/middleware/packet-forward-middleware/testing/simapp/app.go @@ -165,6 +165,7 @@ var ( ibctm.AppModuleBasic{}, solomachine.AppModuleBasic{}, packetforward.AppModuleBasic{}, + dummyware.AppModuleBasic{}, transfer.AppModuleBasic{}, ) From 61d068d3236b287bf03f9c27d0fe60d3e7a681f5 Mon Sep 17 00:00:00 2001 From: Justin Tieri <37750742+jtieri@users.noreply.github.com> Date: Thu, 23 Nov 2023 15:23:23 -0600 Subject: [PATCH 05/10] test: create non-refundable pfm test cases --- .../packet-forward-middleware/e2e/go.mod | 43 +- .../packet-forward-middleware/e2e/go.sum | 86 +- .../e2e/packet_forward_non_refundable_test.go | 387 +++++ .../packet-forward-middleware/e2e/setup.go | 19 +- .../testing/simapp/app.go | 53 +- .../simapp/x/dummyware/client/cli/cli.go | 61 - .../simapp/x/dummyware/ibc_middleware.go | 91 +- .../simapp/x/dummyware/keeper/genesis.go | 29 - .../simapp/x/dummyware/keeper/grpc_query.go | 20 - .../simapp/x/dummyware/keeper/keeper.go | 140 -- .../simapp/x/dummyware/keeper/msg_server.go | 33 - .../simapp/x/dummyware/keeper/params.go | 33 - .../testing/simapp/x/dummyware/module.go | 156 -- .../x/dummyware/proto/buf.gen.gogo.yaml | 8 - .../testing/simapp/x/dummyware/proto/buf.lock | 19 - .../testing/simapp/x/dummyware/proto/buf.yaml | 20 - .../proto/dummyware/v1/genesis.proto | 41 - .../dummyware/proto/dummyware/v1/query.proto | 24 - .../x/dummyware/proto/dummyware/v1/tx.proto | 39 - .../simapp/x/dummyware/scripts/protocgen.sh | 16 - .../testing/simapp/x/dummyware/types/codec.go | 42 - .../x/dummyware/types/expected_keepers.go | 27 - .../simapp/x/dummyware/types/genesis.go | 20 - .../simapp/x/dummyware/types/genesis.pb.go | 1302 ----------------- .../testing/simapp/x/dummyware/types/keys.go | 23 - .../testing/simapp/x/dummyware/types/msgs.go | 29 - .../simapp/x/dummyware/types/params.go | 16 - .../simapp/x/dummyware/types/params_legacy.go | 20 - .../simapp/x/dummyware/types/query.pb.go | 542 ------- .../simapp/x/dummyware/types/query.pb.gw.go | 153 -- .../testing/simapp/x/dummyware/types/tx.pb.go | 606 -------- 31 files changed, 505 insertions(+), 3593 deletions(-) create mode 100644 middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/client/cli/cli.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/genesis.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/grpc_query.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/params.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/module.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.gen.gogo.yaml delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.lock delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.yaml delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/genesis.proto delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/query.proto delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/tx.proto delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/scripts/protocgen.sh delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/codec.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.pb.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/msgs.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.gw.go delete mode 100644 middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/tx.pb.go diff --git a/middleware/packet-forward-middleware/e2e/go.mod b/middleware/packet-forward-middleware/e2e/go.mod index 0375d1a7..e4e2b1a7 100644 --- a/middleware/packet-forward-middleware/e2e/go.mod +++ b/middleware/packet-forward-middleware/e2e/go.mod @@ -8,17 +8,17 @@ require ( github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-00000000000000-000000000000 github.com/cosmos/ibc-go/v7 v7.3.1 - github.com/docker/docker v24.0.5+incompatible - github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20231025031208-463fdf2292e8 + github.com/docker/docker v24.0.7+incompatible + github.com/strangelove-ventures/interchaintest/v7 v7.0.1-0.20231121220910-a334ab4006ae github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.26.0 ) require ( - cloud.google.com/go v0.110.4 // indirect - cloud.google.com/go/compute v1.20.1 // indirect + cloud.google.com/go v0.110.7 // indirect + cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/iam v1.1.1 // indirect cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.6.1 // indirect @@ -62,6 +62,7 @@ require ( github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect + github.com/cosmos/interchain-security/v3 v3.1.1-0.20231102122221-81650a84f989 // indirect github.com/cosmos/ledger-cosmos-go v0.13.0 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect @@ -92,16 +93,16 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/uuid v1.3.1 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect @@ -196,23 +197,23 @@ require ( go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.12.0 // indirect + golang.org/x/crypto v0.14.0 // indirect golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/oauth2 v0.8.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect - golang.org/x/tools v0.12.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/sync v0.4.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.13.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect - google.golang.org/grpc v1.57.0 // indirect + google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect @@ -230,7 +231,7 @@ require ( modernc.org/strutil v1.1.3 // indirect modernc.org/token v1.0.1 // indirect nhooyr.io/websocket v1.8.7 // indirect - pgregory.net/rapid v1.0.0 // indirect + pgregory.net/rapid v1.1.0 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/middleware/packet-forward-middleware/e2e/go.sum b/middleware/packet-forward-middleware/e2e/go.sum index 36f4cb1f..1b0e1e2c 100644 --- a/middleware/packet-forward-middleware/e2e/go.sum +++ b/middleware/packet-forward-middleware/e2e/go.sum @@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= -cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= -cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -361,6 +361,8 @@ github.com/cosmos/ibc-go/v7 v7.3.1 h1:bil1IjnHdyWDASFYKfwdRiNtFP6WK3osW7QFEAgU4I github.com/cosmos/ibc-go/v7 v7.3.1/go.mod h1:wvx4pPBofe5ZdMNV3OFRxSI4auEP5Qfqf8JXLLNV04g= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/interchain-security/v3 v3.1.1-0.20231102122221-81650a84f989 h1:Yk/2X33hHuS0mqjr4rE0ShiwPE/YflXgdyXPIYdwl+Q= +github.com/cosmos/interchain-security/v3 v3.1.1-0.20231102122221-81650a84f989/go.mod h1:5B29fgUbUDTpBTqCnEzA2g3gI5rQG0YE/ir4isb2MEw= github.com/cosmos/ledger-cosmos-go v0.13.0 h1:ex0CvCxToSR7j5WjrghPu2Bu9sSXKikjnVvUryNnx4s= github.com/cosmos/ledger-cosmos-go v0.13.0/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= @@ -403,8 +405,8 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WA github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.5+incompatible h1:WmgcE4fxyI6EEXxBRxsHnZXrO1pQ3smi0k/jho4HLeY= -github.com/docker/docker v24.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -497,8 +499,8 @@ github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2 github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -557,8 +559,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -592,8 +595,9 @@ github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= @@ -660,8 +664,8 @@ github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoD github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -872,6 +876,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/oxyno-zeta/gomock-extra-matcher v1.1.0 h1:Yyk5ov0ZPKBXtVEeIWtc4J2XVrHuNoIK+0F2BUJgtsc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -997,8 +1002,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= -github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20231025031208-463fdf2292e8 h1:nOcN6GfuVuSIGfJzVn6ul9XKMhj+R60Z6qcWCKo5wx4= -github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20231025031208-463fdf2292e8/go.mod h1:f2QosaKuJv+4i1lr7Ordlhz2GfiDopcli4ccbANYKxk= +github.com/strangelove-ventures/interchaintest/v7 v7.0.1-0.20231121220910-a334ab4006ae h1:RfrK2vuqOEGGh8DIO0z4A0u0l13+5E9jfNZ5PgTfWZs= +github.com/strangelove-ventures/interchaintest/v7 v7.0.1-0.20231121220910-a334ab4006ae/go.mod h1:mkkCds7NaVUK8Bu1rmMHdkZYHmTAlICnjg/s+qQBO4A= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1107,8 +1112,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= 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= @@ -1211,8 +1216,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.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= 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= @@ -1238,8 +1243,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1254,8 +1259,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1354,13 +1359,14 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= 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= @@ -1372,8 +1378,8 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1441,8 +1447,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= -golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1621,12 +1627,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb h1:Isk1sSH7bovx8Rti2wZK0UZF6oraBDK74uoyLEEVFN0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= 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= @@ -1668,8 +1674,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= -google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1762,8 +1768,8 @@ modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v1.0.0 h1:iQaM2w5PZ6xvt6x7hbd7tiDS+nk7YPp5uCaEba+T/F4= -pgregory.net/rapid v1.0.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go new file mode 100644 index 00000000..e563cb92 --- /dev/null +++ b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go @@ -0,0 +1,387 @@ +package e2e + +import ( + "context" + "encoding/json" + "testing" + "time" + + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/relayer" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" +) + +func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + var ( + ctx = context.Background() + client, network = interchaintest.DockerSetup(t) + rep = testreporter.NewNopReporter() + eRep = rep.RelayerExecReporter(t) + chainIdA, chainIdB, chainIdC = "chain-1", "chain-2", "chain-3" + waitBlocks = 3 + ) + + vals := 1 + fullNodes := 0 + + baseCfg := DefaultConfig + + baseCfg.ChainID = chainIdA + configA := baseCfg + + configB := NonRefundableConfig + configB.ChainID = chainIdB + + baseCfg.ChainID = chainIdC + configC := baseCfg + + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + {Name: "pfm", ChainConfig: configA, NumFullNodes: &fullNodes, NumValidators: &vals}, + {Name: "pfm", ChainConfig: configB, NumFullNodes: &fullNodes, NumValidators: &vals}, + {Name: "pfm", ChainConfig: configC, NumFullNodes: &fullNodes, NumValidators: &vals}, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + chainA, chainB, chainC := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) + + r := interchaintest.NewBuiltinRelayerFactory( + ibc.CosmosRly, + zaptest.NewLogger(t), + relayer.DockerImage(&DefaultRelayer), + relayer.StartupFlags("--processor", "events", "--block-history", "100"), + ).Build(t, client, network) + + const pathAB = "ab" + const pathBC = "bc" + + ic := interchaintest.NewInterchain(). + AddChain(chainA). + AddChain(chainB). + AddChain(chainC). + AddRelayer(r, "relayer"). + AddLink(interchaintest.InterchainLink{ + Chain1: chainA, + Chain2: chainB, + Relayer: r, + Path: pathAB, + }). + AddLink(interchaintest.InterchainLink{ + Chain1: chainB, + Chain2: chainC, + Relayer: r, + Path: pathBC, + }) + + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + + SkipPathCreation: false, + })) + t.Cleanup(func() { + _ = ic.Close() + }) + + initBal := math.NewInt(10_000_000_000) + + userA, err := interchaintest.GetAndFundTestUserWithMnemonic( + ctx, + "test", + "dry system category detail slight boring flower magnet doll chimney neck entry net cluster february relax spare believe clarify wild clarify lounge frown outside", + initBal.Int64(), + chainA, + ) + require.NoError(t, err) + + userB, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, + "test", + "dry system category detail slight boring flower magnet doll chimney neck entry net cluster february relax spare believe clarify wild clarify lounge frown outside", + initBal.Int64(), + chainB, + ) + require.NoError(t, err) + + userC, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, + "test", + "dry system category detail slight boring flower magnet doll chimney neck entry net cluster february relax spare believe clarify wild clarify lounge frown outside", + initBal.Int64(), + chainC, + ) + require.NoError(t, err) + + abChan, err := ibc.GetTransferChannel(ctx, r, eRep, chainIdA, chainIdB) + require.NoError(t, err) + + baChan := abChan.Counterparty + + cbChan, err := ibc.GetTransferChannel(ctx, r, eRep, chainIdC, chainIdB) + require.NoError(t, err) + + bcChan := cbChan.Counterparty + + // Start the relayer on both paths + err = r.StartRelayer(ctx, eRep, pathAB, pathBC) + require.NoError(t, err) + + t.Cleanup( + func() { + err := r.StopRelayer(ctx, eRep) + if err != nil { + t.Logf("an error occured while stopping the relayer: %s", err) + } + }, + ) + + // Compose the prefixed denoms and ibc denom for asserting balances + firstHopDenom := transfertypes.GetPrefixedDenom(baChan.PortID, baChan.ChannelID, chainA.Config().Denom) + secondHopDenom := transfertypes.GetPrefixedDenom(cbChan.PortID, cbChan.ChannelID, firstHopDenom) + + firstHopDenomTrace := transfertypes.ParseDenomTrace(firstHopDenom) + secondHopDenomTrace := transfertypes.ParseDenomTrace(secondHopDenom) + + firstHopIBCDenom := firstHopDenomTrace.IBCDenom() + secondHopIBCDenom := secondHopDenomTrace.IBCDenom() + + firstHopEscrowAccount := sdk.MustBech32ifyAddressBytes(chainA.Config().Bech32Prefix, transfertypes.GetEscrowAddress(abChan.PortID, abChan.ChannelID)) + secondHopEscrowAccount := sdk.MustBech32ifyAddressBytes(chainB.Config().Bech32Prefix, transfertypes.GetEscrowAddress(bcChan.PortID, bcChan.ChannelID)) + + zeroBal := math.ZeroInt() + transferAmount := math.NewInt(100_000) + + t.Run("forward ack error refund - invalid receiver account on B", func(t *testing.T) { + // Send a malformed packet with invalid receiver address from Chain A->Chain B->Chain C + transfer := ibc.WalletAmount{ + Address: "pfm", + Denom: chainA.Config().Denom, + Amount: transferAmount, + } + + metadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: "xyz1t8eh66t2w5k67kwurmn5gqhtq6d2ja0vp7jmmq", // malformed receiver address on Chain C + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + }, + } + + memo, err := json.Marshal(metadata) + require.NoError(t, err) + + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) + + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) + + // assert balances for user controlled wallets + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) + require.NoError(t, err) + + chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) + require.NoError(t, err) + + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) + require.NoError(t, err) + + require.True(t, chainABalance.Equal(initBal.Sub(transferAmount))) + require.True(t, chainBBalance.Equal(transferAmount)) + require.True(t, chainCBalance.Equal(zeroBal)) + + // assert balances for IBC escrow accounts + firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) + require.NoError(t, err) + + secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) + require.NoError(t, err) + + require.True(t, firstHopEscrowBalance.Equal(transferAmount)) + require.True(t, secondHopEscrowBalance.Equal(zeroBal)) + }) + + t.Run("forward ack error refund - valid receiver account on B", func(t *testing.T) { + // Send a malformed packet with invalid receiver address from Chain A->Chain B->Chain C + transfer := ibc.WalletAmount{ + Address: userB.FormattedAddress(), + Denom: chainA.Config().Denom, + Amount: transferAmount, + } + + metadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: "xyz1t8eh66t2w5k67kwurmn5gqhtq6d2ja0vp7jmmq", // malformed receiver address on Chain C + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + }, + } + + memo, err := json.Marshal(metadata) + require.NoError(t, err) + + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) + + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) + + // assert balances for user controlled wallets + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) + require.NoError(t, err) + + chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) + require.NoError(t, err) + + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) + require.NoError(t, err) + + require.True(t, chainABalance.Equal(initBal.Sub(transferAmount))) + require.True(t, chainBBalance.Equal(transferAmount)) + require.True(t, chainCBalance.Equal(zeroBal)) + + // assert balances for IBC escrow accounts + firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) + require.NoError(t, err) + + secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) + require.NoError(t, err) + + require.True(t, firstHopEscrowBalance.Equal(transferAmount)) + require.True(t, secondHopEscrowBalance.Equal(zeroBal)) + }) + + t.Run("forward timeout refund - valid receiver account on B", func(t *testing.T) { + // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. + transfer := ibc.WalletAmount{ + Address: userB.FormattedAddress(), + Denom: chainA.Config().Denom, + Amount: transferAmount, + } + + retries := uint8(2) + metadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userC.FormattedAddress(), + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + Retries: &retries, + Timeout: 1 * time.Second, + }, + } + + memo, err := json.Marshal(metadata) + require.NoError(t, err) + + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) + + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) + + // assert balances for user controlled wallets + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) + require.NoError(t, err) + + chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) + require.NoError(t, err) + + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) + require.NoError(t, err) + + require.True(t, chainABalance.Equal(initBal.Sub(transferAmount))) + require.True(t, chainBBalance.Equal(transferAmount)) + require.True(t, chainCBalance.Equal(zeroBal)) + + firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) + require.NoError(t, err) + + secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) + require.NoError(t, err) + + require.True(t, firstHopEscrowBalance.Equal(transferAmount)) + require.True(t, secondHopEscrowBalance.Equal(zeroBal)) + }) + + t.Run("forward timeout refund - invalid receiver account on B", func(t *testing.T) { + // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. + transfer := ibc.WalletAmount{ + Address: "pfm", + Denom: chainA.Config().Denom, + Amount: transferAmount, + } + + retries := uint8(2) + metadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userC.FormattedAddress(), + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + Retries: &retries, + Timeout: 1 * time.Second, + }, + } + + memo, err := json.Marshal(metadata) + require.NoError(t, err) + + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) + + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) + + // assert balances for user controlled wallets + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) + require.NoError(t, err) + + chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) + require.NoError(t, err) + + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) + require.NoError(t, err) + + require.True(t, chainABalance.Equal(initBal.Sub(transferAmount))) + require.True(t, chainBBalance.Equal(transferAmount)) + require.True(t, chainCBalance.Equal(zeroBal)) + + firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) + require.NoError(t, err) + + secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) + require.NoError(t, err) + + require.True(t, firstHopEscrowBalance.Equal(transferAmount)) + require.True(t, secondHopEscrowBalance.Equal(zeroBal)) + }) +} diff --git a/middleware/packet-forward-middleware/e2e/setup.go b/middleware/packet-forward-middleware/e2e/setup.go index 5cbedfe7..c53cec2a 100644 --- a/middleware/packet-forward-middleware/e2e/setup.go +++ b/middleware/packet-forward-middleware/e2e/setup.go @@ -5,7 +5,7 @@ import ( "os" "strings" - testutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" ) @@ -35,6 +35,23 @@ var ( EncodingConfig: encoding(), } + NonRefundableConfig = ibc.ChainConfig{ + Type: "cosmos", + Name: "pfm", + ChainID: "pfm-1", + Images: []ibc.DockerImage{PFMImage}, + Bin: "simd", + Bech32Prefix: "cosmos", + Denom: Denom, + CoinType: "118", + GasPrices: fmt.Sprintf("0.0%s", Denom), + GasAdjustment: 2.0, + TrustingPeriod: "336h", + NoHostMount: false, + EncodingConfig: encoding(), + Env: []string{"NON_REFUNDABLE_TEST=true"}, + } + DefaultRelayer = ibc.DockerImage{ Repository: "ghcr.io/cosmos/relayer", Version: "v2.4.2", diff --git a/middleware/packet-forward-middleware/testing/simapp/app.go b/middleware/packet-forward-middleware/testing/simapp/app.go index b723cecc..6c236b8f 100644 --- a/middleware/packet-forward-middleware/testing/simapp/app.go +++ b/middleware/packet-forward-middleware/testing/simapp/app.go @@ -7,13 +7,11 @@ import ( "os" "path/filepath" - packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward" + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward" packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" - upgrades "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/upgrades" - dummyware "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware" - dummywarekeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/keeper" - dummywaretypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/upgrades" + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware" "github.com/gorilla/mux" "github.com/rakyll/statik/fs" "github.com/spf13/cast" @@ -107,7 +105,7 @@ import ( "github.com/cometbft/cometbft/libs/log" tmos "github.com/cometbft/cometbft/libs/os" - transfer "github.com/cosmos/ibc-go/v7/modules/apps/transfer" + "github.com/cosmos/ibc-go/v7/modules/apps/transfer" ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" ibc "github.com/cosmos/ibc-go/v7/modules/core" @@ -165,7 +163,6 @@ var ( ibctm.AppModuleBasic{}, solomachine.AppModuleBasic{}, packetforward.AppModuleBasic{}, - dummyware.AppModuleBasic{}, transfer.AppModuleBasic{}, ) @@ -218,7 +215,6 @@ type SimApp struct { AuthzKeeper authzkeeper.Keeper IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly PacketForwardKeeper *packetforwardkeeper.Keeper - DummyWareKeeper *dummywarekeeper.Keeper EvidenceKeeper evidencekeeper.Keeper TransferKeeper ibctransferkeeper.Keeper FeeGrantKeeper feegrantkeeper.Keeper @@ -287,7 +283,7 @@ func NewSimApp( authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, crisistypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, group.StoreKey, paramstypes.StoreKey, consensusparamtypes.StoreKey, ibcexported.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey, - evidencetypes.StoreKey, packetforwardtypes.StoreKey, dummywaretypes.ModuleName, ibctransfertypes.StoreKey, authzkeeper.StoreKey, capabilitytypes.StoreKey, + evidencetypes.StoreKey, packetforwardtypes.StoreKey, ibctransfertypes.StoreKey, authzkeeper.StoreKey, capabilitytypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) // NOTE: The testingkey is just mounted for testing purposes. Actual applications should @@ -438,15 +434,7 @@ func NewSimApp( groupConfig.MaxMetadataLen = 1000 app.GroupKeeper = groupkeeper.NewKeeper(keys[group.StoreKey], appCodec, app.MsgServiceRouter(), app.AccountKeeper, groupConfig) - app.DummyWareKeeper = dummywarekeeper.NewKeeper( - appCodec, - app.keys[dummywaretypes.StoreKey], - nil, - app.IBCKeeper.ChannelKeeper, - app.IBCKeeper.ChannelKeeper, - ) - - // Packet Forward Middleware Keeper + // Create the packet forward middleware keeper app.PacketForwardKeeper = packetforwardkeeper.NewKeeper( appCodec, app.keys[packetforwardtypes.StoreKey], @@ -454,7 +442,7 @@ func NewSimApp( app.IBCKeeper.ChannelKeeper, app.DistrKeeper, app.BankKeeper, - app.DummyWareKeeper, + app.IBCKeeper.ChannelKeeper, authority, ) @@ -473,16 +461,16 @@ func NewSimApp( scopedTransferKeeper, ) - app.DummyWareKeeper.SetTransferKeeper(app.TransferKeeper) app.PacketForwardKeeper.SetTransferKeeper(app.TransferKeeper) // Create Transfer Stack var transferStack ibcporttypes.IBCModule transferStack = transfer.NewIBCModule(app.TransferKeeper) - transferStack = dummyware.NewIBCMiddleware( - transferStack, - app.DummyWareKeeper, - ) + + if os.Getenv("NON_REFUNDABLE_TEST") != "" { + transferStack = dummyware.NewIBCMiddleware(transferStack) + } + transferStack = packetforward.NewIBCMiddleware( transferStack, app.PacketForwardKeeper, @@ -539,7 +527,6 @@ func NewSimApp( // IBC modules ibc.NewAppModule(app.IBCKeeper), packetforward.NewAppModule(app.PacketForwardKeeper, app.GetSubspace(packetforwardtypes.ModuleName)), - dummyware.NewAppModule(app.DummyWareKeeper), transfer.NewAppModule(app.TransferKeeper), ) @@ -552,13 +539,13 @@ func NewSimApp( upgradetypes.ModuleName, capabilitytypes.ModuleName, minttypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, evidencetypes.ModuleName, stakingtypes.ModuleName, ibcexported.ModuleName, packetforwardtypes.ModuleName, ibctransfertypes.StoreKey, authtypes.ModuleName, banktypes.ModuleName, govtypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, authz.ModuleName, feegrant.ModuleName, - paramstypes.ModuleName, vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, dummywaretypes.ModuleName, + paramstypes.ModuleName, vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, ) app.mm.SetOrderEndBlockers( crisistypes.ModuleName, govtypes.ModuleName, stakingtypes.ModuleName, ibcexported.ModuleName, packetforwardtypes.ModuleName, ibctransfertypes.StoreKey, capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, minttypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, feegrant.ModuleName, paramstypes.ModuleName, - upgradetypes.ModuleName, vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, dummywaretypes.ModuleName, + upgradetypes.ModuleName, vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -572,7 +559,7 @@ func NewSimApp( slashingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, packetforwardtypes.ModuleName, ibctransfertypes.StoreKey, feegrant.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, - vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, dummywaretypes.ModuleName, + vestingtypes.ModuleName, group.ModuleName, consensusparamtypes.ModuleName, } app.mm.SetOrderInitGenesis(genesisModuleOrder...) @@ -852,15 +839,6 @@ func (app *SimApp) RegisterNodeService(context client.Context) { nodeservice.RegisterNodeService(context, app.GRPCQueryRouter()) } -// GetMaccPerms returns a copy of the module account permissions -func GetMaccPerms() map[string][]string { - dupMaccPerms := make(map[string][]string) - for k, v := range maccPerms { - dupMaccPerms[k] = v - } - return dupMaccPerms -} - // initParamsKeeper init params keeper and its subspaces func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper { paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) @@ -876,7 +854,6 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(ibcexported.ModuleName) paramsKeeper.Subspace(ibctransfertypes.ModuleName) paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable()) - paramsKeeper.Subspace(dummywaretypes.ModuleName).WithKeyTable(dummywaretypes.ParamKeyTable()) return paramsKeeper } diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/client/cli/cli.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/client/cli/cli.go deleted file mode 100644 index d0f6749e..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/client/cli/cli.go +++ /dev/null @@ -1,61 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/version" -) - -// GetQueryCmd returns the query commands for dummyware -func GetQueryCmd() *cobra.Command { - queryCmd := &cobra.Command{ - Use: types.ModuleName, - Short: "Querying commands for the " + types.ModuleName + " module", - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - } - - queryCmd.AddCommand( - GetCmdParams(), - ) - - return queryCmd -} - -// GetCmdParams returns the command handler for dummyware parameter querying. -func GetCmdParams() *cobra.Command { - cmd := &cobra.Command{ - Use: "params", - Short: "Query the current dummyware parameters", - Long: "Query the current dummyware parameters", - Args: cobra.NoArgs, - Example: fmt.Sprintf("%s query dummyware params", version.AppName), - RunE: func(cmd *cobra.Command, _ []string) error { - clientCtx, err := client.GetClientQueryContext(cmd) - if err != nil { - return err - } - queryClient := types.NewQueryClient(clientCtx) - - res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) - if err != nil { - return err - } - return clientCtx.PrintProto(res.Params) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -// NewTxCmd returns the transaction commands for dummyware -func NewTxCmd() *cobra.Command { - return nil -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go index 1c96da2f..cabf4948 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go @@ -1,38 +1,28 @@ -package packetforward +package dummyware import ( - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/keeper" - - errorsmod "cosmossdk.io/errors" + "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + forwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ) -var _ porttypes.Middleware = &IBCMiddleware{} +var _ porttypes.IBCModule = &IBCMiddleware{} -// IBCMiddleware implements the ICS26 callbacks for the forward middleware given the -// forward keeper and the underlying application. +// IBCMiddleware implements the ICS26 callbacks for the dummy middleware given the +// dummy keeper and the underlying application. type IBCMiddleware struct { - app porttypes.IBCModule - keeper *keeper.Keeper + app porttypes.IBCModule } // NewIBCMiddleware creates a new IBCMiddleware given the keeper and underlying application. -func NewIBCMiddleware( - app porttypes.IBCModule, - k *keeper.Keeper, -) IBCMiddleware { +func NewIBCMiddleware(app porttypes.IBCModule) IBCMiddleware { return IBCMiddleware{ - app: app, - keeper: k, + app: app, } } @@ -88,15 +78,19 @@ func (im IBCMiddleware) OnChanCloseConfirm(ctx sdk.Context, portID, channelID st return im.app.OnChanCloseConfirm(ctx, portID, channelID) } -// OnRecvPacket checks the memo field on this packet and if the metadata inside's root key indicates this packet -// should be handled by the swap middleware it attempts to perform a swap. If the swap is successful -// the underlying application's OnRecvPacket callback is invoked, an ack error is returned otherwise. +// OnRecvPacket sets the non-refundable context value to true so that on a failed forward funds will not +// be refunded from the intermediate chain. func (im IBCMiddleware) OnRecvPacket( ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, ) ibcexported.Acknowledgement { - return im.app.OnRecvPacket(ctx, packet, relayer) + // Compose our context with values that will be used to pass through to the forward middleware + ctxWithFlags := context.WithValue(ctx.Context(), forwardtypes.NonrefundableKey{}, true) + wrappedCtx := ctx.WithContext(ctxWithFlags) + + // Call into underlying app to receive funds on this chain + return im.app.OnRecvPacket(wrappedCtx, packet, relayer) } // OnAcknowledgementPacket implements the IBCModule interface. @@ -106,27 +100,6 @@ func (im IBCMiddleware) OnAcknowledgementPacket( acknowledgement []byte, relayer sdk.AccAddress, ) error { - var data transfertypes.FungibleTokenPacketData - if err := transfertypes.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil { - im.keeper.Logger(ctx).Error("packetForwardMiddleware error parsing packet data from ack packet", - "sequence", packet.GetSequence(), - "src-channel", packet.GetSourceChannel(), "src-port", packet.GetSourcePort(), - "dst-channel", packet.GetDestChannel(), "dst-port", packet.GetDestPort(), - "error", err, - ) - return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) - } - - inFlightPacket := im.keeper.GetAndClearInFlightPacket(ctx, packet.GetSourceChannel(), packet.GetSourcePort(), packet.GetSequence()) - if inFlightPacket != nil { - var ack channeltypes.Acknowledgement - if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { - return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement") - } - - return im.keeper.WriteAcknowledgementForForcedNonRefundablePacket(ctx, packet, data, inFlightPacket, ack) - } - return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) } @@ -134,33 +107,3 @@ func (im IBCMiddleware) OnAcknowledgementPacket( func (im IBCMiddleware) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) error { return im.app.OnTimeoutPacket(ctx, packet, relayer) } - -// SendPacket implements the ICS4 Wrapper interface. -func (im IBCMiddleware) SendPacket( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - sourcePort string, sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, - data []byte, -) (sequence uint64, err error) { - return im.keeper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) -} - -// WriteAcknowledgement implements the ICS4 Wrapper interface. -func (im IBCMiddleware) WriteAcknowledgement( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - packet ibcexported.PacketI, - ack ibcexported.Acknowledgement, -) error { - return im.keeper.WriteAcknowledgement(ctx, chanCap, packet, ack) -} - -func (im IBCMiddleware) GetAppVersion( - ctx sdk.Context, - portID, - channelID string, -) (string, bool) { - return im.keeper.GetAppVersion(ctx, portID, channelID) -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/genesis.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/genesis.go deleted file mode 100644 index f37bc183..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/genesis.go +++ /dev/null @@ -1,29 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -// InitGenesis -func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) { - if err := k.SetParams(ctx, state.Params); err != nil { - panic(err) - } -} - -// ExportGenesis -func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { - store := ctx.KVStore(k.storeKey) - - inFlightPackets := make(map[string]types.InFlightPacket) - - itr := store.Iterator(nil, nil) - for ; itr.Valid(); itr.Next() { - var inFlightPacket types.InFlightPacket - k.cdc.MustUnmarshal(itr.Value(), &inFlightPacket) - inFlightPackets[string(itr.Key())] = inFlightPacket - } - return &types.GenesisState{Params: k.GetParams(ctx), InFlightPackets: inFlightPackets} -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/grpc_query.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/grpc_query.go deleted file mode 100644 index efb51bfd..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/grpc_query.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -var _ types.QueryServer = Keeper{} - -func (k Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - ctx := sdk.UnwrapSDKContext(c) - params := k.GetParams(ctx) - - return &types.QueryParamsResponse{ - Params: ¶ms, - }, nil -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go deleted file mode 100644 index 26e32ea4..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/keeper.go +++ /dev/null @@ -1,140 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - - errorsmod "cosmossdk.io/errors" - - "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - - "github.com/cometbft/cometbft/libs/log" - - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" -) - -// Keeper defines the packet forward middleware keeper -type Keeper struct { - cdc codec.BinaryCodec - storeKey storetypes.StoreKey - - transferKeeper types.TransferKeeper - channelKeeper types.ChannelKeeper - ics4Wrapper porttypes.ICS4Wrapper -} - -// NewKeeper creates a new forward Keeper instance -func NewKeeper( - cdc codec.BinaryCodec, - key storetypes.StoreKey, - transferKeeper types.TransferKeeper, - channelKeeper types.ChannelKeeper, - ics4Wrapper porttypes.ICS4Wrapper, -) *Keeper { - return &Keeper{ - cdc: cdc, - storeKey: key, - transferKeeper: transferKeeper, - channelKeeper: channelKeeper, - ics4Wrapper: ics4Wrapper, - } -} - -// SetTransferKeeper sets the transferKeeper -func (k *Keeper) SetTransferKeeper(transferKeeper types.TransferKeeper) { - k.transferKeeper = transferKeeper -} - -// Logger returns a module-specific logger. -func (k *Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+ibcexported.ModuleName+"-"+types.ModuleName) -} - -func (k *Keeper) WriteAcknowledgementForForcedNonRefundablePacket( - ctx sdk.Context, - packet channeltypes.Packet, - data transfertypes.FungibleTokenPacketData, - inFlightPacket *types.InFlightPacket, - ack channeltypes.Acknowledgement, -) error { - inFlightPacket.Nonrefundable = true - - // Lookup module by channel capability - _, chanCap, err := k.channelKeeper.LookupModuleByChannel(ctx, inFlightPacket.RefundPortId, inFlightPacket.RefundChannelId) - if err != nil { - return errorsmod.Wrap(err, "could not retrieve module from port-id") - } - - return k.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, channeltypes.Packet{ - Data: inFlightPacket.PacketData, - Sequence: inFlightPacket.RefundSequence, - SourcePort: inFlightPacket.PacketSrcPortId, - SourceChannel: inFlightPacket.PacketSrcChannelId, - DestinationPort: inFlightPacket.RefundPortId, - DestinationChannel: inFlightPacket.RefundChannelId, - TimeoutHeight: clienttypes.MustParseHeight(inFlightPacket.PacketTimeoutHeight), - TimeoutTimestamp: inFlightPacket.PacketTimeoutTimestamp, - }, ack) -} - -// GetAndClearInFlightPacket will fetch an InFlightPacket from the store, remove it if it exists, and return it. -func (k *Keeper) GetAndClearInFlightPacket( - ctx sdk.Context, - channel string, - port string, - sequence uint64, -) *types.InFlightPacket { - store := ctx.KVStore(k.storeKey) - key := types.RefundPacketKey(channel, port, sequence) - if !store.Has(key) { - // this is either not a forwarded packet, or it is the final destination for the refund. - return nil - } - - bz := store.Get(key) - - // done with packet key now, delete. - store.Delete(key) - - var inFlightPacket types.InFlightPacket - k.cdc.MustUnmarshal(bz, &inFlightPacket) - return &inFlightPacket -} - -// SendPacket wraps IBC ChannelKeeper's SendPacket function -func (k Keeper) SendPacket( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - sourcePort string, sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, - data []byte, -) (sequence uint64, err error) { - return k.ics4Wrapper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) -} - -// WriteAcknowledgement wraps IBC ICS4Wrapper WriteAcknowledgement function. -// ICS29 WriteAcknowledgement is used for asynchronous acknowledgements. -func (k *Keeper) WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error { - return k.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, packet, acknowledgement) -} - -// WriteAcknowledgement wraps IBC ICS4Wrapper GetAppVersion function. -func (k *Keeper) GetAppVersion( - ctx sdk.Context, - portID, - channelID string, -) (string, bool) { - return k.ics4Wrapper.GetAppVersion(ctx, portID, channelID) -} - -// LookupModuleByChannel wraps ChannelKeeper LookupModuleByChannel function. -func (k *Keeper) LookupModuleByChannel(ctx sdk.Context, portID, channelID string) (string, *capabilitytypes.Capability, error) { - return k.channelKeeper.LookupModuleByChannel(ctx, portID, channelID) -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go deleted file mode 100644 index 669c87a1..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/msg_server.go +++ /dev/null @@ -1,33 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -var _ types.MsgServer = msgServer{} - -type msgServer struct { - *Keeper -} - -// NewMsgServerImpl returns an implementation of the x/packetforward MsgServer interface. -func NewMsgServerImpl(k *Keeper) types.MsgServer { - return &msgServer{ - Keeper: k, - } -} - -// UpdateParams implements types.MsgServer. -func (ms msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { - // Anyone can update the params for this module - ctx := sdk.UnwrapSDKContext(goCtx) - if err := ms.SetParams(ctx, req.Params); err != nil { - return nil, err - } - - return &types.MsgUpdateParamsResponse{}, nil -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/params.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/params.go deleted file mode 100644 index b9c31c11..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/keeper/params.go +++ /dev/null @@ -1,33 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -// SetParams sets the module parameters. -func (k Keeper) SetParams(ctx sdk.Context, p types.Params) error { - if err := p.Validate(); err != nil { - return err - } - - store := ctx.KVStore(k.storeKey) - bz := k.cdc.MustMarshal(&p) - store.Set(types.ParamsKey, bz) - return nil -} - -// GetParams returns the current module parameters. -func (k Keeper) GetParams(ctx sdk.Context) types.Params { - var p types.Params - - store := ctx.KVStore(k.storeKey) - bz := store.Get(types.ParamsKey) - if bz == nil { - return p - } - - k.cdc.MustUnmarshal(bz, &p) - return p -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/module.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/module.go deleted file mode 100644 index c2a5d99b..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/module.go +++ /dev/null @@ -1,156 +0,0 @@ -package packetforward - -import ( - "context" - "encoding/json" - "fmt" - - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/client/cli" - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/keeper" - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types" - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - - abci "github.com/cometbft/cometbft/abci/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModuleSimulation = AppModule{} -) - -// AppModuleBasic is the packetforward AppModuleBasic -type AppModuleBasic struct{} - -// Name implements AppModuleBasic interface -func (AppModuleBasic) Name() string { - return types.ModuleName -} - -// RegisterLegacyAminoCodec implements AppModuleBasic interface -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - types.RegisterLegacyAminoCodec(cdc) -} - -// RegisterInterfaces registers module concrete types into protobuf Any. -func (AppModuleBasic) RegisterInterfaces(r codectypes.InterfaceRegistry) { - types.RegisterInterfaces(r) -} - -// DefaultGenesis returns default genesis state as raw bytes for the ibc -// packetforward module. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesisState()) -} - -// ValidateGenesis performs genesis state validation for the packetforward module. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { - var gs types.GenesisState - if err := cdc.UnmarshalJSON(bz, &gs); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - - return gs.Validate() -} - -// RegisterRESTRoutes implements AppModuleBasic interface -func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} - -// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the packetforward module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - _ = types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) -} - -// GetTxCmd implements AppModuleBasic interface -func (AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.NewTxCmd() -} - -// GetQueryCmd implements AppModuleBasic interface -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd() -} - -// AppModule represents the AppModule for this module -type AppModule struct { - AppModuleBasic - keeper *keeper.Keeper -} - -// NewAppModule creates a new packetforward module -func NewAppModule(k *keeper.Keeper) AppModule { - return AppModule{ - keeper: k, - } -} - -// QuerierRoute implements the AppModule interface -func (AppModule) QuerierRoute() string { - return types.QuerierRoute -} - -// RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) -} - -// InitGenesis performs genesis initialization for the packetforward module. It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { - err := am.ValidateGenesis(cdc, nil, data) - if err != nil { - panic(err) - } - - var genesisState types.GenesisState - cdc.MustUnmarshalJSON(data, &genesisState) - am.keeper.InitGenesis(ctx, genesisState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the exported genesis state as raw bytes for the packetforward -// module. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - gs := am.keeper.ExportGenesis(ctx) - return cdc.MustMarshalJSON(gs) -} - -// ConsensusVersion implements AppModule/ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 2 } - -// BeginBlock implements the AppModule interface -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock implements the AppModule interface -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} - -// AppModuleSimulation functions - -// GenerateGenesisState creates a randomized GenState of the packetforward module. -func (AppModule) GenerateGenesisState(_ *module.SimulationState) {} - -// ProposalContents doesn't return any content functions for governance proposals. -func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { //nolint:staticcheck // WeightedProposalContent is necessary to satisfy the module interface - return nil -} - -// RegisterStoreDecoder registers a decoder for packetforward module's types -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} - -// WeightedOperations returns the all the packetforward module operations with their respective weights. -func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { - return nil -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.gen.gogo.yaml b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.gen.gogo.yaml deleted file mode 100644 index 855ea251..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.gen.gogo.yaml +++ /dev/null @@ -1,8 +0,0 @@ -version: v1 -plugins: - - name: gocosmos - out: .. - opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types - - name: grpc-gateway - out: .. - opt: logtostderr=true,allow_colon_final_segments=true \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.lock b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.lock deleted file mode 100644 index 9b1b283c..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.lock +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by buf. DO NOT EDIT. -version: v1 -deps: - - remote: buf.build - owner: cosmos - repository: cosmos-proto - commit: 1935555c206d4afb9e94615dfd0fad31 - - remote: buf.build - owner: cosmos - repository: cosmos-sdk - commit: 79b0b35b0aaf4cb1833f181ec979791b - - remote: buf.build - owner: cosmos - repository: gogo-proto - commit: 34d970b699f84aa382f3c29773a60836 - - remote: buf.build - owner: googleapis - repository: googleapis - commit: 75b4300737fb4efca0831636be94e517 diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.yaml b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.yaml deleted file mode 100644 index ac022583..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/buf.yaml +++ /dev/null @@ -1,20 +0,0 @@ -version: v1 -deps: - - buf.build/cosmos/cosmos-sdk - - buf.build/cosmos/cosmos-proto - - buf.build/cosmos/gogo-proto - - buf.build/googleapis/googleapis -breaking: - use: - - FILE -lint: - use: - - DEFAULT - - COMMENTS - - FILE_LOWER_SNAKE_CASE - except: - - UNARY_RPC - - COMMENT_FIELD - - SERVICE_SUFFIX - - PACKAGE_VERSION_SUFFIX - - RPC_REQUEST_STANDARD_NAME \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/genesis.proto b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/genesis.proto deleted file mode 100644 index c7e4904c..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/genesis.proto +++ /dev/null @@ -1,41 +0,0 @@ -syntax = "proto3"; -package dummyware.v1; - -import "gogoproto/gogo.proto"; - -option go_package = "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types"; - -// GenesisState defines the packetforward genesis state -message GenesisState { - Params params = 1 [ (gogoproto.nullable) = false ]; - - // key - information about forwarded packet: src_channel - // (parsedReceiver.Channel), src_port (parsedReceiver.Port), sequence value - - // information about original packet for refunding if necessary: retries, - // srcPacketSender, srcPacket.DestinationChannel, srcPacket.DestinationPort - map in_flight_packets = 2 [ - (gogoproto.moretags) = "yaml:\"in_flight_packets\"", - (gogoproto.nullable) = false - ]; -} - -// Params defines the set of packetforward parameters. -message Params { -} - -// InFlightPacket contains information about original packet for -// writing the acknowledgement and refunding if necessary. -message InFlightPacket { - string original_sender_address = 1; - string refund_channel_id = 2; - string refund_port_id = 3; - string packet_src_channel_id = 4; - string packet_src_port_id = 5; - uint64 packet_timeout_timestamp = 6; - string packet_timeout_height = 7; - bytes packet_data = 8; - uint64 refund_sequence = 9; - int32 retries_remaining = 10; - uint64 timeout = 11; - bool nonrefundable = 12; -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/query.proto b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/query.proto deleted file mode 100644 index 53ca1dcf..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/query.proto +++ /dev/null @@ -1,24 +0,0 @@ -syntax = "proto3"; -package dummyware.v1; - -import "google/api/annotations.proto"; -import "dummyware/v1/genesis.proto"; - -option go_package = "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types"; - -// Query provides defines the gRPC querier service. -service Query { - // Params queries all parameters of the packetforward module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/ibc/apps/dummyware/v1/params"; - } -} - -// QueryParamsRequest is the request type for the Query/Params RPC method. -message QueryParamsRequest {} - -// QueryParamsResponse is the response type for the Query/Params RPC method. -message QueryParamsResponse { - // params defines the parameters of the module. - Params params = 1; -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/tx.proto b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/tx.proto deleted file mode 100644 index 79e9e853..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/proto/dummyware/v1/tx.proto +++ /dev/null @@ -1,39 +0,0 @@ -syntax = "proto3"; -package dummyware.v1; - -import "cosmos/msg/v1/msg.proto"; -import "dummyware/v1/genesis.proto"; -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types"; - -// Msg defines the Msg service. -service Msg { - // UpdateParams defines a governance operation for updating the x/packetforward module - // parameters. The authority is hard-coded to the x/gov module account. - // - // Since: cosmos-sdk 0.47 - rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); -} - -// MsgUpdateParams is the Msg/UpdateParams request type. -// -// Since: cosmos-sdk 0.47 -message MsgUpdateParams { - option (cosmos.msg.v1.signer) = "authority"; - - // authority is the address of the governance account. - string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // params defines the x/packetforward parameters to update. - // - // NOTE: All parameters must be supplied. - Params params = 2 [(gogoproto.nullable) = false]; -} - -// MsgUpdateParamsResponse defines the response structure for executing a -// MsgUpdateParams message. -// -// Since: cosmos-sdk 0.47 -message MsgUpdateParamsResponse {} \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/scripts/protocgen.sh b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/scripts/protocgen.sh deleted file mode 100644 index 5b05c508..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/scripts/protocgen.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -eo pipefail - -echo "Generating gogo proto code" -cd proto - -buf generate --template buf.gen.gogo.yaml $file - -cd .. - -# move proto files to the right places -# -# Note: Proto files are suffixed with the current binary version. -cp -r github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/testing/simapp/x/dummyware/types/* types/ -rm -rf github.com \ No newline at end of file diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/codec.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/codec.go deleted file mode 100644 index 0d9e2b1b..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/codec.go +++ /dev/null @@ -1,42 +0,0 @@ -package types - -import ( - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/codec/legacy" - "github.com/cosmos/cosmos-sdk/codec/types" - cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/msgservice" - authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" -) - -var ( - amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewAminoCodec(amino) -) - -func init() { - RegisterLegacyAminoCodec(amino) - cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) - - // Register all Amino interfaces and concrete types on the authz Amino codec - // so that this can later be used to properly serialize MsgGrant and MsgExec - // instances. - RegisterLegacyAminoCodec(authzcodec.Amino) -} - -// RegisterLegacyAminoCodec registers concrete types on the LegacyAmino codec -func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(Params{}, "dummyware/Params", nil) - legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "dummyware/MsgUpdateParams") -} - -func RegisterInterfaces(registry types.InterfaceRegistry) { - registry.RegisterImplementations( - (*sdk.Msg)(nil), - &MsgUpdateParams{}, - ) - - msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go deleted file mode 100644 index a175f5f8..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/expected_keepers.go +++ /dev/null @@ -1,27 +0,0 @@ -package types - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - - "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" -) - -// TransferKeeper defines the expected transfer keeper -type TransferKeeper interface { - Transfer(ctx context.Context, msg *types.MsgTransfer) (*types.MsgTransferResponse, error) - DenomPathFromHash(ctx sdk.Context, denom string) (string, error) - GetTotalEscrowForDenom(ctx sdk.Context, denom string) sdk.Coin - SetTotalEscrowForDenom(ctx sdk.Context, coin sdk.Coin) -} - -// ChannelKeeper defines the expected IBC channel keeper -type ChannelKeeper interface { - GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) - GetPacketCommitment(ctx sdk.Context, portID, channelID string, sequence uint64) []byte - GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) - LookupModuleByChannel(ctx sdk.Context, portID, channelID string) (string, *capabilitytypes.Capability, error) -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go deleted file mode 100644 index dd87f1c1..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.go +++ /dev/null @@ -1,20 +0,0 @@ -package types - -// NewGenesisState creates a pfm GenesisState instance. -func NewGenesisState(params Params, inFlightPackets map[string]InFlightPacket) *GenesisState { - return &GenesisState{ - Params: params, - } -} - -// DefaultGenesisState returns a GenesisState with a default fee percentage of 0. -func DefaultGenesisState() *GenesisState { - return &GenesisState{ - Params: DefaultParams(), - } -} - -// Validate performs basic genesis state validation returning an error upon any failure. -func (gs GenesisState) Validate() error { - return gs.Params.Validate() -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.pb.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.pb.go deleted file mode 100644 index 7e9e7f07..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/genesis.pb.go +++ /dev/null @@ -1,1302 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: dummyware/v1/genesis.proto - -package types - -import ( - fmt "fmt" - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// GenesisState defines the packetforward genesis state -type GenesisState struct { - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` - // key - information about forwarded packet: src_channel - // (parsedReceiver.Channel), src_port (parsedReceiver.Port), sequence value - - // information about original packet for refunding if necessary: retries, - // srcPacketSender, srcPacket.DestinationChannel, srcPacket.DestinationPort - InFlightPackets map[string]InFlightPacket `protobuf:"bytes,2,rep,name=in_flight_packets,json=inFlightPackets,proto3" json:"in_flight_packets" yaml:"in_flight_packets" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (m *GenesisState) Reset() { *m = GenesisState{} } -func (m *GenesisState) String() string { return proto.CompactTextString(m) } -func (*GenesisState) ProtoMessage() {} -func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_5e57ced72fbee3ae, []int{0} -} -func (m *GenesisState) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GenesisState.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 *GenesisState) XXX_Merge(src proto.Message) { - xxx_messageInfo_GenesisState.Merge(m, src) -} -func (m *GenesisState) XXX_Size() int { - return m.Size() -} -func (m *GenesisState) XXX_DiscardUnknown() { - xxx_messageInfo_GenesisState.DiscardUnknown(m) -} - -var xxx_messageInfo_GenesisState proto.InternalMessageInfo - -func (m *GenesisState) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - -func (m *GenesisState) GetInFlightPackets() map[string]InFlightPacket { - if m != nil { - return m.InFlightPackets - } - return nil -} - -// Params defines the set of packetforward parameters. -type Params struct { -} - -func (m *Params) Reset() { *m = Params{} } -func (m *Params) String() string { return proto.CompactTextString(m) } -func (*Params) ProtoMessage() {} -func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_5e57ced72fbee3ae, []int{1} -} -func (m *Params) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { - xxx_messageInfo_Params.Merge(m, src) -} -func (m *Params) XXX_Size() int { - return m.Size() -} -func (m *Params) XXX_DiscardUnknown() { - xxx_messageInfo_Params.DiscardUnknown(m) -} - -var xxx_messageInfo_Params proto.InternalMessageInfo - -// InFlightPacket contains information about original packet for -// writing the acknowledgement and refunding if necessary. -type InFlightPacket struct { - OriginalSenderAddress string `protobuf:"bytes,1,opt,name=original_sender_address,json=originalSenderAddress,proto3" json:"original_sender_address,omitempty"` - RefundChannelId string `protobuf:"bytes,2,opt,name=refund_channel_id,json=refundChannelId,proto3" json:"refund_channel_id,omitempty"` - RefundPortId string `protobuf:"bytes,3,opt,name=refund_port_id,json=refundPortId,proto3" json:"refund_port_id,omitempty"` - PacketSrcChannelId string `protobuf:"bytes,4,opt,name=packet_src_channel_id,json=packetSrcChannelId,proto3" json:"packet_src_channel_id,omitempty"` - PacketSrcPortId string `protobuf:"bytes,5,opt,name=packet_src_port_id,json=packetSrcPortId,proto3" json:"packet_src_port_id,omitempty"` - PacketTimeoutTimestamp uint64 `protobuf:"varint,6,opt,name=packet_timeout_timestamp,json=packetTimeoutTimestamp,proto3" json:"packet_timeout_timestamp,omitempty"` - PacketTimeoutHeight string `protobuf:"bytes,7,opt,name=packet_timeout_height,json=packetTimeoutHeight,proto3" json:"packet_timeout_height,omitempty"` - PacketData []byte `protobuf:"bytes,8,opt,name=packet_data,json=packetData,proto3" json:"packet_data,omitempty"` - RefundSequence uint64 `protobuf:"varint,9,opt,name=refund_sequence,json=refundSequence,proto3" json:"refund_sequence,omitempty"` - RetriesRemaining int32 `protobuf:"varint,10,opt,name=retries_remaining,json=retriesRemaining,proto3" json:"retries_remaining,omitempty"` - Timeout uint64 `protobuf:"varint,11,opt,name=timeout,proto3" json:"timeout,omitempty"` - Nonrefundable bool `protobuf:"varint,12,opt,name=nonrefundable,proto3" json:"nonrefundable,omitempty"` -} - -func (m *InFlightPacket) Reset() { *m = InFlightPacket{} } -func (m *InFlightPacket) String() string { return proto.CompactTextString(m) } -func (*InFlightPacket) ProtoMessage() {} -func (*InFlightPacket) Descriptor() ([]byte, []int) { - return fileDescriptor_5e57ced72fbee3ae, []int{2} -} -func (m *InFlightPacket) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *InFlightPacket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_InFlightPacket.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 *InFlightPacket) XXX_Merge(src proto.Message) { - xxx_messageInfo_InFlightPacket.Merge(m, src) -} -func (m *InFlightPacket) XXX_Size() int { - return m.Size() -} -func (m *InFlightPacket) XXX_DiscardUnknown() { - xxx_messageInfo_InFlightPacket.DiscardUnknown(m) -} - -var xxx_messageInfo_InFlightPacket proto.InternalMessageInfo - -func (m *InFlightPacket) GetOriginalSenderAddress() string { - if m != nil { - return m.OriginalSenderAddress - } - return "" -} - -func (m *InFlightPacket) GetRefundChannelId() string { - if m != nil { - return m.RefundChannelId - } - return "" -} - -func (m *InFlightPacket) GetRefundPortId() string { - if m != nil { - return m.RefundPortId - } - return "" -} - -func (m *InFlightPacket) GetPacketSrcChannelId() string { - if m != nil { - return m.PacketSrcChannelId - } - return "" -} - -func (m *InFlightPacket) GetPacketSrcPortId() string { - if m != nil { - return m.PacketSrcPortId - } - return "" -} - -func (m *InFlightPacket) GetPacketTimeoutTimestamp() uint64 { - if m != nil { - return m.PacketTimeoutTimestamp - } - return 0 -} - -func (m *InFlightPacket) GetPacketTimeoutHeight() string { - if m != nil { - return m.PacketTimeoutHeight - } - return "" -} - -func (m *InFlightPacket) GetPacketData() []byte { - if m != nil { - return m.PacketData - } - return nil -} - -func (m *InFlightPacket) GetRefundSequence() uint64 { - if m != nil { - return m.RefundSequence - } - return 0 -} - -func (m *InFlightPacket) GetRetriesRemaining() int32 { - if m != nil { - return m.RetriesRemaining - } - return 0 -} - -func (m *InFlightPacket) GetTimeout() uint64 { - if m != nil { - return m.Timeout - } - return 0 -} - -func (m *InFlightPacket) GetNonrefundable() bool { - if m != nil { - return m.Nonrefundable - } - return false -} - -func init() { - proto.RegisterType((*GenesisState)(nil), "dummyware.v1.GenesisState") - proto.RegisterMapType((map[string]InFlightPacket)(nil), "dummyware.v1.GenesisState.InFlightPacketsEntry") - proto.RegisterType((*Params)(nil), "dummyware.v1.Params") - proto.RegisterType((*InFlightPacket)(nil), "dummyware.v1.InFlightPacket") -} - -func init() { proto.RegisterFile("dummyware/v1/genesis.proto", fileDescriptor_5e57ced72fbee3ae) } - -var fileDescriptor_5e57ced72fbee3ae = []byte{ - // 604 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x93, 0x4f, 0x4f, 0xdb, 0x30, - 0x18, 0xc6, 0x9b, 0x52, 0x0a, 0xb8, 0x1d, 0x7f, 0x3c, 0xd8, 0x2c, 0x34, 0x95, 0xa8, 0x42, 0x5a, - 0x35, 0x44, 0x23, 0x3a, 0x69, 0x43, 0xdc, 0xc6, 0xfe, 0x72, 0x43, 0x29, 0xa7, 0x5d, 0x32, 0x37, - 0x36, 0xa9, 0x45, 0x62, 0x67, 0xb6, 0x53, 0xd6, 0x03, 0xdf, 0x61, 0xdf, 0x60, 0x87, 0x7d, 0x19, - 0x8e, 0x1c, 0x77, 0x42, 0x13, 0x7c, 0x83, 0x7d, 0x82, 0x29, 0x76, 0x52, 0x1a, 0x6d, 0xa7, 0x38, - 0xef, 0xef, 0x79, 0x1e, 0xbf, 0xef, 0x2b, 0x19, 0x6c, 0x93, 0x2c, 0x49, 0xa6, 0x97, 0x58, 0x52, - 0x6f, 0x72, 0xe0, 0x45, 0x94, 0x53, 0xc5, 0x54, 0x3f, 0x95, 0x42, 0x0b, 0xd8, 0x9e, 0xb1, 0xfe, - 0xe4, 0x60, 0x7b, 0x33, 0x12, 0x91, 0x30, 0xc0, 0xcb, 0x4f, 0x56, 0xd3, 0xfd, 0x59, 0x07, 0xed, - 0x8f, 0xd6, 0x35, 0xd4, 0x58, 0x53, 0x38, 0x00, 0xcd, 0x14, 0x4b, 0x9c, 0x28, 0xe4, 0xb8, 0x4e, - 0xaf, 0x35, 0xd8, 0xec, 0xcf, 0xa7, 0xf4, 0x4f, 0x0d, 0x3b, 0x6e, 0x5c, 0xdf, 0xee, 0xd4, 0xfc, - 0x42, 0x09, 0xaf, 0xc0, 0x06, 0xe3, 0xc1, 0x79, 0xcc, 0xa2, 0xb1, 0x0e, 0x52, 0x1c, 0x5e, 0x50, - 0xad, 0x50, 0xdd, 0x5d, 0xe8, 0xb5, 0x06, 0x5e, 0xd5, 0x3e, 0x7f, 0x55, 0xff, 0x84, 0x7f, 0x30, - 0x96, 0x53, 0xeb, 0x78, 0xcf, 0xb5, 0x9c, 0x1e, 0xbb, 0x79, 0xf2, 0x9f, 0xdb, 0x1d, 0x34, 0xc5, - 0x49, 0x7c, 0xd4, 0xfd, 0x27, 0xb7, 0xeb, 0xaf, 0xb1, 0xaa, 0x6f, 0xfb, 0x0b, 0xd8, 0xfc, 0x5f, - 0x14, 0x5c, 0x07, 0x0b, 0x17, 0x74, 0x6a, 0xe6, 0x58, 0xf1, 0xf3, 0x23, 0x1c, 0x80, 0xc5, 0x09, - 0x8e, 0x33, 0x8a, 0xea, 0x66, 0xb6, 0x67, 0xd5, 0xe6, 0xaa, 0x21, 0xbe, 0x95, 0x1e, 0xd5, 0x0f, - 0x9d, 0xee, 0x32, 0x68, 0xda, 0xc1, 0xbb, 0x3f, 0x1a, 0x60, 0xb5, 0xaa, 0x83, 0xaf, 0xc0, 0x53, - 0x21, 0x59, 0xc4, 0x38, 0x8e, 0x03, 0x45, 0x39, 0xa1, 0x32, 0xc0, 0x84, 0x48, 0xaa, 0x54, 0x71, - 0xf5, 0x56, 0x89, 0x87, 0x86, 0xbe, 0xb1, 0x10, 0xbe, 0x00, 0x1b, 0x92, 0x9e, 0x67, 0x9c, 0x04, - 0xe1, 0x18, 0x73, 0x4e, 0xe3, 0x80, 0x11, 0xd3, 0xd8, 0x8a, 0xbf, 0x66, 0xc1, 0x5b, 0x5b, 0x3f, - 0x21, 0x70, 0x17, 0xac, 0x16, 0xda, 0x54, 0x48, 0x9d, 0x0b, 0x17, 0x8c, 0xb0, 0x6d, 0xab, 0xa7, - 0x42, 0xea, 0x13, 0x02, 0x0f, 0xc0, 0x96, 0xdd, 0x52, 0xa0, 0x64, 0x38, 0x9f, 0xda, 0x30, 0x62, - 0x68, 0xe1, 0x50, 0x86, 0x0f, 0xc1, 0x7b, 0x00, 0xce, 0x59, 0xca, 0xf0, 0x45, 0xdb, 0xc5, 0x4c, - 0x5f, 0xe4, 0x1f, 0x02, 0x54, 0x88, 0x35, 0x4b, 0xa8, 0xc8, 0xec, 0x57, 0x69, 0x9c, 0xa4, 0xa8, - 0xe9, 0x3a, 0xbd, 0x86, 0xff, 0xc4, 0xf2, 0x33, 0x8b, 0xcf, 0x4a, 0x0a, 0x07, 0xb3, 0xce, 0x4a, - 0xe7, 0x98, 0xe6, 0x2b, 0x44, 0x4b, 0xe6, 0xa6, 0xc7, 0x15, 0xdb, 0x27, 0x83, 0xe0, 0x0e, 0x68, - 0x15, 0x1e, 0x82, 0x35, 0x46, 0xcb, 0xae, 0xd3, 0x6b, 0xfb, 0xc0, 0x96, 0xde, 0x61, 0x8d, 0xe1, - 0x73, 0x50, 0xec, 0x29, 0x50, 0xf4, 0x6b, 0x46, 0x79, 0x48, 0xd1, 0x8a, 0xe9, 0xa2, 0xd8, 0xd5, - 0xb0, 0xa8, 0xc2, 0xbd, 0x7c, 0xd3, 0x5a, 0x32, 0xaa, 0x02, 0x49, 0x13, 0xcc, 0x38, 0xe3, 0x11, - 0x02, 0xae, 0xd3, 0x5b, 0xf4, 0xd7, 0x0b, 0xe0, 0x97, 0x75, 0x88, 0xc0, 0x52, 0xd1, 0x23, 0x6a, - 0x99, 0xb4, 0xf2, 0x17, 0xee, 0x82, 0x47, 0x5c, 0x70, 0x9b, 0x8d, 0x47, 0x31, 0x45, 0x6d, 0xd7, - 0xe9, 0x2d, 0xfb, 0xd5, 0xe2, 0xf1, 0xd5, 0xf5, 0x5d, 0xc7, 0xb9, 0xb9, 0xeb, 0x38, 0xbf, 0xef, - 0x3a, 0xce, 0xf7, 0xfb, 0x4e, 0xed, 0xe6, 0xbe, 0x53, 0xfb, 0x75, 0xdf, 0xa9, 0x7d, 0x0e, 0x23, - 0xa6, 0xc7, 0xd9, 0xa8, 0x1f, 0x8a, 0xc4, 0x0b, 0x85, 0x4a, 0x84, 0xf2, 0xd8, 0x28, 0xdc, 0xc7, - 0x69, 0xaa, 0xbc, 0x84, 0x11, 0x12, 0x53, 0xf3, 0x8e, 0xed, 0x84, 0xfb, 0xe7, 0x42, 0x5e, 0x62, - 0x49, 0xf6, 0xe7, 0xc8, 0xe4, 0xb5, 0xa7, 0xa9, 0xd2, 0x8c, 0x47, 0x9e, 0x62, 0x09, 0x4e, 0x53, - 0xef, 0x9b, 0xf7, 0xf0, 0xfe, 0xf5, 0x34, 0xa5, 0x6a, 0xd4, 0x34, 0xef, 0xfa, 0xe5, 0xdf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xe1, 0x8f, 0x4d, 0xad, 0x19, 0x04, 0x00, 0x00, -} - -func (m *GenesisState) 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 *GenesisState) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.InFlightPackets) > 0 { - for k := range m.InFlightPackets { - v := m.InFlightPackets[k] - baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintGenesis(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintGenesis(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x12 - } - } - { - size, err := m.Params.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 (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *InFlightPacket) 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 *InFlightPacket) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *InFlightPacket) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Nonrefundable { - i-- - if m.Nonrefundable { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x60 - } - if m.Timeout != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.Timeout)) - i-- - dAtA[i] = 0x58 - } - if m.RetriesRemaining != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.RetriesRemaining)) - i-- - dAtA[i] = 0x50 - } - if m.RefundSequence != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.RefundSequence)) - i-- - dAtA[i] = 0x48 - } - if len(m.PacketData) > 0 { - i -= len(m.PacketData) - copy(dAtA[i:], m.PacketData) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.PacketData))) - i-- - dAtA[i] = 0x42 - } - if len(m.PacketTimeoutHeight) > 0 { - i -= len(m.PacketTimeoutHeight) - copy(dAtA[i:], m.PacketTimeoutHeight) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.PacketTimeoutHeight))) - i-- - dAtA[i] = 0x3a - } - if m.PacketTimeoutTimestamp != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.PacketTimeoutTimestamp)) - i-- - dAtA[i] = 0x30 - } - if len(m.PacketSrcPortId) > 0 { - i -= len(m.PacketSrcPortId) - copy(dAtA[i:], m.PacketSrcPortId) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.PacketSrcPortId))) - i-- - dAtA[i] = 0x2a - } - if len(m.PacketSrcChannelId) > 0 { - i -= len(m.PacketSrcChannelId) - copy(dAtA[i:], m.PacketSrcChannelId) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.PacketSrcChannelId))) - i-- - dAtA[i] = 0x22 - } - if len(m.RefundPortId) > 0 { - i -= len(m.RefundPortId) - copy(dAtA[i:], m.RefundPortId) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.RefundPortId))) - i-- - dAtA[i] = 0x1a - } - if len(m.RefundChannelId) > 0 { - i -= len(m.RefundChannelId) - copy(dAtA[i:], m.RefundChannelId) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.RefundChannelId))) - i-- - dAtA[i] = 0x12 - } - if len(m.OriginalSenderAddress) > 0 { - i -= len(m.OriginalSenderAddress) - copy(dAtA[i:], m.OriginalSenderAddress) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.OriginalSenderAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { - offset -= sovGenesis(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *GenesisState) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) - if len(m.InFlightPackets) > 0 { - for k, v := range m.InFlightPackets { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenesis(uint64(len(k))) + 1 + l + sovGenesis(uint64(l)) - n += mapEntrySize + 1 + sovGenesis(uint64(mapEntrySize)) - } - } - return n -} - -func (m *Params) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *InFlightPacket) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.OriginalSenderAddress) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - l = len(m.RefundChannelId) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - l = len(m.RefundPortId) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - l = len(m.PacketSrcChannelId) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - l = len(m.PacketSrcPortId) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - if m.PacketTimeoutTimestamp != 0 { - n += 1 + sovGenesis(uint64(m.PacketTimeoutTimestamp)) - } - l = len(m.PacketTimeoutHeight) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - l = len(m.PacketData) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - if m.RefundSequence != 0 { - n += 1 + sovGenesis(uint64(m.RefundSequence)) - } - if m.RetriesRemaining != 0 { - n += 1 + sovGenesis(uint64(m.RetriesRemaining)) - } - if m.Timeout != 0 { - n += 1 + sovGenesis(uint64(m.Timeout)) - } - if m.Nonrefundable { - n += 2 - } - return n -} - -func sovGenesis(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozGenesis(x uint64) (n int) { - return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *GenesisState) 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: GenesisState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", 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.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InFlightPackets", 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 m.InFlightPackets == nil { - m.InFlightPackets = make(map[string]InFlightPacket) - } - var mapkey string - mapvalue := &InFlightPacket{} - for iNdEx < postIndex { - entryPreIndex := 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) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenesis - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthGenesis - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthGenesis - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthGenesis - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &InFlightPacket{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.InFlightPackets[mapkey] = *mapvalue - 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 *Params) 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: Params: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - 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 *InFlightPacket) 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: InFlightPacket: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InFlightPacket: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OriginalSenderAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - 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 ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.OriginalSenderAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RefundChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - 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 ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RefundChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RefundPortId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - 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 ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RefundPortId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PacketSrcChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - 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 ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PacketSrcChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PacketSrcPortId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - 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 ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PacketSrcPortId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PacketTimeoutTimestamp", wireType) - } - m.PacketTimeoutTimestamp = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PacketTimeoutTimestamp |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PacketTimeoutHeight", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - 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 ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PacketTimeoutHeight = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PacketData", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PacketData = append(m.PacketData[:0], dAtA[iNdEx:postIndex]...) - if m.PacketData == nil { - m.PacketData = []byte{} - } - iNdEx = postIndex - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RefundSequence", wireType) - } - m.RefundSequence = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RefundSequence |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RetriesRemaining", wireType) - } - m.RetriesRemaining = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RetriesRemaining |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) - } - m.Timeout = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Timeout |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Nonrefundable", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Nonrefundable = bool(v != 0) - 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 skipGenesis(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthGenesis - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupGenesis - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthGenesis - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") -) diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go deleted file mode 100644 index 51526a65..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/keys.go +++ /dev/null @@ -1,23 +0,0 @@ -package types - -import fmt "fmt" - -const ( - // ModuleName defines the module name - ModuleName = "dummyware" - - // StoreKey is the store key string for IBC transfer - StoreKey = ModuleName - - // RouterKey is the message route for IBC transfer - RouterKey = ModuleName - - // QuerierRoute is the querier route for IBC transfer - QuerierRoute = ModuleName -) - -var ParamsKey = []byte{0x00} - -func RefundPacketKey(channelID, portID string, sequence uint64) []byte { - return []byte(fmt.Sprintf("%s/%s/%d", channelID, portID, sequence)) -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/msgs.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/msgs.go deleted file mode 100644 index e0ce8a24..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/msgs.go +++ /dev/null @@ -1,29 +0,0 @@ -package types - -import ( - "cosmossdk.io/errors" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -var _ sdk.Msg = &MsgUpdateParams{} - -// GetSignBytes implements the LegacyMsg interface. -func (m MsgUpdateParams) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) -} - -// GetSigners returns the expected signers for a MsgUpdateParams message. -func (m *MsgUpdateParams) GetSigners() []sdk.AccAddress { - addr, _ := sdk.AccAddressFromBech32(m.Authority) - return []sdk.AccAddress{addr} -} - -// ValidateBasic does a sanity check on the provided data. -func (m *MsgUpdateParams) ValidateBasic() error { - if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { - return errors.Wrap(err, "invalid authority address") - } - - return m.Params.Validate() -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go deleted file mode 100644 index 9894dfe1..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params.go +++ /dev/null @@ -1,16 +0,0 @@ -package types - -// NewParams creates a new parameter configuration for the module. -func NewParams() Params { - return Params{} -} - -// DefaultParams is the default parameter configuration for the module. -func DefaultParams() Params { - return NewParams() -} - -// Validate the pfm module parameters. -func (p Params) Validate() error { - return nil -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go deleted file mode 100644 index 8b8898b2..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/params_legacy.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -NOTE: Usage of x/params to manage parameters is deprecated in favor of x/gov -controlled execution of MsgUpdateParams messages. These types remains solely -for migration purposes and will be removed in a future release. -*/ -package types - -import ( - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" -) - -// ParamKeyTable type declaration for parameters. -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - -// ParamSetPairs implements params.ParamSet. -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{} -} diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.go deleted file mode 100644 index 097c9899..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.go +++ /dev/null @@ -1,542 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: dummyware/v1/query.proto - -package types - -import ( - context "context" - fmt "fmt" - grpc1 "github.com/cosmos/gogoproto/grpc" - proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/genproto/googleapis/api/annotations" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// QueryParamsRequest is the request type for the Query/Params RPC method. -type QueryParamsRequest struct { -} - -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_a5ca4900db76f35a, []int{0} -} -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryParamsRequest.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 *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) -} -func (m *QueryParamsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo - -// QueryParamsResponse is the response type for the Query/Params RPC method. -type QueryParamsResponse struct { - // params defines the parameters of the module. - Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` -} - -func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } -func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryParamsResponse) ProtoMessage() {} -func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_a5ca4900db76f35a, []int{1} -} -func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryParamsResponse.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 *QueryParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsResponse.Merge(m, src) -} -func (m *QueryParamsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo - -func (m *QueryParamsResponse) GetParams() *Params { - if m != nil { - return m.Params - } - return nil -} - -func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "dummyware.v1.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "dummyware.v1.QueryParamsResponse") -} - -func init() { proto.RegisterFile("dummyware/v1/query.proto", fileDescriptor_a5ca4900db76f35a) } - -var fileDescriptor_a5ca4900db76f35a = []byte{ - // 300 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xbf, 0x4e, 0xc3, 0x30, - 0x10, 0xc6, 0x1b, 0x24, 0x3a, 0x18, 0x26, 0xd3, 0xa1, 0x8a, 0xc0, 0x94, 0x4a, 0x48, 0x0c, 0x34, - 0x56, 0xcb, 0xc0, 0x0e, 0x2f, 0x00, 0x8c, 0x6c, 0x6e, 0x72, 0x04, 0x8b, 0xfa, 0x4f, 0x7d, 0x4e, - 0x4b, 0x87, 0x2e, 0x3c, 0x01, 0x12, 0x2f, 0xc5, 0x58, 0x89, 0x85, 0x11, 0x25, 0x3c, 0x08, 0x6a, - 0x12, 0xa1, 0x44, 0x48, 0xac, 0xf7, 0xfd, 0xfc, 0xbb, 0xcf, 0x47, 0xfa, 0x49, 0xa6, 0xd4, 0x6a, - 0x29, 0x1c, 0xf0, 0xc5, 0x98, 0xcf, 0x33, 0x70, 0xab, 0xc8, 0x3a, 0xe3, 0x0d, 0xdd, 0xff, 0x4d, - 0xa2, 0xc5, 0x38, 0x3c, 0x4c, 0x8d, 0x49, 0x67, 0xc0, 0x85, 0x95, 0x5c, 0x68, 0x6d, 0xbc, 0xf0, - 0xd2, 0x68, 0xac, 0xd8, 0x30, 0x6c, 0x59, 0x52, 0xd0, 0x80, 0xb2, 0xce, 0x86, 0x3d, 0x42, 0x6f, - 0xb7, 0xda, 0x1b, 0xe1, 0x84, 0xc2, 0x3b, 0x98, 0x67, 0x80, 0x7e, 0x78, 0x4d, 0x0e, 0x5a, 0x53, - 0xb4, 0x46, 0x23, 0xd0, 0x73, 0xd2, 0xb5, 0xe5, 0xa4, 0x1f, 0x0c, 0x82, 0xb3, 0xbd, 0x49, 0x2f, - 0x6a, 0xb6, 0x88, 0x6a, 0xba, 0x66, 0x26, 0x6b, 0xb2, 0x5b, 0x4a, 0xa8, 0x27, 0xdd, 0x2a, 0xa2, - 0x83, 0xf6, 0x83, 0xbf, 0x9b, 0xc3, 0x93, 0x7f, 0x88, 0xaa, 0xc5, 0xf0, 0xf4, 0xe5, 0xe3, 0xfb, - 0x6d, 0xe7, 0x98, 0x1e, 0x71, 0x39, 0x8d, 0xb9, 0xb0, 0x16, 0x79, 0xeb, 0x83, 0xd5, 0xfa, 0xab, - 0xf5, 0x7b, 0xce, 0x82, 0x4d, 0xce, 0x82, 0xaf, 0x9c, 0x05, 0xaf, 0x05, 0xeb, 0x6c, 0x0a, 0xd6, - 0xf9, 0x2c, 0x58, 0xe7, 0x3e, 0x4e, 0xa5, 0x7f, 0xcc, 0xa6, 0x51, 0x6c, 0x14, 0x8f, 0x0d, 0x2a, - 0x83, 0x5b, 0xd3, 0xa8, 0x34, 0x29, 0x99, 0x24, 0x33, 0x28, 0x55, 0x56, 0xc4, 0x4f, 0xe0, 0x47, - 0x0f, 0xc6, 0x2d, 0x85, 0x4b, 0x46, 0x8d, 0x64, 0x71, 0xc9, 0x3d, 0xa0, 0x97, 0x3a, 0xe5, 0x28, - 0x95, 0xb0, 0x96, 0x3f, 0x37, 0x2a, 0xf8, 0x95, 0x05, 0x9c, 0x76, 0xcb, 0xfb, 0x5e, 0xfc, 0x04, - 0x00, 0x00, 0xff, 0xff, 0xce, 0x5c, 0x9d, 0x0c, 0xc3, 0x01, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - // Params queries all parameters of the packetforward module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) -} - -type queryClient struct { - cc grpc1.ClientConn -} - -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} -} - -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/dummyware.v1.Query/Params", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// QueryServer is the server API for Query service. -type QueryServer interface { - // Params queries all parameters of the packetforward module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) -} - -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { -} - -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") -} - -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) -} - -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/dummyware.v1.Query/Params", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "dummyware.v1.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Params", - Handler: _Query_Params_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "dummyware/v1/query.proto", -} - -func (m *QueryParamsRequest) 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 *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryParamsResponse) 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 *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Params != nil { - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Params != nil { - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *QueryParamsRequest) 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 ErrIntOverflowQuery - } - 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: QueryParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryParamsResponse) 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 ErrIntOverflowQuery - } - 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: QueryParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Params == nil { - m.Params = &Params{} - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipQuery(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthQuery - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupQuery - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthQuery - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") -) diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.gw.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.gw.go deleted file mode 100644 index 9d7d84f0..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/query.pb.gw.go +++ /dev/null @@ -1,153 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: dummyware/v1/query.proto - -/* -Package types is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package types - -import ( - "context" - "io" - "net/http" - - "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage -var _ = metadata.Join - -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata - - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata - - msg, err := server.Params(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". -// UnaryRPC :call QueryServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. -func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterQueryHandler(ctx, mux, conn) -} - -// RegisterQueryHandler registers the http handlers for service Query to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) -} - -// RegisterQueryHandlerClient registers the http handlers for service Query -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "QueryClient" to call the correct interceptors. -func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ibc", "apps", "dummyware", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) -) - -var ( - forward_Query_Params_0 = runtime.ForwardResponseMessage -) diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/tx.pb.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/tx.pb.go deleted file mode 100644 index 98929557..00000000 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/types/tx.pb.go +++ /dev/null @@ -1,606 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: dummyware/v1/tx.proto - -package types - -import ( - context "context" - fmt "fmt" - _ "github.com/cosmos/cosmos-proto" - _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/cosmos/gogoproto/gogoproto" - grpc1 "github.com/cosmos/gogoproto/grpc" - proto "github.com/cosmos/gogoproto/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// MsgUpdateParams is the Msg/UpdateParams request type. -// -// Since: cosmos-sdk 0.47 -type MsgUpdateParams struct { - // authority is the address of the governance account. - Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` - // params defines the x/packetforward parameters to update. - // - // NOTE: All parameters must be supplied. - Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` -} - -func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } -func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } -func (*MsgUpdateParams) ProtoMessage() {} -func (*MsgUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_c548eea5d504be9d, []int{0} -} -func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgUpdateParams.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 *MsgUpdateParams) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgUpdateParams.Merge(m, src) -} -func (m *MsgUpdateParams) XXX_Size() int { - return m.Size() -} -func (m *MsgUpdateParams) XXX_DiscardUnknown() { - xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo - -func (m *MsgUpdateParams) GetAuthority() string { - if m != nil { - return m.Authority - } - return "" -} - -func (m *MsgUpdateParams) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - -// MsgUpdateParamsResponse defines the response structure for executing a -// MsgUpdateParams message. -// -// Since: cosmos-sdk 0.47 -type MsgUpdateParamsResponse struct { -} - -func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } -func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } -func (*MsgUpdateParamsResponse) ProtoMessage() {} -func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c548eea5d504be9d, []int{1} -} -func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgUpdateParamsResponse.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 *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) -} -func (m *MsgUpdateParamsResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo - -func init() { - proto.RegisterType((*MsgUpdateParams)(nil), "dummyware.v1.MsgUpdateParams") - proto.RegisterType((*MsgUpdateParamsResponse)(nil), "dummyware.v1.MsgUpdateParamsResponse") -} - -func init() { proto.RegisterFile("dummyware/v1/tx.proto", fileDescriptor_c548eea5d504be9d) } - -var fileDescriptor_c548eea5d504be9d = []byte{ - // 358 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xcf, 0x4a, 0x2b, 0x31, - 0x14, 0xc6, 0x67, 0xee, 0xbd, 0x14, 0x3a, 0xb7, 0xdc, 0x0b, 0x43, 0xa5, 0xed, 0x80, 0x63, 0x29, - 0x08, 0x45, 0x98, 0x09, 0xad, 0xa0, 0xe0, 0xce, 0xee, 0x0b, 0x52, 0x75, 0xa3, 0x0b, 0x49, 0x27, - 0x31, 0x0d, 0x9a, 0x49, 0xc8, 0x49, 0xff, 0x2d, 0xdc, 0xb8, 0x17, 0x7c, 0x14, 0x17, 0x3e, 0x44, - 0x97, 0xc5, 0x95, 0x2b, 0x91, 0x76, 0xe1, 0x6b, 0x48, 0x67, 0x46, 0xfb, 0x67, 0xe1, 0xee, 0xe4, - 0x7c, 0xdf, 0xf9, 0xe5, 0x24, 0x9f, 0xb3, 0x45, 0xfa, 0x42, 0x8c, 0x87, 0x58, 0x53, 0x34, 0x68, - 0x20, 0x33, 0x0a, 0x95, 0x96, 0x46, 0xba, 0x85, 0xef, 0x76, 0x38, 0x68, 0x78, 0xa5, 0x48, 0x82, - 0x90, 0x80, 0x04, 0xb0, 0x85, 0x4b, 0x00, 0x4b, 0x6d, 0x9e, 0xb7, 0x36, 0xcd, 0x68, 0x4c, 0x81, - 0x43, 0xa6, 0x15, 0x99, 0x64, 0x32, 0x29, 0xd1, 0xa2, 0xca, 0xba, 0x95, 0x14, 0x75, 0x95, 0x0a, - 0xe9, 0x21, 0x95, 0x6a, 0x0f, 0xb6, 0xf3, 0xbf, 0x0d, 0xec, 0x5c, 0x11, 0x6c, 0xe8, 0x09, 0xd6, - 0x58, 0x80, 0x7b, 0xe0, 0xe4, 0x71, 0xdf, 0xf4, 0xa4, 0xe6, 0x66, 0x5c, 0xb6, 0xab, 0x76, 0x3d, - 0xdf, 0x2a, 0xbf, 0x3c, 0x07, 0xc5, 0x6c, 0xf0, 0x98, 0x10, 0x4d, 0x01, 0x4e, 0x8d, 0xe6, 0x31, - 0xeb, 0x2c, 0xad, 0x6e, 0xd3, 0xc9, 0xa9, 0x84, 0x50, 0xfe, 0x55, 0xb5, 0xeb, 0x7f, 0x9b, 0xc5, - 0x70, 0xf5, 0x41, 0x61, 0x4a, 0x6f, 0xfd, 0x99, 0xbc, 0xed, 0x58, 0x9d, 0xcc, 0x79, 0xf4, 0xef, - 0xfe, 0xe3, 0x69, 0x6f, 0xc9, 0xa8, 0x55, 0x9c, 0xd2, 0xc6, 0x3a, 0x1d, 0x0a, 0x4a, 0xc6, 0x40, - 0x9b, 0x97, 0xce, 0xef, 0x36, 0x30, 0xf7, 0xcc, 0x29, 0xac, 0x6d, 0xbb, 0xbd, 0x7e, 0xcb, 0xc6, - 0xb4, 0xb7, 0xfb, 0xa3, 0xfc, 0x05, 0x6f, 0xdd, 0x4d, 0x66, 0xbe, 0x3d, 0x9d, 0xf9, 0xf6, 0xfb, - 0xcc, 0xb7, 0x1f, 0xe7, 0xbe, 0x35, 0x9d, 0xfb, 0xd6, 0xeb, 0xdc, 0xb7, 0x2e, 0x22, 0xc6, 0x4d, - 0xaf, 0xdf, 0x0d, 0x23, 0x29, 0xb2, 0xaf, 0x43, 0xbc, 0x1b, 0x05, 0x58, 0x29, 0x40, 0x82, 0x13, - 0x72, 0x4b, 0x93, 0x28, 0x14, 0x8e, 0x6e, 0xa8, 0x09, 0xae, 0xa5, 0x1e, 0x62, 0x4d, 0x82, 0x15, - 0x65, 0x70, 0x88, 0x0c, 0x05, 0xc3, 0x63, 0x86, 0x80, 0x0b, 0xac, 0x14, 0x1a, 0xa1, 0x65, 0x84, - 0x66, 0xac, 0x28, 0x74, 0x73, 0x49, 0x1a, 0xfb, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8c, 0xa9, - 0x34, 0x10, 0x1a, 0x02, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// MsgClient is the client API for Msg service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type MsgClient interface { - // UpdateParams defines a governance operation for updating the x/packetforward module - // parameters. The authority is hard-coded to the x/gov module account. - // - // Since: cosmos-sdk 0.47 - UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { - out := new(MsgUpdateParamsResponse) - err := c.cc.Invoke(ctx, "/dummyware.v1.Msg/UpdateParams", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - // UpdateParams defines a governance operation for updating the x/packetforward module - // parameters. The authority is hard-coded to the x/gov module account. - // - // Since: cosmos-sdk 0.47 - UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgUpdateParams) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).UpdateParams(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/dummyware.v1.Msg/UpdateParams", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "dummyware.v1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "UpdateParams", - Handler: _Msg_UpdateParams_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "dummyware/v1/tx.proto", -} - -func (m *MsgUpdateParams) 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 *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.Authority) > 0 { - i -= len(m.Authority) - copy(dAtA[i:], m.Authority) - i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgUpdateParamsResponse) 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 *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func encodeVarintTx(dAtA []byte, offset int, v uint64) int { - offset -= sovTx(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *MsgUpdateParams) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Authority) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = m.Params.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgUpdateParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func sovTx(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozTx(x uint64) (n int) { - return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *MsgUpdateParams) 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 ErrIntOverflowTx - } - 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: MsgUpdateParams: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Authority", 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.Authority = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgUpdateParamsResponse) 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 ErrIntOverflowTx - } - 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: MsgUpdateParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipTx(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTx - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTx - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTx - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthTx - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupTx - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthTx - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") -) From c8c6a30ae5e52fb1b1cf89d7885bd69e34ff6077 Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Fri, 24 Nov 2023 11:35:10 -0700 Subject: [PATCH 06/10] Get source originating tests passing --- .../workflows/packet-forward-middleware.yml | 1 + middleware/packet-forward-middleware/Makefile | 3 + .../e2e/packet_forward_non_refundable_test.go | 474 ++++++++++++++++-- .../testing/simapp/app.go | 8 +- 4 files changed, 436 insertions(+), 50 deletions(-) diff --git a/.github/workflows/packet-forward-middleware.yml b/.github/workflows/packet-forward-middleware.yml index c52b05d2..c66ef380 100644 --- a/.github/workflows/packet-forward-middleware.yml +++ b/.github/workflows/packet-forward-middleware.yml @@ -81,6 +81,7 @@ jobs: - "ictest-forward" - "ictest-timeout" - "ictest-upgrade" + - "ictest-nonrefundable" fail-fast: false steps: diff --git a/middleware/packet-forward-middleware/Makefile b/middleware/packet-forward-middleware/Makefile index c4a03e40..16d652fd 100644 --- a/middleware/packet-forward-middleware/Makefile +++ b/middleware/packet-forward-middleware/Makefile @@ -227,6 +227,9 @@ ictest-timeout: ictest-upgrade: cd e2e && go test -race -v -timeout 15m -run TestPFMUpgrade . +ictest-nonrefundable: + cd e2e && go test -race -v -timeout 15m -run TestNonRefundable . + ############################################################################### ### Linting ### ############################################################################### diff --git a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go index e563cb92..396c18a9 100644 --- a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go +++ b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go @@ -3,6 +3,8 @@ package e2e import ( "context" "encoding/json" + "fmt" + "math/rand" "testing" "time" @@ -17,9 +19,36 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" + "golang.org/x/sync/errgroup" ) -func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { +var chars = []byte("abcdefghijklmnopqrstuvwxyz") + +// RandLowerCaseLetterString returns a lowercase letter string of given length +func RandLowerCaseLetterString(length int) string { + b := make([]byte, length) + for i := range b { + b[i] = chars[rand.Intn(len(chars))] + } + return string(b) +} + +func BuildWallets(ctx context.Context, testName string, chains ...ibc.Chain) ([]ibc.Wallet, error) { + users := make([]ibc.Wallet, len(chains)) + for i, chain := range chains { + chainCfg := chain.Config() + keyName := fmt.Sprintf("%s-%s-%s", testName, chainCfg.ChainID, RandLowerCaseLetterString(3)) + var err error + users[i], err = chain.BuildWallet(ctx, keyName, "") + if err != nil { + return nil, fmt.Errorf("failed to get source user wallet: %w", err) + } + } + + return users, nil +} + +func TestNonRefundable(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") } @@ -99,30 +128,27 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { initBal := math.NewInt(10_000_000_000) - userA, err := interchaintest.GetAndFundTestUserWithMnemonic( - ctx, - "test", - "dry system category detail slight boring flower magnet doll chimney neck entry net cluster february relax spare believe clarify wild clarify lounge frown outside", - initBal.Int64(), - chainA, - ) + users1 := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), initBal.Int64(), chainA, chainC) + users2 := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), initBal.Int64(), chainA, chainC) + users3 := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), initBal.Int64(), chainA, chainC) + users4 := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), initBal.Int64(), chainA, chainC) + users5 := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), initBal.Int64(), chainA, chainC) + users6 := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), initBal.Int64(), chainA, chainC) + users7 := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), initBal.Int64(), chainA, chainC) + users8 := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), initBal.Int64(), chainA, chainC) + usersA := []ibc.Wallet{users1[0], users2[0], users3[0], users4[0], users5[0], users6[0], users7[0], users8[0]} + usersC := []ibc.Wallet{users1[1], users2[1], users3[1], users4[1], users5[1], users6[1], users7[1], users8[1]} + + usersB, err := BuildWallets(ctx, t.Name(), chainB, chainB, chainB, chainB) require.NoError(t, err) - userB, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, - "test", - "dry system category detail slight boring flower magnet doll chimney neck entry net cluster february relax spare believe clarify wild clarify lounge frown outside", - initBal.Int64(), - chainB, - ) + timeoutUsersC, err := BuildWallets(ctx, t.Name(), chainC, chainC, chainC, chainC) require.NoError(t, err) - userC, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, - "test", - "dry system category detail slight boring flower magnet doll chimney neck entry net cluster february relax spare believe clarify wild clarify lounge frown outside", - initBal.Int64(), - chainC, - ) - require.NoError(t, err) + mintVoucherUsersA := usersA[4:] + mintVoucherUsersC := usersC[4:] + + const invalidAddr = "xyz1t8eh66t2w5k67kwurmn5gqhtq6d2ja0vp7jmmq" abChan, err := ibc.GetTransferChannel(ctx, r, eRep, chainIdA, chainIdB) require.NoError(t, err) @@ -148,7 +174,7 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { ) // Compose the prefixed denoms and ibc denom for asserting balances - firstHopDenom := transfertypes.GetPrefixedDenom(baChan.PortID, baChan.ChannelID, chainA.Config().Denom) + firstHopDenom := transfertypes.GetPrefixedDenom(baChan.PortID, baChan.ChannelID, configA.Denom) secondHopDenom := transfertypes.GetPrefixedDenom(cbChan.PortID, cbChan.ChannelID, firstHopDenom) firstHopDenomTrace := transfertypes.ParseDenomTrace(firstHopDenom) @@ -157,23 +183,27 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { firstHopIBCDenom := firstHopDenomTrace.IBCDenom() secondHopIBCDenom := secondHopDenomTrace.IBCDenom() - firstHopEscrowAccount := sdk.MustBech32ifyAddressBytes(chainA.Config().Bech32Prefix, transfertypes.GetEscrowAddress(abChan.PortID, abChan.ChannelID)) - secondHopEscrowAccount := sdk.MustBech32ifyAddressBytes(chainB.Config().Bech32Prefix, transfertypes.GetEscrowAddress(bcChan.PortID, bcChan.ChannelID)) + firstHopEscrowAccount := sdk.MustBech32ifyAddressBytes(configA.Bech32Prefix, transfertypes.GetEscrowAddress(abChan.PortID, abChan.ChannelID)) + secondHopEscrowAccount := sdk.MustBech32ifyAddressBytes(configB.Bech32Prefix, transfertypes.GetEscrowAddress(bcChan.PortID, bcChan.ChannelID)) zeroBal := math.ZeroInt() transferAmount := math.NewInt(100_000) + expectedFirstHopEscrowAmount := math.NewInt(0) + t.Run("forward ack error refund - invalid receiver account on B", func(t *testing.T) { + userA := usersA[0] + // Send a malformed packet with invalid receiver address from Chain A->Chain B->Chain C transfer := ibc.WalletAmount{ Address: "pfm", - Denom: chainA.Config().Denom, + Denom: configA.Denom, Amount: transferAmount, } metadata := &PacketMetadata{ Forward: &ForwardMetadata{ - Receiver: "xyz1t8eh66t2w5k67kwurmn5gqhtq6d2ja0vp7jmmq", // malformed receiver address on Chain C + Receiver: invalidAddr, // malformed receiver address on Chain C Channel: bcChan.ChannelID, Port: bcChan.PortID, }, @@ -194,18 +224,17 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { require.NoError(t, err) // assert balances for user controlled wallets - chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), configA.Denom) require.NoError(t, err) - chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) - require.NoError(t, err) - - chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) + // funds should end up in the A user's bech32 transformed address on chain B. + chainBBalance, err := chainB.GetBalance(ctx, userA.FormattedAddress(), firstHopIBCDenom) require.NoError(t, err) require.True(t, chainABalance.Equal(initBal.Sub(transferAmount))) + + // funds should end up in the A user's bech32 transformed address on chain B. require.True(t, chainBBalance.Equal(transferAmount)) - require.True(t, chainCBalance.Equal(zeroBal)) // assert balances for IBC escrow accounts firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) @@ -214,21 +243,25 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) require.NoError(t, err) - require.True(t, firstHopEscrowBalance.Equal(transferAmount)) + expectedFirstHopEscrowAmount = expectedFirstHopEscrowAmount.Add(transferAmount) + + require.True(t, firstHopEscrowBalance.Equal(expectedFirstHopEscrowAmount)) require.True(t, secondHopEscrowBalance.Equal(zeroBal)) }) t.Run("forward ack error refund - valid receiver account on B", func(t *testing.T) { - // Send a malformed packet with invalid receiver address from Chain A->Chain B->Chain C + userA := usersA[1] + userB := usersB[0] + // Send a malformed packet with valid receiver address from Chain A->Chain B->Chain C transfer := ibc.WalletAmount{ Address: userB.FormattedAddress(), - Denom: chainA.Config().Denom, + Denom: configA.Denom, Amount: transferAmount, } metadata := &PacketMetadata{ Forward: &ForwardMetadata{ - Receiver: "xyz1t8eh66t2w5k67kwurmn5gqhtq6d2ja0vp7jmmq", // malformed receiver address on Chain C + Receiver: invalidAddr, // malformed receiver address on Chain C Channel: bcChan.ChannelID, Port: bcChan.PortID, }, @@ -255,12 +288,8 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) require.NoError(t, err) - chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) - require.NoError(t, err) - require.True(t, chainABalance.Equal(initBal.Sub(transferAmount))) require.True(t, chainBBalance.Equal(transferAmount)) - require.True(t, chainCBalance.Equal(zeroBal)) // assert balances for IBC escrow accounts firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom) @@ -269,15 +298,20 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) require.NoError(t, err) - require.True(t, firstHopEscrowBalance.Equal(transferAmount)) + expectedFirstHopEscrowAmount = expectedFirstHopEscrowAmount.Add(transferAmount) + + require.True(t, firstHopEscrowBalance.Equal(expectedFirstHopEscrowAmount)) require.True(t, secondHopEscrowBalance.Equal(zeroBal)) }) t.Run("forward timeout refund - valid receiver account on B", func(t *testing.T) { + userA := usersA[2] + userB := usersB[1] + userC := timeoutUsersC[0] // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. transfer := ibc.WalletAmount{ Address: userB.FormattedAddress(), - Denom: chainA.Config().Denom, + Denom: configA.Denom, Amount: transferAmount, } @@ -325,15 +359,19 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) require.NoError(t, err) - require.True(t, firstHopEscrowBalance.Equal(transferAmount)) + expectedFirstHopEscrowAmount = expectedFirstHopEscrowAmount.Add(transferAmount) + + require.True(t, firstHopEscrowBalance.Equal(expectedFirstHopEscrowAmount)) require.True(t, secondHopEscrowBalance.Equal(zeroBal)) }) t.Run("forward timeout refund - invalid receiver account on B", func(t *testing.T) { + userA := usersA[3] + userC := timeoutUsersC[1] // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. transfer := ibc.WalletAmount{ Address: "pfm", - Denom: chainA.Config().Denom, + Denom: configA.Denom, Amount: transferAmount, } @@ -365,7 +403,7 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), chainA.Config().Denom) require.NoError(t, err) - chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), firstHopIBCDenom) + chainBBalance, err := chainB.GetBalance(ctx, userA.FormattedAddress(), firstHopIBCDenom) require.NoError(t, err) chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), secondHopIBCDenom) @@ -381,7 +419,351 @@ func TestPacketForwardMiddleware_NonRefundable(t *testing.T) { secondHopEscrowBalance, err := chainB.GetBalance(ctx, secondHopEscrowAccount, firstHopIBCDenom) require.NoError(t, err) - require.True(t, firstHopEscrowBalance.Equal(transferAmount)) + expectedFirstHopEscrowAmount = expectedFirstHopEscrowAmount.Add(transferAmount) + + require.True(t, firstHopEscrowBalance.Equal(expectedFirstHopEscrowAmount)) require.True(t, secondHopEscrowBalance.Equal(zeroBal)) }) + + revFirstHopDenom := transfertypes.GetPrefixedDenom(bcChan.PortID, bcChan.ChannelID, configC.Denom) + revSecondHopDenom := transfertypes.GetPrefixedDenom(abChan.PortID, abChan.ChannelID, revFirstHopDenom) + + revFirstHopDenomTrace := transfertypes.ParseDenomTrace(revFirstHopDenom) + revSecondHopDenomTrace := transfertypes.ParseDenomTrace(revSecondHopDenom) + + revFirstHopIBCDenom := revFirstHopDenomTrace.IBCDenom() + revSecondHopIBCDenom := revSecondHopDenomTrace.IBCDenom() + + revFirstHopEscrowAccount := sdk.MustBech32ifyAddressBytes(configC.Bech32Prefix, transfertypes.GetEscrowAddress(cbChan.PortID, cbChan.ChannelID)) + revSecondHopEscrowAccount := sdk.MustBech32ifyAddressBytes(configB.Bech32Prefix, transfertypes.GetEscrowAddress(baChan.PortID, baChan.ChannelID)) + + expectedRevFirstHopEscrowAmount := math.NewInt(0) + expectedRevSecondHopEscrowAmount := math.NewInt(0) + + var eg errgroup.Group + for i, userC := range mintVoucherUsersC { + userC := userC + userA := mintVoucherUsersA[i] + eg.Go(func() error { + + // Send packet from Chain C->Chain B->Chain A + transfer := ibc.WalletAmount{ + Address: "pfm", + Denom: configC.Denom, + Amount: transferAmount, + } + + forwardMetadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userA.FormattedAddress(), + Channel: baChan.ChannelID, + Port: baChan.PortID, + }, + } + + memo, err := json.Marshal(forwardMetadata) + if err != nil { + return err + } + + chainCHeight, err := chainC.Height(ctx) + if err != nil { + return err + } + + transferTx, err := chainC.SendIBCTransfer(ctx, cbChan.ChannelID, userC.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + if err != nil { + return err + } + _, err = testutil.PollForAck(ctx, chainC, chainCHeight, chainCHeight+30, transferTx.Packet) + if err != nil { + return err + } + err = testutil.WaitForBlocks(ctx, waitBlocks, chainC) + if err != nil { + return err + } + + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), configC.Denom) + if err != nil { + return err + } + + // TODO add balance check for intermediate account on B + + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), revSecondHopIBCDenom) + if err != nil { + return err + } + + chainCExpected := initBal.Sub(transferAmount) + + if !chainCBalance.Equal(chainCExpected) { + return fmt.Errorf("chain c expected balance %s, got %s", chainCExpected, chainCBalance) + } + + if !chainABalance.Equal(transferAmount) { + return fmt.Errorf("chain a expected balance %s, got %s", transferAmount, chainABalance) + } + + return nil + }) + } + + require.NoError(t, eg.Wait()) + + expectedRevFirstHopEscrowAmount = expectedRevFirstHopEscrowAmount.Add(transferAmount.Mul(math.NewIntFromUint64(uint64(len(mintVoucherUsersC))))) + expectedRevSecondHopEscrowAmount = expectedRevSecondHopEscrowAmount.Add(transferAmount.Mul(math.NewIntFromUint64(uint64(len(mintVoucherUsersC))))) + + // assert balances for IBC escrow accounts + revFirstHopEscrowBalance, err := chainC.GetBalance(ctx, revFirstHopEscrowAccount, configC.Denom) + require.NoError(t, err) + + revSecondHopEscrowBalance, err := chainB.GetBalance(ctx, revSecondHopEscrowAccount, revFirstHopIBCDenom) + require.NoError(t, err) + + require.True(t, revFirstHopEscrowBalance.Equal(expectedRevFirstHopEscrowAmount)) + require.True(t, revSecondHopEscrowBalance.Equal(expectedRevSecondHopEscrowAmount)) + + t.Run("rev forward ack error refund - invalid receiver account on B", func(t *testing.T) { + t.Parallel() + + userA := mintVoucherUsersA[0] + + // Send a malformed packet with invalid receiver address from Chain A->Chain B->Chain C + transfer := ibc.WalletAmount{ + Address: "pfm", + Denom: revSecondHopIBCDenom, + Amount: transferAmount, + } + + metadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: invalidAddr, // malformed receiver address on Chain C + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + }, + } + + memo, err := json.Marshal(metadata) + require.NoError(t, err) + + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) + + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) + + // assert balances for user controlled wallets + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), revSecondHopIBCDenom) + require.NoError(t, err) + + // funds should end up in the A user's bech32 transformed address on chain B. + chainBBalance, err := chainB.GetBalance(ctx, userA.FormattedAddress(), revFirstHopIBCDenom) + require.NoError(t, err) + + require.True(t, chainABalance.Equal(zeroBal)) + + // funds should end up in the A user's bech32 transformed address on chain B. + require.True(t, chainBBalance.Equal(transferAmount)) + + // assert balances for IBC escrow accounts + revFirstHopEscrowBalance, err := chainC.GetBalance(ctx, revFirstHopEscrowAccount, configC.Denom) + require.NoError(t, err) + + revSecondHopEscrowBalance, err := chainB.GetBalance(ctx, revSecondHopEscrowAccount, revFirstHopIBCDenom) + require.NoError(t, err) + + expectedRevSecondHopEscrowAmount = expectedRevSecondHopEscrowAmount.Sub(transferAmount) + + require.Truef(t, revFirstHopEscrowBalance.Equal(expectedRevFirstHopEscrowAmount), "expected %s, got %s", expectedRevFirstHopEscrowAmount, revFirstHopEscrowBalance) + require.Truef(t, revSecondHopEscrowBalance.Equal(expectedRevSecondHopEscrowAmount), "expected %s, got %s", expectedRevSecondHopEscrowAmount, revSecondHopEscrowBalance) + }) + + t.Run("rev forward ack error refund - valid receiver account on B", func(t *testing.T) { + t.Parallel() + + userA := mintVoucherUsersA[1] + userB := usersB[2] + // Send a malformed packet with valid receiver address from Chain A->Chain B->Chain C + transfer := ibc.WalletAmount{ + Address: userB.FormattedAddress(), + Denom: revSecondHopIBCDenom, + Amount: transferAmount, + } + + metadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: invalidAddr, // malformed receiver address on Chain C + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + }, + } + + memo, err := json.Marshal(metadata) + require.NoError(t, err) + + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) + + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) + + // assert balances for user controlled wallets + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), revSecondHopIBCDenom) + require.NoError(t, err) + + chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), revFirstHopIBCDenom) + require.NoError(t, err) + + require.True(t, chainABalance.Equal(zeroBal)) + require.True(t, chainBBalance.Equal(transferAmount)) + + // assert balances for IBC escrow accounts + revFirstHopEscrowBalance, err := chainC.GetBalance(ctx, revFirstHopEscrowAccount, configC.Denom) + require.NoError(t, err) + + revSecondHopEscrowBalance, err := chainB.GetBalance(ctx, revSecondHopEscrowAccount, revFirstHopIBCDenom) + require.NoError(t, err) + + expectedRevSecondHopEscrowAmount = expectedRevSecondHopEscrowAmount.Sub(transferAmount) + + require.Truef(t, revFirstHopEscrowBalance.Equal(expectedRevFirstHopEscrowAmount), "expected %s, got %s", expectedRevFirstHopEscrowAmount, revFirstHopEscrowBalance) + require.Truef(t, revSecondHopEscrowBalance.Equal(expectedRevSecondHopEscrowAmount), "expected %s, got %s", expectedRevSecondHopEscrowAmount, revSecondHopEscrowBalance) + }) + + t.Run("rev forward timeout refund - valid receiver account on B", func(t *testing.T) { + t.Parallel() + + userA := mintVoucherUsersA[2] + userB := usersB[3] + userC := timeoutUsersC[2] + // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. + transfer := ibc.WalletAmount{ + Address: userC.FormattedAddress(), + Denom: revSecondHopIBCDenom, + Amount: transferAmount, + } + + retries := uint8(2) + metadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userC.FormattedAddress(), + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + Retries: &retries, + Timeout: 1 * time.Second, + }, + } + + memo, err := json.Marshal(metadata) + require.NoError(t, err) + + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) + + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) + + // assert balances for user controlled wallets + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), revSecondHopIBCDenom) + require.NoError(t, err) + + chainBBalance, err := chainB.GetBalance(ctx, userB.FormattedAddress(), revFirstHopIBCDenom) + require.NoError(t, err) + + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), configC.Denom) + require.NoError(t, err) + + require.True(t, chainABalance.Equal(zeroBal)) + require.True(t, chainBBalance.Equal(transferAmount)) + require.True(t, chainCBalance.Equal(zeroBal)) + + revFirstHopEscrowBalance, err := chainC.GetBalance(ctx, revFirstHopEscrowAccount, configC.Denom) + require.NoError(t, err) + + revSecondHopEscrowBalance, err := chainB.GetBalance(ctx, revSecondHopEscrowAccount, revFirstHopIBCDenom) + require.NoError(t, err) + + expectedRevSecondHopEscrowAmount = expectedRevSecondHopEscrowAmount.Sub(transferAmount) + + require.Truef(t, revFirstHopEscrowBalance.Equal(expectedRevFirstHopEscrowAmount), "expected %s, got %s", expectedRevFirstHopEscrowAmount, revFirstHopEscrowBalance) + require.Truef(t, revSecondHopEscrowBalance.Equal(expectedRevSecondHopEscrowAmount), "expected %s, got %s", expectedRevSecondHopEscrowAmount, revSecondHopEscrowBalance) + }) + + t.Run("rev forward timeout refund - invalid receiver account on B", func(t *testing.T) { + t.Parallel() + + userA := mintVoucherUsersA[3] + userC := timeoutUsersC[3] + // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. + transfer := ibc.WalletAmount{ + Address: "pfm", + Denom: configA.Denom, + Amount: transferAmount, + } + + retries := uint8(2) + metadata := &PacketMetadata{ + Forward: &ForwardMetadata{ + Receiver: userC.FormattedAddress(), + Channel: bcChan.ChannelID, + Port: bcChan.PortID, + Retries: &retries, + Timeout: 1 * time.Second, + }, + } + + memo, err := json.Marshal(metadata) + require.NoError(t, err) + + chainAHeight, err := chainA.Height(ctx) + require.NoError(t, err) + + transferTx, err := chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)}) + require.NoError(t, err) + _, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, waitBlocks, chainA) + require.NoError(t, err) + + // assert balances for user controlled wallets + chainABalance, err := chainA.GetBalance(ctx, userA.FormattedAddress(), revSecondHopIBCDenom) + require.NoError(t, err) + + chainBBalance, err := chainB.GetBalance(ctx, userA.FormattedAddress(), revFirstHopIBCDenom) + require.NoError(t, err) + + chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), configC.Denom) + require.NoError(t, err) + + require.True(t, chainABalance.Equal(zeroBal)) + require.True(t, chainBBalance.Equal(transferAmount)) + require.True(t, chainCBalance.Equal(zeroBal)) + + revFirstHopEscrowBalance, err := chainC.GetBalance(ctx, revFirstHopEscrowAccount, configC.Denom) + require.NoError(t, err) + + revSecondHopEscrowBalance, err := chainB.GetBalance(ctx, revSecondHopEscrowAccount, revFirstHopIBCDenom) + require.NoError(t, err) + + expectedRevSecondHopEscrowAmount = expectedRevSecondHopEscrowAmount.Sub(transferAmount) + + require.Truef(t, revFirstHopEscrowBalance.Equal(expectedRevFirstHopEscrowAmount), "expected %s, got %s", expectedRevFirstHopEscrowAmount, revFirstHopEscrowBalance) + require.Truef(t, revSecondHopEscrowBalance.Equal(expectedRevSecondHopEscrowAmount), "expected %s, got %s", expectedRevSecondHopEscrowAmount, revSecondHopEscrowBalance) + }) } diff --git a/middleware/packet-forward-middleware/testing/simapp/app.go b/middleware/packet-forward-middleware/testing/simapp/app.go index 6c236b8f..af47d591 100644 --- a/middleware/packet-forward-middleware/testing/simapp/app.go +++ b/middleware/packet-forward-middleware/testing/simapp/app.go @@ -467,10 +467,6 @@ func NewSimApp( var transferStack ibcporttypes.IBCModule transferStack = transfer.NewIBCModule(app.TransferKeeper) - if os.Getenv("NON_REFUNDABLE_TEST") != "" { - transferStack = dummyware.NewIBCMiddleware(transferStack) - } - transferStack = packetforward.NewIBCMiddleware( transferStack, app.PacketForwardKeeper, @@ -479,6 +475,10 @@ func NewSimApp( packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp, // refund timeout ) + if os.Getenv("NON_REFUNDABLE_TEST") != "" { + transferStack = dummyware.NewIBCMiddleware(transferStack) + } + // Add IBC Router ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack) From 47d927db9d51f4238bc093e89dddba2157ab4b7f Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Fri, 24 Nov 2023 11:41:31 -0700 Subject: [PATCH 07/10] remove parallel --- .../e2e/packet_forward_non_refundable_test.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go index 396c18a9..2d00bba9 100644 --- a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go +++ b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go @@ -526,8 +526,6 @@ func TestNonRefundable(t *testing.T) { require.True(t, revSecondHopEscrowBalance.Equal(expectedRevSecondHopEscrowAmount)) t.Run("rev forward ack error refund - invalid receiver account on B", func(t *testing.T) { - t.Parallel() - userA := mintVoucherUsersA[0] // Send a malformed packet with invalid receiver address from Chain A->Chain B->Chain C @@ -586,8 +584,6 @@ func TestNonRefundable(t *testing.T) { }) t.Run("rev forward ack error refund - valid receiver account on B", func(t *testing.T) { - t.Parallel() - userA := mintVoucherUsersA[1] userB := usersB[2] // Send a malformed packet with valid receiver address from Chain A->Chain B->Chain C @@ -643,8 +639,6 @@ func TestNonRefundable(t *testing.T) { }) t.Run("rev forward timeout refund - valid receiver account on B", func(t *testing.T) { - t.Parallel() - userA := mintVoucherUsersA[2] userB := usersB[3] userC := timeoutUsersC[2] @@ -706,8 +700,6 @@ func TestNonRefundable(t *testing.T) { }) t.Run("rev forward timeout refund - invalid receiver account on B", func(t *testing.T) { - t.Parallel() - userA := mintVoucherUsersA[3] userC := timeoutUsersC[3] // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. From 8ce36eeb57855707a6b457d65f6d3bc0fb1e513c Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Fri, 24 Nov 2023 11:45:51 -0700 Subject: [PATCH 08/10] lint --- .../testing/simapp/x/dummyware/ibc_middleware.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go index cabf4948..6eee0a5a 100644 --- a/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go +++ b/middleware/packet-forward-middleware/testing/simapp/x/dummyware/ibc_middleware.go @@ -3,9 +3,11 @@ package dummyware import ( "context" + forwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" + sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - forwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" From cc9da3f4d8eff3a31d4dd4c9ceaaa62ac90b9e07 Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Fri, 24 Nov 2023 11:53:08 -0700 Subject: [PATCH 09/10] fix test, update comments --- .../e2e/packet_forward_non_refundable_test.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go index 2d00bba9..0446ff25 100644 --- a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go +++ b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go @@ -308,7 +308,8 @@ func TestNonRefundable(t *testing.T) { userA := usersA[2] userB := usersB[1] userC := timeoutUsersC[0] - // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. + // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, + // which should result in a refund to User B on Chain B after two retries. transfer := ibc.WalletAmount{ Address: userB.FormattedAddress(), Denom: configA.Denom, @@ -368,7 +369,8 @@ func TestNonRefundable(t *testing.T) { t.Run("forward timeout refund - invalid receiver account on B", func(t *testing.T) { userA := usersA[3] userC := timeoutUsersC[1] - // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. + // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, + // which should result in a refund to the bech32 equivalent of userA on chain B after two retries. transfer := ibc.WalletAmount{ Address: "pfm", Denom: configA.Denom, @@ -642,9 +644,10 @@ func TestNonRefundable(t *testing.T) { userA := mintVoucherUsersA[2] userB := usersB[3] userC := timeoutUsersC[2] - // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. + // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, + // which should result in a refund to User B on Chain B after two retries. transfer := ibc.WalletAmount{ - Address: userC.FormattedAddress(), + Address: userB.FormattedAddress(), Denom: revSecondHopIBCDenom, Amount: transferAmount, } @@ -702,7 +705,8 @@ func TestNonRefundable(t *testing.T) { t.Run("rev forward timeout refund - invalid receiver account on B", func(t *testing.T) { userA := mintVoucherUsersA[3] userC := timeoutUsersC[3] - // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, which should result in a refund from B to A after two retries. + // Send packet from Chain A->Chain B->Chain C with the timeout so low for B->C transfer that it can not make it from B to C, + // which should result in a refund to the bech32 equivalent of userA on chain B after two retries. transfer := ibc.WalletAmount{ Address: "pfm", Denom: configA.Denom, From 981adbd0e5cf415c1fcd86dd77e62062af2916ba Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Fri, 24 Nov 2023 12:11:12 -0700 Subject: [PATCH 10/10] fix final test --- .../e2e/packet_forward_non_refundable_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go index 0446ff25..23775835 100644 --- a/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go +++ b/middleware/packet-forward-middleware/e2e/packet_forward_non_refundable_test.go @@ -686,9 +686,9 @@ func TestNonRefundable(t *testing.T) { chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), configC.Denom) require.NoError(t, err) - require.True(t, chainABalance.Equal(zeroBal)) - require.True(t, chainBBalance.Equal(transferAmount)) - require.True(t, chainCBalance.Equal(zeroBal)) + require.Truef(t, chainABalance.Equal(zeroBal), "chain a balance, expected %s, got %s", zeroBal, chainABalance) + require.Truef(t, chainBBalance.Equal(transferAmount), "chain b balance, expected %s, got %s", transferAmount, chainBBalance) + require.Truef(t, chainCBalance.Equal(zeroBal), "chain c balance, expected %s, got %s", zeroBal, chainCBalance) revFirstHopEscrowBalance, err := chainC.GetBalance(ctx, revFirstHopEscrowAccount, configC.Denom) require.NoError(t, err) @@ -709,7 +709,7 @@ func TestNonRefundable(t *testing.T) { // which should result in a refund to the bech32 equivalent of userA on chain B after two retries. transfer := ibc.WalletAmount{ Address: "pfm", - Denom: configA.Denom, + Denom: revSecondHopIBCDenom, Amount: transferAmount, } @@ -747,9 +747,9 @@ func TestNonRefundable(t *testing.T) { chainCBalance, err := chainC.GetBalance(ctx, userC.FormattedAddress(), configC.Denom) require.NoError(t, err) - require.True(t, chainABalance.Equal(zeroBal)) - require.True(t, chainBBalance.Equal(transferAmount)) - require.True(t, chainCBalance.Equal(zeroBal)) + require.Truef(t, chainABalance.Equal(zeroBal), "chain a balance, expected %s, got %s", zeroBal, chainABalance) + require.Truef(t, chainBBalance.Equal(transferAmount), "chain b balance, expected %s, got %s", transferAmount, chainBBalance) + require.Truef(t, chainCBalance.Equal(zeroBal), "chain c balance, expected %s, got %s", zeroBal, chainCBalance) revFirstHopEscrowBalance, err := chainC.GetBalance(ctx, revFirstHopEscrowAccount, configC.Denom) require.NoError(t, err)