From b3343e1bece799a4f8e21e6fc87d4e328b460715 Mon Sep 17 00:00:00 2001 From: Daniel T <30197399+danwt@users.noreply.github.com> Date: Wed, 19 Jun 2024 13:56:59 +0100 Subject: [PATCH] feat(genesis bridge): genesis transfers (#449) --- proto/hub-genesis/params.proto | 14 +- proto/hub-genesis/state.proto | 23 +- proto/hub-genesis/tx.proto | 22 - testutil/app/app.go | 36 +- x/hub-genesis/client/cli/tx.go | 59 -- x/hub-genesis/keeper/genesis.go | 15 - x/hub-genesis/keeper/genesis_test.go | 1 + x/hub-genesis/keeper/ibc_module.go | 120 ++++ x/hub-genesis/keeper/ics4_wrapper.go | 51 ++ x/hub-genesis/keeper/keeper.go | 26 +- x/hub-genesis/keeper/memo.go | 53 ++ x/hub-genesis/keeper/msg_server.go | 63 -- x/hub-genesis/keeper/msg_server_test.go | 220 ------ x/hub-genesis/keeper/params.go | 16 - x/hub-genesis/keeper/state.go | 4 +- x/hub-genesis/module.go | 9 +- x/hub-genesis/types/codec.go | 10 +- x/hub-genesis/types/errors.go | 13 - x/hub-genesis/types/expected_keepers.go | 18 +- x/hub-genesis/types/keys.go | 3 +- .../types/message_hub_genesis_event.go | 57 -- x/hub-genesis/types/params.go | 48 +- x/hub-genesis/types/params.pb.go | 260 +------- x/hub-genesis/types/state.go | 16 +- x/hub-genesis/types/state.pb.go | 297 +++++++-- x/hub-genesis/types/tx.pb.go | 631 ------------------ 26 files changed, 523 insertions(+), 1562 deletions(-) delete mode 100644 proto/hub-genesis/tx.proto delete mode 100644 x/hub-genesis/client/cli/tx.go create mode 100644 x/hub-genesis/keeper/ibc_module.go create mode 100644 x/hub-genesis/keeper/ics4_wrapper.go create mode 100644 x/hub-genesis/keeper/memo.go delete mode 100644 x/hub-genesis/keeper/msg_server.go delete mode 100644 x/hub-genesis/keeper/msg_server_test.go delete mode 100644 x/hub-genesis/types/errors.go delete mode 100644 x/hub-genesis/types/message_hub_genesis_event.go delete mode 100644 x/hub-genesis/types/tx.pb.go diff --git a/proto/hub-genesis/params.proto b/proto/hub-genesis/params.proto index 6e3aada0..0f0ec61c 100644 --- a/proto/hub-genesis/params.proto +++ b/proto/hub-genesis/params.proto @@ -8,18 +8,6 @@ import "gogoproto/gogo.proto"; // Params holds parameters for the hub-genesis module. message Params { option (gogoproto.goproto_stringer) = false; - - // genesis_triggerer_allowlist is a list of the - // accounts that are allowed to trigger a genesis event on the rollapp. - // In the case of an empty list, there are no restrictions - repeated GenesisTriggererParams genesis_triggerer_allowlist = 1 [ - (gogoproto.moretags) = "yaml:\"genesis_triggerer_allowlist\"", - (gogoproto.nullable) = false - ]; + reserved 1; } -message GenesisTriggererParams { - // address is a bech32-encoded address of the - // accounts that are allowed to trigger a rollapp genesis event. - string address = 1 [ (gogoproto.moretags) = "yaml:\"address\"" ]; -} diff --git a/proto/hub-genesis/state.proto b/proto/hub-genesis/state.proto index 5d80f756..a00cd60d 100644 --- a/proto/hub-genesis/state.proto +++ b/proto/hub-genesis/state.proto @@ -8,13 +8,20 @@ option go_package = "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/types"; // State holds the state of the genesis event message State { - // is_locked is a boolean that indicates if the genesis event has occured - bool is_locked = 1; - - // genesis_tokens is the list of tokens that are expected to be locked on genesis event - repeated cosmos.base.v1beta1.Coin genesis_tokens = 2 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; + reserved 1; + reserved 2; + // accounts on the Hub to fund with some bootstrapping transfers + repeated GenesisAccount genesis_accounts = 3 [(gogoproto.nullable) = false]; +} +/* + +TODO: the below is copy pasted, clean up + */ +// GenesisAccount is a struct for the genesis account for the rollapp +message GenesisAccount { + // amount of coins to be sent to the genesis address + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false]; + // address is a bech-32 address of the genesis account + string address = 2; } diff --git a/proto/hub-genesis/tx.proto b/proto/hub-genesis/tx.proto deleted file mode 100644 index a6fe4a6f..00000000 --- a/proto/hub-genesis/tx.proto +++ /dev/null @@ -1,22 +0,0 @@ -syntax = "proto3"; -package rollapp.hub_genesis; - -option go_package = "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/types"; - -// Msg defines the Msg service. -service Msg { - rpc TriggerGenesisEvent(MsgHubGenesisEvent) - returns (MsgHubGenesisEventResponse); -} - -// MsgHubGenesisEvent is the message type for triggering the hub genesis event -message MsgHubGenesisEvent { - // address is the bech32-encoded address of the sender - string address = 1; - // channel_id is the hub channel id on the rollapp - string channel_id = 2; - // hub_id is the hub's chainid - string hub_id = 3; -} - -message MsgHubGenesisEventResponse {} diff --git a/testutil/app/app.go b/testutil/app/app.go index acbebfca..f6151beb 100644 --- a/testutil/app/app.go +++ b/testutil/app/app.go @@ -192,7 +192,7 @@ var ( stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, govtypes.ModuleName: {authtypes.Burner}, ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, - hubgentypes.ModuleName: {authtypes.Burner}, + hubgentypes.ModuleName: {authtypes.Minter}, gaslesstypes.ModuleName: nil, wasmtypes.ModuleName: {authtypes.Burner}, } @@ -443,8 +443,6 @@ func NewRollapp( appCodec, keys[hubgentypes.StoreKey], app.GetSubspace(hubgentypes.ModuleName), - app.IBCKeeper.ChannelKeeper, - app.BankKeeper, app.AccountKeeper, ) @@ -525,7 +523,7 @@ func NewRollapp( ibc.NewAppModule(app.IBCKeeper), ibctransfer.NewAppModule(app.TransferKeeper), upgrade.NewAppModule(app.UpgradeKeeper), - hubgenesis.NewAppModule(appCodec, app.HubGenesisKeeper, app.AccountKeeper), + hubgenesis.NewAppModule(appCodec, app.HubGenesisKeeper), gasless.NewAppModule(appCodec, app.GaslessKeeper), } @@ -684,25 +682,6 @@ func NewRollapp( return app } -// func (app *App) setAnteHandler(txConfig client.TxConfig) { -// anteHandler, err := rollappapp.NewAnteHandler( -// rollappapp.HandlerOptions{ -// HandlerOptions: ante.HandlerOptions{ -// AccountKeeper: app.AccountKeeper, -// BankKeeper: app.BankKeeper, -// SignModeHandler: txConfig.SignModeHandler(), -// SigGasConsumer: ante.DefaultSigVerificationGasConsumer, -// }, -// IBCKeeper: app.IBCKeeper, -// }, -// ) -// if err != nil { -// panic(err) -// } - -// app.SetAnteHandler(anteHandler) -// } - func (app *App) setPostHandler() { postHandler, err := posthandler.NewPostHandler( posthandler.HandlerOptions{}, @@ -874,7 +853,7 @@ func (app *App) GetStakingKeeper() ibctestingtypes.StakingKeeper { return app.StakingKeeper } -// GetStakingKeeper implements the TestingApp interface. +// GetStakingKeeperSDK implements the TestingApp interface. func (app *App) GetStakingKeeperSDK() stakingkeeper.Keeper { return app.StakingKeeper } @@ -906,15 +885,6 @@ func RegisterSwaggerAPI(_ client.Context, rtr *mux.Router) { rtr.PathPrefix("/swagger/").Handler(http.StripPrefix("/swagger/", staticServer)) } -// 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) diff --git a/x/hub-genesis/client/cli/tx.go b/x/hub-genesis/client/cli/tx.go deleted file mode 100644 index d3b490b2..00000000 --- a/x/hub-genesis/client/cli/tx.go +++ /dev/null @@ -1,59 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - - "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/types" -) - -// GetTxCmd returns the transaction commands for this module -func GetTxCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand(CmdGenesisEvent()) - - return cmd -} - -func CmdGenesisEvent() *cobra.Command { - cmd := &cobra.Command{ - Use: "genesis-event [hub-id] [channel-id] [flags]", - Short: "Trigger a genesis event from the hub", - Example: "rollapp-evm tx hub genesis-event [hub-id] [channel-id] ", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - // Get arguments - hubId := args[0] - channelId := args[1] - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgHubGenesisEvent( - clientCtx.GetFromAddress().String(), - channelId, - hubId, - ) - - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/hub-genesis/keeper/genesis.go b/x/hub-genesis/keeper/genesis.go index de560863..b40f3689 100644 --- a/x/hub-genesis/keeper/genesis.go +++ b/x/hub-genesis/keeper/genesis.go @@ -8,21 +8,6 @@ import ( // InitGenesis new hub-genesis genesis. func (k Keeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { k.SetParams(ctx, genState.Params) - - modAddress := k.accountKeeper.GetModuleAddress(types.ModuleName) - if !k.accountKeeper.HasAccount(ctx, modAddress) { - k.accountKeeper.GetModuleAccount(ctx, types.ModuleName) - } - - // if tokens provided and waiting to be locked, verify the balance - if !genState.State.IsLocked && !genState.State.GenesisTokens.IsZero() { - // get spendable coins in the module account - spendable := k.bankKeeper.SpendableCoins(ctx, modAddress) - // we expect the genesis balance of the module account to be equal to required genesis tokens - if !spendable.IsEqual(genState.State.GenesisTokens) { - panic(types.ErrWrongGenesisBalance) - } - } k.SetState(ctx, genState.State) } diff --git a/x/hub-genesis/keeper/genesis_test.go b/x/hub-genesis/keeper/genesis_test.go index e46a1706..002ae5e5 100644 --- a/x/hub-genesis/keeper/genesis_test.go +++ b/x/hub-genesis/keeper/genesis_test.go @@ -1,6 +1,7 @@ package keeper_test import ( + _ "embed" "testing" testkeepers "github.com/dymensionxyz/dymension-rdk/testutil/keepers" diff --git a/x/hub-genesis/keeper/ibc_module.go b/x/hub-genesis/keeper/ibc_module.go new file mode 100644 index 00000000..6ed52b7a --- /dev/null +++ b/x/hub-genesis/keeper/ibc_module.go @@ -0,0 +1,120 @@ +package keeper + +import ( + "fmt" + "time" + + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types" + "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/types" +) + +const ( + transferTimeout = time.Hour * 24 * 365 +) + +type IBCModule struct { + porttypes.IBCModule + k Keeper + transfer Transfer + getDenom GetDenomMetaData + mintCoins MintCoins +} + +type ( + Transfer func(ctx sdk.Context, transfer *transfertypes.MsgTransfer) error + GetDenomMetaData func(ctx sdk.Context, denom string) (banktypes.Metadata, bool) + MintCoins func(ctx sdk.Context, moduleName string, amt sdk.Coins) error +) + +func NewIBCModule(next porttypes.IBCModule, t Transfer, k Keeper, d GetDenomMetaData, m MintCoins) *IBCModule { + return &IBCModule{next, k, t, d, m} +} + +// OnChanOpenConfirm will send any unsent genesis account transfers over the channel. +// It is ASSUMED that the channel is for the Hub. This can be ensured by not exposing +// the sequencer API until after genesis is complete. +// Since transfers are only sent once, it does not matter if someone else tries to open +// a channel in future (it will no-op). +func (w IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + l := ctx.Logger().With("module", "hubgenesis OnChanOpenConfirm middleware", "port id", portID, "channelID", channelID) + + err := w.IBCModule.OnChanOpenConfirm(ctx, portID, channelID) + if err != nil { + l.Error("Next middleware.", "err", err) + return err + } + + state := w.k.GetState(ctx) + + srcAccount := w.k.accountKeeper.GetModuleAccount(ctx, types.ModuleName) + srcAddr := srcAccount.GetAddress().String() + + for i, a := range state.GetGenesisAccounts() { + if err := w.mintAndTransfer(ctx, len(state.GetGenesisAccounts()), a, srcAddr, portID, channelID); err != nil { + // there is no feasible way to recover + panic(fmt.Errorf("mint and transfer: %w", err)) + } + l.Info("Sent genesis transfer.", "index", i, "receiver", a.GetAddress(), "coin", a) + } + + state.GenesisAccounts = nil + + w.k.SetState(ctx, state) + + l.Info("Sent all genesis transfers.") + + return nil +} + +func (w IBCModule) mintAndTransfer( + ctx sdk.Context, + n int, + a types.GenesisAccount, + srcAddr string, + portID string, + channelID string, +) error { + coin := a.GetAmount() + err := w.mintCoins(ctx, types.ModuleName, sdk.Coins{coin}) + if err != nil { + return errorsmod.Wrap(err, "mint coins") + } + + // NOTE: for simplicity we don't optimize to avoid sending duplicate metadata + // we assume the hub will deduplicate. We expect to eventually get a timeout + // or commit anyway, so the packet will be cleared up. + // (Actually, since transfers may arrive out of order, we must include the + // denom metadata anyway). + memo, err := w.createMemo(ctx, a.Amount.Denom, n) + if err != nil { + return errorsmod.Wrap(err, "create memo") + } + + m := transfertypes.MsgTransfer{ + SourcePort: portID, + SourceChannel: channelID, + Token: a.Amount, + Sender: srcAddr, + Receiver: a.GetAddress(), + TimeoutHeight: clienttypes.Height{}, + TimeoutTimestamp: uint64(ctx.BlockTime().Add(transferTimeout).UnixNano()), + Memo: memo, + } + + err = w.transfer(skipContext(ctx), &m) + if err != nil { + return errorsmod.Wrap(err, "transfer") + } + + return nil +} diff --git a/x/hub-genesis/keeper/ics4_wrapper.go b/x/hub-genesis/keeper/ics4_wrapper.go new file mode 100644 index 00000000..49c9bbeb --- /dev/null +++ b/x/hub-genesis/keeper/ics4_wrapper.go @@ -0,0 +1,51 @@ +package keeper + +import ( + 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" + transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types" +) + +type ctxKeySkip struct{} + +// skipContext returns a context which can be passed to ibc SendPacket +// if passed, the memo guard will not check that call +func skipContext(ctx sdk.Context) sdk.Context { + return ctx.WithValue(ctxKeySkip{}, true) +} + +func skip(ctx sdk.Context) bool { + val, ok := ctx.Value(ctxKeySkip{}).(bool) + return ok && val +} + +type ICS4Wrapper struct { + porttypes.ICS4Wrapper +} + +func NewICS4Wrapper(next porttypes.ICS4Wrapper) *ICS4Wrapper { + return &ICS4Wrapper{next} +} + +// SendPacket prevents anyone from sending a packet with the memo +// The app should be wired to allow the middleware to circumvent this +func (w ICS4Wrapper) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + sourcePort string, + sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, +) (sequence uint64, err error) { + var transfer transfertypes.FungibleTokenPacketData + _ = transfertypes.ModuleCdc.UnmarshalJSON(data, &transfer) + if !skip(ctx) && memoHasKey(transfer.GetMemo()) { + return 0, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "cannot use transfer genesis memo") + } + return w.ICS4Wrapper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} diff --git a/x/hub-genesis/keeper/keeper.go b/x/hub-genesis/keeper/keeper.go index ecdf2946..01706011 100644 --- a/x/hub-genesis/keeper/keeper.go +++ b/x/hub-genesis/keeper/keeper.go @@ -3,7 +3,6 @@ package keeper import ( "fmt" - ibctypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" "github.com/tendermint/tendermint/libs/log" "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/types" @@ -20,9 +19,7 @@ type ( storeKey storetypes.StoreKey paramstore paramtypes.Subspace - channelKeeper types.ChannelKeeper - bankKeeper types.BankKeeper - accountKeeper types.AccountKeeper + accountKeeper types.AuthAccountKeeper } ) @@ -30,9 +27,7 @@ func NewKeeper( cdc codec.BinaryCodec, storeKey storetypes.StoreKey, ps paramtypes.Subspace, - channelKeeper types.ChannelKeeper, - bankKeeper types.BankKeeper, - accountKeeper types.AccountKeeper, + accountKeeper types.AuthAccountKeeper, ) Keeper { // set KeyTable if it has not already been set if !ps.HasKeyTable() { @@ -44,8 +39,6 @@ func NewKeeper( cdc: cdc, storeKey: storeKey, paramstore: ps, - channelKeeper: channelKeeper, - bankKeeper: bankKeeper, accountKeeper: accountKeeper, } } @@ -53,18 +46,3 @@ func NewKeeper( func (k Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) } - -// lock coins by sending them to an escrow address -func (k Keeper) lockRollappGenesisTokens(ctx sdk.Context, sourceChannel string, tokens sdk.Coins) error { - // get spendable coins in the module account - account := k.accountKeeper.GetModuleAccount(ctx, types.ModuleName) - spendable := k.bankKeeper.SpendableCoins(ctx, account.GetAddress()) - - // validate it's enough for the required tokens - if !spendable.IsAllGTE(tokens) { - return types.ErrGenesisInsufficientBalance - } - - escrowAddress := ibctypes.GetEscrowAddress("transfer", sourceChannel) - return k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, escrowAddress, tokens) -} diff --git a/x/hub-genesis/keeper/memo.go b/x/hub-genesis/keeper/memo.go new file mode 100644 index 00000000..ad252578 --- /dev/null +++ b/x/hub-genesis/keeper/memo.go @@ -0,0 +1,53 @@ +package keeper + +import ( + "encoding/json" + + "cosmossdk.io/errors" + + "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +const ( + memoNamespaceKey = "genesis_transfer" +) + +func memoHasKey(memo string) bool { + m := make(map[string]any) + if err := json.Unmarshal([]byte(memo), &m); err != nil { + return false + } + _, ok := m[memoNamespaceKey] + return ok +} + +// createMemo creates a memo to go with the transfer. It's used by the hub to confirm +// that the transfer originated from the chain itself, rather than a user of the chain. +// It may also contain token metadata. +func (w IBCModule) createMemo(ctx types.Context, denom string, n int) (string, error) { + d, ok := w.getDenom(ctx, denom) + if !ok { + return "", errors.Wrap(sdkerrors.ErrNotFound, "get denom metadata") + } + + m := memo{} + m.Data.Denom = d + m.Data.TotalNumTransfers = uint64(n) + + bz, err := json.Marshal(m) + if err != nil { + return "", sdkerrors.ErrJSONMarshal + } + + return string(bz), nil +} + +type memo struct { + Data struct { + Denom banktypes.Metadata `json:"denom"` + // How many transfers in total will be sent in the transfer genesis period + TotalNumTransfers uint64 `json:"total_num_transfers"` + } `json:"genesis_transfer"` +} diff --git a/x/hub-genesis/keeper/msg_server.go b/x/hub-genesis/keeper/msg_server.go deleted file mode 100644 index 9c54fce4..00000000 --- a/x/hub-genesis/keeper/msg_server.go +++ /dev/null @@ -1,63 +0,0 @@ -package keeper - -import ( - "context" - - errorsmod "cosmossdk.io/errors" - - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - tenderminttypes "github.com/cosmos/ibc-go/v6/modules/light-clients/07-tendermint/types" - "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/types" -) - -type msgServer struct { - Keeper -} - -// NewMsgServerImpl returns an implementation of the MsgServer interface -// for the provided Keeper. -func NewMsgServerImpl(keeper Keeper) types.MsgServer { - return &msgServer{Keeper: keeper} -} - -var _ types.MsgServer = msgServer{} - -func (m msgServer) TriggerGenesisEvent(goCtx context.Context, msg *types.MsgHubGenesisEvent) (*types.MsgHubGenesisEventResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - // Get the sender and validate they are in the Allowlist - if !m.IsAddressInGenesisTriggererAllowList(ctx, msg.Address) { - return nil, sdkerrors.ErrUnauthorized - } - - _, clientState, err := m.channelKeeper.GetChannelClientState(ctx, "transfer", msg.ChannelId) - if err != nil { - return nil, errorsmod.Wrapf(types.ErrFailedGetClientState, "failed to get client state for channel %s: %v", msg.ChannelId, err) - } - - tmClientState, ok := clientState.(*tenderminttypes.ClientState) - if !ok { - return nil, errorsmod.Wrapf(types.ErrFailedGetClientState, "expected tendermint client state, got %T", clientState) - } - - if tmClientState.GetChainID() != msg.HubId { - return nil, errorsmod.Wrapf(types.ErrChainIDMismatch, "channel %s is connected to chain ID %s", - msg.ChannelId, tmClientState.GetChainID()) - } - - // check if genesis event was already triggered - state := m.GetState(ctx) - if state.IsLocked { - return nil, types.ErrGenesisEventAlreadyTriggered - } - - if err := m.lockRollappGenesisTokens(ctx, msg.ChannelId, state.GenesisTokens); err != nil { - return nil, errorsmod.Wrapf(types.ErrLockingGenesisTokens, "failed to lock tokens: %v", err) - } - - state.IsLocked = true - m.SetState(ctx, state) - - return &types.MsgHubGenesisEventResponse{}, nil -} diff --git a/x/hub-genesis/keeper/msg_server_test.go b/x/hub-genesis/keeper/msg_server_test.go deleted file mode 100644 index cc7b4bd5..00000000 --- a/x/hub-genesis/keeper/msg_server_test.go +++ /dev/null @@ -1,220 +0,0 @@ -package keeper_test - -import ( - "fmt" - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - ibctypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - "github.com/dymensionxyz/dymension-rdk/testutil/keepers" - "github.com/dymensionxyz/dymension-rdk/testutil/utils" - "github.com/stretchr/testify/suite" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/dymensionxyz/dymension-rdk/testutil/app" - "github.com/dymensionxyz/dymension-rdk/testutil/ibctest" - "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/keeper" - "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/types" -) - -const ( - rollappDenom = "arax" -) - -var ( - authorisedAddress = utils.AccAddress() - initialRollappBalance = func() sdk.Coin { - n, _ := sdk.NewIntFromString("100000000000000000000") - return sdk.NewCoin(rollappDenom, n) - }() -) - -type HubGenesisMsgServerTestSuite struct { - ibctest.IBCTestUtilSuite - - app *app.App - k *keeper.Keeper - msgServer types.MsgServer - ctx sdk.Context -} - -func TestHubGenesisMsgServerTestSuite(t *testing.T) { - suite.Run(t, new(HubGenesisMsgServerTestSuite)) -} - -func (suite *HubGenesisMsgServerTestSuite) setupTest() { - suite.IBCTestUtilSuite.SetupTest(rollappDenom) - suite.app = suite.RollAppChain.App.(*app.App) - suite.k, suite.ctx = keepers.NewTestHubGenesisKeeperFromApp(suite.app) - suite.msgServer = keeper.NewMsgServerImpl(*suite.k) -} - -func (suite *HubGenesisMsgServerTestSuite) TestTriggerGenesisEvent() { - suite.setupTest() - path := suite.NewTransferPath(suite.RollAppChain, suite.HubChain) - suite.Coordinator.Setup(path) - - cases := []struct { - name string - genesisState *types.GenesisState - msg *types.MsgHubGenesisEvent - rollappBalanceBefore sdk.Coin - expErr error - runBefore func() - }{ - { - name: "successful hub genesis event", - genesisState: &types.GenesisState{ - Params: types.Params{ - GenesisTriggererAllowlist: []types.GenesisTriggererParams{{Address: authorisedAddress.String()}}, - }, - State: types.State{GenesisTokens: sdk.NewCoins(initialRollappBalance)}, - }, - msg: &types.MsgHubGenesisEvent{ - Address: authorisedAddress.String(), - ChannelId: path.EndpointA.ChannelID, - HubId: path.EndpointB.Chain.ChainID, - }, - rollappBalanceBefore: initialRollappBalance, - expErr: nil, - }, { - name: "invalid rollapp genesis event - genesis event already triggered", - genesisState: &types.GenesisState{ - Params: types.Params{ - GenesisTriggererAllowlist: []types.GenesisTriggererParams{{Address: authorisedAddress.String()}}, - }, - State: types.State{IsLocked: true, GenesisTokens: sdk.NewCoins(initialRollappBalance)}, - }, - msg: &types.MsgHubGenesisEvent{ - Address: authorisedAddress.String(), - ChannelId: path.EndpointA.ChannelID, - HubId: path.EndpointB.Chain.ChainID, - }, - rollappBalanceBefore: initialRollappBalance, - expErr: types.ErrGenesisEventAlreadyTriggered, - }, { - name: "invalid rollapp genesis event - address not in Allowlist", - genesisState: &types.GenesisState{ - Params: types.Params{ - GenesisTriggererAllowlist: []types.GenesisTriggererParams{{Address: utils.AccAddress().String()}}, - }, - State: types.State{GenesisTokens: sdk.NewCoins(initialRollappBalance)}, - }, - msg: &types.MsgHubGenesisEvent{ - Address: authorisedAddress.String(), - ChannelId: path.EndpointA.ChannelID, - HubId: path.EndpointB.Chain.ChainID, - }, - rollappBalanceBefore: initialRollappBalance, - expErr: sdkerrors.ErrUnauthorized, - }, { - name: "invalid rollapp genesis event - invalid channel id", - genesisState: &types.GenesisState{ - Params: types.Params{ - GenesisTriggererAllowlist: []types.GenesisTriggererParams{{Address: authorisedAddress.String()}}, - }, - State: types.State{GenesisTokens: sdk.NewCoins(initialRollappBalance)}, - }, - msg: &types.MsgHubGenesisEvent{ - Address: authorisedAddress.String(), - ChannelId: "invalid-channel", - HubId: path.EndpointB.Chain.ChainID, - }, - rollappBalanceBefore: initialRollappBalance, - expErr: types.ErrFailedGetClientState, - }, { - name: "invalid rollapp genesis event - invalid chain id", - genesisState: &types.GenesisState{ - Params: types.Params{ - GenesisTriggererAllowlist: []types.GenesisTriggererParams{{Address: authorisedAddress.String()}}, - }, - State: types.State{GenesisTokens: sdk.NewCoins(initialRollappBalance)}, - }, - msg: &types.MsgHubGenesisEvent{ - Address: authorisedAddress.String(), - ChannelId: path.EndpointA.ChannelID, - HubId: "invalid-chain-id", - }, - rollappBalanceBefore: initialRollappBalance, - expErr: types.ErrChainIDMismatch, - }, { - name: "invalid rollapp genesis event - module account has no coins", - genesisState: &types.GenesisState{ - Params: types.Params{ - GenesisTriggererAllowlist: []types.GenesisTriggererParams{{Address: authorisedAddress.String()}}, - }, - State: types.State{GenesisTokens: sdk.NewCoins(initialRollappBalance)}, - }, - msg: &types.MsgHubGenesisEvent{ - Address: authorisedAddress.String(), - ChannelId: path.EndpointA.ChannelID, - HubId: path.EndpointB.Chain.ChainID, - }, - rollappBalanceBefore: sdk.NewCoin(rollappDenom, sdk.NewInt(0)), - runBefore: func() { - // remove all coins from the module account - err := suite.app.BankKeeper.BurnCoins(suite.ctx, types.ModuleName, sdk.Coins{initialRollappBalance}) - suite.Require().NoError(err) - }, - expErr: types.ErrLockingGenesisTokens, - }, - - // TODO: add test of not enough tokens - } - - for _, tc := range cases { - suite.Run(fmt.Sprintf("Case %s", tc.name), func() { - defer func() { - suite.setupTest() - path = suite.NewTransferPath(suite.RollAppChain, suite.HubChain) - suite.Coordinator.Setup(path) - }() - - if tc.runBefore != nil { - tc.runBefore() - } - - suite.k.SetState(suite.ctx, tc.genesisState.State) - suite.k.SetParams(suite.ctx, tc.genesisState.Params) - moduleAddr := suite.app.AccountKeeper.GetModuleAddress(types.ModuleName) - - // check the initial module balance - rollappBalanceBefore := suite.app.BankKeeper.GetBalance(suite.ctx, moduleAddr, rollappDenom) - suite.Require().Equal(tc.rollappBalanceBefore, rollappBalanceBefore, tc.name) - - // trigger the genesis event - _, err := suite.msgServer.TriggerGenesisEvent(suite.ctx, tc.msg) - suite.Require().ErrorIs(err, tc.expErr, tc.name) - - var ( - expectedBalance sdk.Coin - expectedEscrowBalance sdk.Coin - expectedState bool - ) - - if tc.expErr == nil { - expectedBalance = sdk.NewCoin(rollappDenom, sdk.NewInt(0)) - expectedEscrowBalance = tc.rollappBalanceBefore - expectedState = true - } else { - expectedBalance = tc.rollappBalanceBefore - expectedEscrowBalance = sdk.NewCoin(rollappDenom, sdk.NewInt(0)) - expectedState = false || tc.genesisState.State.IsLocked - } - - // check the hub genesis state - stateState := suite.k.GetState(suite.ctx) - suite.Require().Equal(expectedState, stateState.IsLocked, tc.name) - - // check the module balance after the genesis event - rollappBalanceAfter := suite.app.BankKeeper.GetBalance(suite.ctx, moduleAddr, rollappDenom) - suite.Require().True(expectedBalance.IsEqual(rollappBalanceAfter), tc.name) - - // check the escrow balance after the genesis event - sourceChannel := path.EndpointA.ChannelID - escrowAddress := ibctypes.GetEscrowAddress("transfer", sourceChannel) - escrowBalance := suite.app.BankKeeper.GetBalance(suite.ctx, escrowAddress, rollappDenom) - suite.Require().True(expectedEscrowBalance.IsEqual(escrowBalance), tc.name) - }) - } -} diff --git a/x/hub-genesis/keeper/params.go b/x/hub-genesis/keeper/params.go index 1be76671..b7dd1bbf 100644 --- a/x/hub-genesis/keeper/params.go +++ b/x/hub-genesis/keeper/params.go @@ -16,19 +16,3 @@ func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { k.paramstore.SetParamSet(ctx, ¶ms) } - -// GenesisTriggererAllowlist returns the GenesisTriggererAllowlist param -func (k Keeper) GenesisTriggererAllowlist(ctx sdk.Context) (res []types.GenesisTriggererParams) { - k.paramstore.Get(ctx, types.KeyGenesisTriggererAllowlist, &res) - return -} - -func (k Keeper) IsAddressInGenesisTriggererAllowList(ctx sdk.Context, address string) bool { - allowlist := k.GenesisTriggererAllowlist(ctx) - for _, item := range allowlist { - if item.Address == address { - return true - } - } - return false -} diff --git a/x/hub-genesis/keeper/state.go b/x/hub-genesis/keeper/state.go index 25909810..e327d78f 100644 --- a/x/hub-genesis/keeper/state.go +++ b/x/hub-genesis/keeper/state.go @@ -5,13 +5,13 @@ import ( "github.com/dymensionxyz/dymension-rdk/x/hub-genesis/types" ) -// SetState sets the state state. +// SetState sets the state. func (k Keeper) SetState(ctx sdk.Context, state types.State) { store := ctx.KVStore(k.storeKey) store.Set(types.StateKey, k.cdc.MustMarshal(&state)) } -// GetState returns the state state. +// GetState returns the state. func (k Keeper) GetState(ctx sdk.Context) types.State { store := ctx.KVStore(k.storeKey) bz := store.Get(types.StateKey) diff --git a/x/hub-genesis/module.go b/x/hub-genesis/module.go index ef149e2e..43e64dd3 100644 --- a/x/hub-genesis/module.go +++ b/x/hub-genesis/module.go @@ -84,7 +84,7 @@ func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *r // GetTxCmd returns no root tx command for the hub-genesis module. func (AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() + return nil } // GetQueryCmd returns the root query command for the hub-genesis module. @@ -98,16 +98,14 @@ func (AppModuleBasic) GetQueryCmd() *cobra.Command { type AppModule struct { AppModuleBasic - keeper keeper.Keeper - authKeeper types.AccountKeeper + keeper keeper.Keeper } // NewAppModule creates a new AppModule object. -func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, ak types.AccountKeeper) AppModule { +func NewAppModule(cdc codec.Codec, keeper keeper.Keeper) AppModule { return AppModule{ AppModuleBasic: AppModuleBasic{cdc: cdc}, keeper: keeper, - authKeeper: ak, } } @@ -138,7 +136,6 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd // module-specific gRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQuerier(am.keeper)) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) } // InitGenesis performs genesis initialization for the hub-genesis module. It returns diff --git a/x/hub-genesis/types/codec.go b/x/hub-genesis/types/codec.go index c5ea6e39..7f623149 100644 --- a/x/hub-genesis/types/codec.go +++ b/x/hub-genesis/types/codec.go @@ -4,17 +4,12 @@ import ( "github.com/cosmos/cosmos-sdk/codec" cdctypes "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" ) func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgHubGenesisEvent{}, "hub-genesis/HubGenesisEvent", nil) } func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { - registry.RegisterImplementations((*sdk.Msg)(nil), &MsgHubGenesisEvent{}) - msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } func init() { @@ -22,7 +17,4 @@ func init() { amino.Seal() } -var ( - amino = codec.NewLegacyAmino() - moduleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) -) +var amino = codec.NewLegacyAmino() diff --git a/x/hub-genesis/types/errors.go b/x/hub-genesis/types/errors.go deleted file mode 100644 index b92ce224..00000000 --- a/x/hub-genesis/types/errors.go +++ /dev/null @@ -1,13 +0,0 @@ -package types - -import errorsmod "cosmossdk.io/errors" - -var ( - ErrFailedGetClientState = errorsmod.Register(ModuleName, 1001, "failed to get client state") - ErrChainIDMismatch = errorsmod.Register(ModuleName, 1002, "chain ID not matches with the channel") - ErrInvalidGenesisTokens = errorsmod.Register(ModuleName, 1003, "invalid genesis token") - ErrGenesisEventAlreadyTriggered = errorsmod.Register(ModuleName, 1004, "genesis event already triggered") - ErrGenesisInsufficientBalance = errorsmod.Register(ModuleName, 1005, "insufficient balance in module account to lock genesis tokens") - ErrLockingGenesisTokens = errorsmod.Register(ModuleName, 1006, "failed to lock genesis tokens") - ErrWrongGenesisBalance = errorsmod.Register(ModuleName, 1007, "genesis bank balance different than expected genesis tokens") -) diff --git a/x/hub-genesis/types/expected_keepers.go b/x/hub-genesis/types/expected_keepers.go index cc5bcb0a..2a9df5c7 100644 --- a/x/hub-genesis/types/expected_keepers.go +++ b/x/hub-genesis/types/expected_keepers.go @@ -3,23 +3,9 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" ) -// AccountKeeper defines the contract required for account APIs. -type AccountKeeper interface { - GetModuleAddress(name string) sdk.AccAddress - HasAccount(ctx sdk.Context, addr sdk.AccAddress) bool - +// AuthAccountKeeper defines the contract required for account APIs. +type AuthAccountKeeper interface { GetModuleAccount(ctx sdk.Context, moduleName string) types.ModuleAccountI } - -// BankKeeper defines the expected interface needed to retrieve account balances. -type BankKeeper interface { - SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins - SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error -} - -type ChannelKeeper interface { - GetChannelClientState(ctx sdk.Context, portID, channelID string) (string, exported.ClientState, error) -} diff --git a/x/hub-genesis/types/keys.go b/x/hub-genesis/types/keys.go index 70b28537..f7b97ced 100644 --- a/x/hub-genesis/types/keys.go +++ b/x/hub-genesis/types/keys.go @@ -1,7 +1,6 @@ package types const ( - // module name. ModuleName = "hubgenesis" // StoreKey is the default store key for mint. @@ -13,7 +12,7 @@ const ( // QuerierRoute is the querier route for the minting store. QuerierRoute = StoreKey - // Query endpoints supported by the minting querier. + // QueryParameters endpoints supported by the minting querier. QueryParameters = "parameters" ) diff --git a/x/hub-genesis/types/message_hub_genesis_event.go b/x/hub-genesis/types/message_hub_genesis_event.go deleted file mode 100644 index d407b29b..00000000 --- a/x/hub-genesis/types/message_hub_genesis_event.go +++ /dev/null @@ -1,57 +0,0 @@ -package types - -import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -const TypeMsgHubGenesisEvent = "hub_genesis_event" - -var _ sdk.Msg = &MsgHubGenesisEvent{} - -func NewMsgHubGenesisEvent(address, channelId, hubId string) *MsgHubGenesisEvent { - return &MsgHubGenesisEvent{ - Address: address, - ChannelId: channelId, - HubId: hubId, - } -} - -func (msg *MsgHubGenesisEvent) Route() string { - return RouterKey -} - -func (msg *MsgHubGenesisEvent) Type() string { - return TypeMsgHubGenesisEvent -} - -func (msg *MsgHubGenesisEvent) GetSigners() []sdk.AccAddress { - address, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - panic(err) - } - return []sdk.AccAddress{address} -} - -func (msg *MsgHubGenesisEvent) GetSignBytes() []byte { - bz := moduleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgHubGenesisEvent) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid address (%s)", err) - } - - if msg.ChannelId == "" { - return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "channel id cannot be empty") - } - - if msg.HubId == "" { - return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "hub id cannot be empty") - } - - return nil -} diff --git a/x/hub-genesis/types/params.go b/x/hub-genesis/types/params.go index 50064780..06d6554d 100644 --- a/x/hub-genesis/types/params.go +++ b/x/hub-genesis/types/params.go @@ -1,31 +1,23 @@ package types import ( - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "gopkg.in/yaml.v2" ) var _ paramtypes.ParamSet = (*Params)(nil) -// GenesisTriggererAllowlist is store's key for GenesisTriggererAllowlist Params -var KeyGenesisTriggererAllowlist = []byte("GenesisTriggererAllowlist") - -// ParamTable for hub_genesis module. +// ParamKeyTable for hub_genesis module. func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) } -func NewParams(genesisTriggererAllowlist []GenesisTriggererParams) Params { - return Params{ - GenesisTriggererAllowlist: genesisTriggererAllowlist, - } +func NewParams() Params { + return Params{} } func DefaultParams() Params { - return NewParams([]GenesisTriggererParams{}) + return NewParams() } // String implements the Stringer interface. @@ -34,40 +26,12 @@ func (p Params) String() string { return string(out) } -// Implements params.ParamSet. +// ParamSetPairs implements params.ParamSet. func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(KeyGenesisTriggererAllowlist, &p.GenesisTriggererAllowlist, validateGenesisTriggererAllowlist), - } + return paramtypes.ParamSetPairs{} } // Validate checks that the parameters have valid values. func (p Params) Validate() error { - return validateGenesisTriggererAllowlist(p.GenesisTriggererAllowlist) -} - -// validateGenesisTriggererAllowlist validates the GenesisTriggererAllowlist param -func validateGenesisTriggererAllowlist(v interface{}) error { - genesisTriggererAllowlist, ok := v.([]GenesisTriggererParams) - if !ok { - return fmt.Errorf("invalid parameter type: %T", v) - } - - // Check for duplicated index in genesis triggerer address - rollappGenesisTriggererIndexMap := make(map[string]struct{}) - - for i, item := range genesisTriggererAllowlist { - // check Bech32 format - if _, err := sdk.AccAddressFromBech32(item.Address); err != nil { - return fmt.Errorf("genesisTriggererAllowlist[%d] format error: %s", i, err.Error()) - } - - // check duplicate - if _, ok := rollappGenesisTriggererIndexMap[item.Address]; ok { - return fmt.Errorf("duplicated genesis trigerrer address in genesisTriggererAllowlist") - } - rollappGenesisTriggererIndexMap[item.Address] = struct{}{} - } - return nil } diff --git a/x/hub-genesis/types/params.pb.go b/x/hub-genesis/types/params.pb.go index ce48175b..4344d68e 100644 --- a/x/hub-genesis/types/params.pb.go +++ b/x/hub-genesis/types/params.pb.go @@ -25,10 +25,6 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Params holds parameters for the hub-genesis module. type Params struct { - // genesis_triggerer_allowlist is a list of the - // accounts that are allowed to trigger a genesis event on the rollapp. - // In the case of an empty list, there are no restrictions - GenesisTriggererAllowlist []GenesisTriggererParams `protobuf:"bytes,1,rep,name=genesis_triggerer_allowlist,json=genesisTriggererAllowlist,proto3" json:"genesis_triggerer_allowlist" yaml:"genesis_triggerer_allowlist"` } func (m *Params) Reset() { *m = Params{} } @@ -63,86 +59,25 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo -func (m *Params) GetGenesisTriggererAllowlist() []GenesisTriggererParams { - if m != nil { - return m.GenesisTriggererAllowlist - } - return nil -} - -type GenesisTriggererParams struct { - // address is a bech32-encoded address of the - // accounts that are allowed to trigger a rollapp genesis event. - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` -} - -func (m *GenesisTriggererParams) Reset() { *m = GenesisTriggererParams{} } -func (m *GenesisTriggererParams) String() string { return proto.CompactTextString(m) } -func (*GenesisTriggererParams) ProtoMessage() {} -func (*GenesisTriggererParams) Descriptor() ([]byte, []int) { - return fileDescriptor_a8d0b00d1bcc9c95, []int{1} -} -func (m *GenesisTriggererParams) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GenesisTriggererParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GenesisTriggererParams.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 *GenesisTriggererParams) XXX_Merge(src proto.Message) { - xxx_messageInfo_GenesisTriggererParams.Merge(m, src) -} -func (m *GenesisTriggererParams) XXX_Size() int { - return m.Size() -} -func (m *GenesisTriggererParams) XXX_DiscardUnknown() { - xxx_messageInfo_GenesisTriggererParams.DiscardUnknown(m) -} - -var xxx_messageInfo_GenesisTriggererParams proto.InternalMessageInfo - -func (m *GenesisTriggererParams) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - func init() { proto.RegisterType((*Params)(nil), "rollapp.hub_genesis.Params") - proto.RegisterType((*GenesisTriggererParams)(nil), "rollapp.hub_genesis.GenesisTriggererParams") } func init() { proto.RegisterFile("hub-genesis/params.proto", fileDescriptor_a8d0b00d1bcc9c95) } var fileDescriptor_a8d0b00d1bcc9c95 = []byte{ - // 280 bytes of a gzipped FileDescriptorProto + // 172 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xc8, 0x28, 0x4d, 0xd2, 0x4d, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x2e, 0xca, 0xcf, 0xc9, 0x49, 0x2c, 0x28, 0xd0, 0xcb, 0x28, 0x4d, 0x8a, 0x87, 0xaa, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xeb, 0x83, 0x58, 0x10, - 0xa5, 0x4a, 0x2b, 0x18, 0xb9, 0xd8, 0x02, 0xc0, 0x7a, 0x85, 0xa6, 0x33, 0x72, 0x49, 0x43, 0x15, - 0xc7, 0x97, 0x14, 0x65, 0xa6, 0xa7, 0xa7, 0x16, 0xa5, 0x16, 0xc5, 0x27, 0xe6, 0xe4, 0xe4, 0x97, - 0xe7, 0x64, 0x16, 0x97, 0x48, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x1b, 0x69, 0xeb, 0x61, 0x31, 0x5c, - 0xcf, 0x1d, 0x42, 0x87, 0xc0, 0xb4, 0x41, 0x8c, 0x74, 0xd2, 0x3a, 0x71, 0x4f, 0x9e, 0xe1, 0xd3, - 0x3d, 0x79, 0xa5, 0xca, 0xc4, 0xdc, 0x1c, 0x2b, 0x25, 0x3c, 0xa6, 0x2b, 0x05, 0x49, 0xa6, 0xa3, - 0x99, 0xe1, 0x08, 0x93, 0xb3, 0x62, 0x99, 0xb1, 0x40, 0x9e, 0x41, 0xc9, 0x8d, 0x4b, 0x0c, 0xbb, - 0x35, 0x42, 0x3a, 0x5c, 0xec, 0x89, 0x29, 0x29, 0x45, 0xa9, 0xc5, 0xc5, 0x12, 0x8c, 0x0a, 0x8c, - 0x1a, 0x9c, 0x4e, 0x42, 0x9f, 0xee, 0xc9, 0xf3, 0x41, 0xec, 0x84, 0x4a, 0x28, 0x05, 0xc1, 0x94, - 0x38, 0x05, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, - 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x65, 0x7a, 0x66, - 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x4a, 0x65, 0x6e, 0x6a, 0x5e, 0x71, 0x66, - 0x7e, 0x5e, 0x45, 0x65, 0x15, 0x82, 0xa3, 0x5b, 0x94, 0x92, 0xad, 0x5f, 0xa1, 0x8f, 0x1c, 0xf2, - 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0xe0, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, - 0xaa, 0x00, 0x8d, 0x77, 0x95, 0x01, 0x00, 0x00, + 0xa5, 0x4a, 0x22, 0x5c, 0x6c, 0x01, 0x60, 0xad, 0x56, 0x2c, 0x33, 0x16, 0xc8, 0x33, 0x78, 0xb1, + 0x70, 0x30, 0x0a, 0x30, 0x39, 0x05, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, + 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, + 0x94, 0x65, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x4a, 0x65, 0x6e, + 0x6a, 0x5e, 0x71, 0x66, 0x7e, 0x5e, 0x45, 0x65, 0x15, 0x82, 0xa3, 0x5b, 0x94, 0x92, 0xad, 0x5f, + 0xa1, 0x8f, 0xec, 0xb8, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x8d, 0xc6, 0x80, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0e, 0xf1, 0x3f, 0x16, 0xb8, 0x00, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -165,50 +100,6 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.GenesisTriggererAllowlist) > 0 { - for iNdEx := len(m.GenesisTriggererAllowlist) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.GenesisTriggererAllowlist[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintParams(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *GenesisTriggererParams) 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 *GenesisTriggererParams) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenesisTriggererParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintParams(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } return len(dAtA) - i, nil } @@ -229,25 +120,6 @@ func (m *Params) Size() (n int) { } var l int _ = l - if len(m.GenesisTriggererAllowlist) > 0 { - for _, e := range m.GenesisTriggererAllowlist { - l = e.Size() - n += 1 + l + sovParams(uint64(l)) - } - } - return n -} - -func (m *GenesisTriggererParams) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovParams(uint64(l)) - } return n } @@ -286,122 +158,6 @@ func (m *Params) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenesisTriggererAllowlist", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthParams - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthParams - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.GenesisTriggererAllowlist = append(m.GenesisTriggererAllowlist, GenesisTriggererParams{}) - if err := m.GenesisTriggererAllowlist[len(m.GenesisTriggererAllowlist)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipParams(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthParams - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GenesisTriggererParams) 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 ErrIntOverflowParams - } - 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: GenesisTriggererParams: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GenesisTriggererParams: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - 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 ErrInvalidLengthParams - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthParams - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) diff --git a/x/hub-genesis/types/state.go b/x/hub-genesis/types/state.go index ba4f6a1a..852e392b 100644 --- a/x/hub-genesis/types/state.go +++ b/x/hub-genesis/types/state.go @@ -1,9 +1,19 @@ package types -// validate state +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" +) + func (s State) Validate() error { - if !s.GenesisTokens.IsValid() { - return ErrInvalidGenesisTokens + for _, a := range s.GetGenesisAccounts() { + if err := a.GetAmount().Validate(); err != nil { + return errorsmod.Wrap(err, "amount") + } + _, err := sdk.AccAddressFromBech32(a.GetAddress()) + if err != nil { + return errorsmod.Wrap(err, "address from bech 32") + } } return nil } diff --git a/x/hub-genesis/types/state.pb.go b/x/hub-genesis/types/state.pb.go index 5df134aa..6e9206fe 100644 --- a/x/hub-genesis/types/state.pb.go +++ b/x/hub-genesis/types/state.pb.go @@ -5,7 +5,6 @@ package types import ( fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" @@ -27,10 +26,8 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // State holds the state of the genesis event type State struct { - // is_locked is a boolean that indicates if the genesis event has occured - IsLocked bool `protobuf:"varint,1,opt,name=is_locked,json=isLocked,proto3" json:"is_locked,omitempty"` - // genesis_tokens is the list of tokens that are expected to be locked on genesis event - GenesisTokens github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=genesis_tokens,json=genesisTokens,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"genesis_tokens"` + // accounts on the Hub to fund with some bootstrapping transfers + GenesisAccounts []GenesisAccount `protobuf:"bytes,3,rep,name=genesis_accounts,json=genesisAccounts,proto3" json:"genesis_accounts"` } func (m *State) Reset() { *m = State{} } @@ -66,46 +63,97 @@ func (m *State) XXX_DiscardUnknown() { var xxx_messageInfo_State proto.InternalMessageInfo -func (m *State) GetIsLocked() bool { +func (m *State) GetGenesisAccounts() []GenesisAccount { if m != nil { - return m.IsLocked + return m.GenesisAccounts } - return false + return nil +} + +// GenesisAccount is a struct for the genesis account for the rollapp +type GenesisAccount struct { + // amount of coins to be sent to the genesis address + Amount types.Coin `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount"` + // address is a bech-32 address of the genesis account + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *GenesisAccount) Reset() { *m = GenesisAccount{} } +func (m *GenesisAccount) String() string { return proto.CompactTextString(m) } +func (*GenesisAccount) ProtoMessage() {} +func (*GenesisAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_1ad65c2fe0d953ab, []int{1} +} +func (m *GenesisAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisAccount.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 *GenesisAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisAccount.Merge(m, src) +} +func (m *GenesisAccount) XXX_Size() int { + return m.Size() +} +func (m *GenesisAccount) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisAccount.DiscardUnknown(m) } -func (m *State) GetGenesisTokens() github_com_cosmos_cosmos_sdk_types.Coins { +var xxx_messageInfo_GenesisAccount proto.InternalMessageInfo + +func (m *GenesisAccount) GetAmount() types.Coin { if m != nil { - return m.GenesisTokens + return m.Amount } - return nil + return types.Coin{} +} + +func (m *GenesisAccount) GetAddress() string { + if m != nil { + return m.Address + } + return "" } func init() { proto.RegisterType((*State)(nil), "rollapp.hub_genesis.State") + proto.RegisterType((*GenesisAccount)(nil), "rollapp.hub_genesis.GenesisAccount") } func init() { proto.RegisterFile("hub-genesis/state.proto", fileDescriptor_1ad65c2fe0d953ab) } var fileDescriptor_1ad65c2fe0d953ab = []byte{ - // 282 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xb1, 0x4e, 0xeb, 0x30, - 0x14, 0x86, 0xe3, 0x7b, 0x05, 0x2a, 0x41, 0x30, 0x14, 0x24, 0x4a, 0x91, 0xdc, 0x8a, 0xa9, 0x4b, - 0x6d, 0x0a, 0x13, 0x6b, 0x59, 0x99, 0x5a, 0x26, 0x96, 0x28, 0x4e, 0xac, 0xc4, 0x4a, 0xe2, 0x13, - 0xe5, 0x38, 0xa8, 0xe1, 0x29, 0x18, 0x79, 0x06, 0x9e, 0xa4, 0x63, 0x47, 0x26, 0x40, 0xc9, 0x8b, - 0xa0, 0x38, 0x91, 0xe8, 0x64, 0x1f, 0xfd, 0xbf, 0xbf, 0xcf, 0xb6, 0x7b, 0x11, 0x97, 0x62, 0x1e, - 0x49, 0x2d, 0x51, 0x21, 0x47, 0xe3, 0x1b, 0xc9, 0xf2, 0x02, 0x0c, 0x0c, 0xcf, 0x0a, 0x48, 0x53, - 0x3f, 0xcf, 0x59, 0x5c, 0x0a, 0xaf, 0x2f, 0x8c, 0xcf, 0x23, 0x88, 0xc0, 0xe6, 0xbc, 0xdd, 0x75, - 0xd5, 0x31, 0x0d, 0x00, 0x33, 0x40, 0x2e, 0x7c, 0x94, 0xfc, 0x65, 0x21, 0xa4, 0xf1, 0x17, 0x3c, - 0x00, 0xa5, 0xbb, 0xfc, 0xfa, 0x9d, 0xb8, 0x07, 0xeb, 0x16, 0x3d, 0xbc, 0x72, 0x8f, 0x14, 0x7a, - 0x29, 0x04, 0x89, 0x0c, 0x47, 0x64, 0x4a, 0x66, 0x83, 0xd5, 0x40, 0xe1, 0xa3, 0x9d, 0x87, 0x85, - 0x7b, 0xda, 0x7b, 0x3c, 0x03, 0x89, 0xd4, 0x38, 0xfa, 0x37, 0xfd, 0x3f, 0x3b, 0xbe, 0xbd, 0x64, - 0x1d, 0x9f, 0xb5, 0x7c, 0xd6, 0xf3, 0xd9, 0x03, 0x28, 0xbd, 0xbc, 0xd9, 0x7e, 0x4d, 0x9c, 0x8f, - 0xef, 0xc9, 0x2c, 0x52, 0x26, 0x2e, 0x05, 0x0b, 0x20, 0xe3, 0xfd, 0x65, 0xba, 0x65, 0x8e, 0x61, - 0xc2, 0x4d, 0x95, 0x4b, 0xb4, 0x07, 0x70, 0x75, 0xd2, 0x2b, 0x9e, 0xac, 0x61, 0xb9, 0xde, 0xd6, - 0x94, 0xec, 0x6a, 0x4a, 0x7e, 0x6a, 0x4a, 0xde, 0x1a, 0xea, 0xec, 0x1a, 0xea, 0x7c, 0x36, 0xd4, - 0x79, 0xbe, 0xdf, 0x43, 0x86, 0x55, 0x26, 0x35, 0x2a, 0xd0, 0x9b, 0xea, 0xf5, 0x6f, 0x98, 0x17, - 0x61, 0xc2, 0x37, 0x7c, 0xff, 0x03, 0xad, 0x49, 0x1c, 0xda, 0x67, 0xdf, 0xfd, 0x06, 0x00, 0x00, - 0xff, 0xff, 0x4b, 0xdf, 0xb4, 0xa1, 0x5c, 0x01, 0x00, 0x00, + // 305 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x41, 0x4f, 0xfa, 0x30, + 0x18, 0xc6, 0x57, 0xe0, 0xcf, 0x1f, 0x47, 0xa2, 0x64, 0x9a, 0x38, 0x39, 0x54, 0x82, 0x17, 0x2e, + 0xb4, 0x01, 0x0f, 0xc6, 0xa3, 0x78, 0x30, 0xe1, 0x08, 0x9e, 0xbc, 0x90, 0xae, 0x6b, 0x46, 0x23, + 0xeb, 0xbb, 0xec, 0xed, 0x0c, 0xf8, 0x29, 0xfc, 0x58, 0x1c, 0x39, 0x7a, 0x32, 0x06, 0xbe, 0x88, + 0x19, 0x9b, 0x51, 0x12, 0x4f, 0x7d, 0xdf, 0x3e, 0xbf, 0x3e, 0x7d, 0xf2, 0xb8, 0xe7, 0xf3, 0x2c, + 0xe8, 0x47, 0xca, 0x28, 0xd4, 0xc8, 0xd1, 0x0a, 0xab, 0x58, 0x92, 0x82, 0x05, 0xef, 0x34, 0x85, + 0xc5, 0x42, 0x24, 0x09, 0x9b, 0x67, 0xc1, 0xac, 0x04, 0xda, 0x67, 0x11, 0x44, 0xb0, 0xd7, 0x79, + 0x3e, 0x15, 0x68, 0x9b, 0x4a, 0xc0, 0x18, 0x90, 0x07, 0x02, 0x15, 0x7f, 0x19, 0x04, 0xca, 0x8a, + 0x01, 0x97, 0xa0, 0x4d, 0xa1, 0x77, 0xb5, 0xfb, 0x6f, 0x9a, 0x3b, 0x7b, 0x8f, 0x6e, 0xab, 0x74, + 0x9a, 0x09, 0x29, 0x21, 0x33, 0x16, 0xfd, 0x6a, 0xa7, 0xda, 0x6b, 0x0e, 0xaf, 0xd8, 0x1f, 0xdf, + 0xb1, 0x87, 0xe2, 0xbc, 0x2b, 0xd8, 0x51, 0x6d, 0xfd, 0x71, 0xe9, 0x4c, 0x4e, 0xa2, 0x83, 0x5b, + 0x1c, 0xd7, 0x1a, 0xa4, 0x55, 0x19, 0xd7, 0x1a, 0x95, 0x56, 0xb5, 0x2b, 0xdd, 0xe3, 0xc3, 0x47, + 0xde, 0x8d, 0x5b, 0x17, 0x71, 0x3e, 0xf9, 0xa4, 0x43, 0x7a, 0xcd, 0xe1, 0x05, 0x2b, 0xd2, 0xb2, + 0x3c, 0x2d, 0x2b, 0xd3, 0xb2, 0x7b, 0xd0, 0xa6, 0xf4, 0x2f, 0x71, 0xcf, 0x77, 0xff, 0x8b, 0x30, + 0x4c, 0x15, 0xa2, 0x5f, 0xe9, 0x90, 0xde, 0xd1, 0xe4, 0x7b, 0x1d, 0x4d, 0xd7, 0x5b, 0x4a, 0x36, + 0x5b, 0x4a, 0x3e, 0xb7, 0x94, 0xbc, 0xed, 0xa8, 0xb3, 0xd9, 0x51, 0xe7, 0x7d, 0x47, 0x9d, 0xa7, + 0xdb, 0x48, 0xdb, 0x79, 0x16, 0x30, 0x09, 0x31, 0x0f, 0x57, 0xb1, 0x32, 0xa8, 0xc1, 0x2c, 0x57, + 0xaf, 0x3f, 0x4b, 0x3f, 0x0d, 0x9f, 0xf9, 0x92, 0xff, 0x6e, 0xdd, 0xae, 0x12, 0x85, 0x41, 0x7d, + 0xdf, 0xd5, 0xf5, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x32, 0x13, 0x75, 0x6d, 0x91, 0x01, 0x00, + 0x00, } func (m *State) Marshal() (dAtA []byte, err error) { @@ -128,10 +176,10 @@ func (m *State) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.GenesisTokens) > 0 { - for iNdEx := len(m.GenesisTokens) - 1; iNdEx >= 0; iNdEx-- { + if len(m.GenesisAccounts) > 0 { + for iNdEx := len(m.GenesisAccounts) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.GenesisTokens[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.GenesisAccounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -139,19 +187,49 @@ func (m *State) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintState(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a } } - if m.IsLocked { + return len(dAtA) - i, nil +} + +func (m *GenesisAccount) 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 *GenesisAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintState(dAtA, i, uint64(len(m.Address))) i-- - if m.IsLocked { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + dAtA[i] = 0x12 + } + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x8 + i -= size + i = encodeVarintState(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -172,11 +250,8 @@ func (m *State) Size() (n int) { } var l int _ = l - if m.IsLocked { - n += 2 - } - if len(m.GenesisTokens) > 0 { - for _, e := range m.GenesisTokens { + if len(m.GenesisAccounts) > 0 { + for _, e := range m.GenesisAccounts { l = e.Size() n += 1 + l + sovState(uint64(l)) } @@ -184,6 +259,21 @@ func (m *State) Size() (n int) { return n } +func (m *GenesisAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Amount.Size() + n += 1 + l + sovState(uint64(l)) + l = len(m.Address) + if l > 0 { + n += 1 + l + sovState(uint64(l)) + } + return n +} + func sovState(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -219,11 +309,11 @@ func (m *State) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: State: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IsLocked", wireType) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GenesisAccounts", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowState @@ -233,15 +323,79 @@ func (m *State) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - m.IsLocked = bool(v != 0) - case 2: + if msglen < 0 { + return ErrInvalidLengthState + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthState + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GenesisAccounts = append(m.GenesisAccounts, GenesisAccount{}) + if err := m.GenesisAccounts[len(m.GenesisAccounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipState(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthState + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenesisAccount) 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 ErrIntOverflowState + } + 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: GenesisAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenesisTokens", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -268,11 +422,42 @@ func (m *State) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.GenesisTokens = append(m.GenesisTokens, types.Coin{}) - if err := m.GenesisTokens[len(m.GenesisTokens)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowState + } + 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 ErrInvalidLengthState + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthState + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipState(dAtA[iNdEx:]) diff --git a/x/hub-genesis/types/tx.pb.go b/x/hub-genesis/types/tx.pb.go deleted file mode 100644 index 186e987d..00000000 --- a/x/hub-genesis/types/tx.pb.go +++ /dev/null @@ -1,631 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: hub-genesis/tx.proto - -package types - -import ( - context "context" - fmt "fmt" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/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 - -// MsgHubGenesisEvent is the message type for triggering the hub genesis event -type MsgHubGenesisEvent struct { - // address is the bech32-encoded address of the sender - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // channel_id is the hub channel id on the rollapp - ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` - // hub_id is the hub's chainid - HubId string `protobuf:"bytes,3,opt,name=hub_id,json=hubId,proto3" json:"hub_id,omitempty"` -} - -func (m *MsgHubGenesisEvent) Reset() { *m = MsgHubGenesisEvent{} } -func (m *MsgHubGenesisEvent) String() string { return proto.CompactTextString(m) } -func (*MsgHubGenesisEvent) ProtoMessage() {} -func (*MsgHubGenesisEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_9b8a59dbc89b5c59, []int{0} -} -func (m *MsgHubGenesisEvent) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgHubGenesisEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgHubGenesisEvent.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 *MsgHubGenesisEvent) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgHubGenesisEvent.Merge(m, src) -} -func (m *MsgHubGenesisEvent) XXX_Size() int { - return m.Size() -} -func (m *MsgHubGenesisEvent) XXX_DiscardUnknown() { - xxx_messageInfo_MsgHubGenesisEvent.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgHubGenesisEvent proto.InternalMessageInfo - -func (m *MsgHubGenesisEvent) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - -func (m *MsgHubGenesisEvent) GetChannelId() string { - if m != nil { - return m.ChannelId - } - return "" -} - -func (m *MsgHubGenesisEvent) GetHubId() string { - if m != nil { - return m.HubId - } - return "" -} - -type MsgHubGenesisEventResponse struct { -} - -func (m *MsgHubGenesisEventResponse) Reset() { *m = MsgHubGenesisEventResponse{} } -func (m *MsgHubGenesisEventResponse) String() string { return proto.CompactTextString(m) } -func (*MsgHubGenesisEventResponse) ProtoMessage() {} -func (*MsgHubGenesisEventResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b8a59dbc89b5c59, []int{1} -} -func (m *MsgHubGenesisEventResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgHubGenesisEventResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgHubGenesisEventResponse.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 *MsgHubGenesisEventResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgHubGenesisEventResponse.Merge(m, src) -} -func (m *MsgHubGenesisEventResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgHubGenesisEventResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgHubGenesisEventResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgHubGenesisEventResponse proto.InternalMessageInfo - -func init() { - proto.RegisterType((*MsgHubGenesisEvent)(nil), "rollapp.hub_genesis.MsgHubGenesisEvent") - proto.RegisterType((*MsgHubGenesisEventResponse)(nil), "rollapp.hub_genesis.MsgHubGenesisEventResponse") -} - -func init() { proto.RegisterFile("hub-genesis/tx.proto", fileDescriptor_9b8a59dbc89b5c59) } - -var fileDescriptor_9b8a59dbc89b5c59 = []byte{ - // 262 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xc9, 0x28, 0x4d, 0xd2, - 0x4d, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, - 0x17, 0x12, 0x2e, 0xca, 0xcf, 0xc9, 0x49, 0x2c, 0x28, 0xd0, 0xcb, 0x28, 0x4d, 0x8a, 0x87, 0xca, - 0x2a, 0xa5, 0x70, 0x09, 0xf9, 0x16, 0xa7, 0x7b, 0x94, 0x26, 0xb9, 0x43, 0x04, 0x5c, 0xcb, 0x52, - 0xf3, 0x4a, 0x84, 0x24, 0xb8, 0xd8, 0x13, 0x53, 0x52, 0x8a, 0x52, 0x8b, 0x8b, 0x25, 0x18, 0x15, - 0x18, 0x35, 0x38, 0x83, 0x60, 0x5c, 0x21, 0x59, 0x2e, 0xae, 0xe4, 0x8c, 0xc4, 0xbc, 0xbc, 0xd4, - 0x9c, 0xf8, 0xcc, 0x14, 0x09, 0x26, 0xb0, 0x24, 0x27, 0x54, 0xc4, 0x33, 0x45, 0x48, 0x94, 0x8b, - 0x0d, 0x64, 0x7a, 0x66, 0x8a, 0x04, 0x33, 0x58, 0x8a, 0x35, 0xa3, 0x34, 0xc9, 0x33, 0x45, 0x49, - 0x86, 0x4b, 0x0a, 0xd3, 0x96, 0xa0, 0xd4, 0xe2, 0x82, 0xfc, 0xbc, 0xe2, 0x54, 0xa3, 0x32, 0x2e, - 0x66, 0xdf, 0xe2, 0x74, 0xa1, 0x7c, 0x2e, 0xe1, 0x90, 0xa2, 0xcc, 0xf4, 0xf4, 0xd4, 0x22, 0x14, - 0xb7, 0xa8, 0xeb, 0x61, 0x71, 0xb7, 0x1e, 0xa6, 0x71, 0x52, 0xfa, 0x44, 0x2a, 0x84, 0xd9, 0xeb, - 0x14, 0x7c, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, - 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x96, 0xe9, 0x99, 0x25, - 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x29, 0x95, 0xb9, 0xa9, 0x79, 0xc5, 0x99, 0xf9, - 0x79, 0x15, 0x95, 0x55, 0x08, 0x8e, 0x6e, 0x51, 0x4a, 0xb6, 0x7e, 0x85, 0x3e, 0x4a, 0x40, 0x57, - 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x03, 0xdb, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x43, 0xad, - 0x71, 0xfc, 0x84, 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 - -// 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 { - TriggerGenesisEvent(ctx context.Context, in *MsgHubGenesisEvent, opts ...grpc.CallOption) (*MsgHubGenesisEventResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) TriggerGenesisEvent(ctx context.Context, in *MsgHubGenesisEvent, opts ...grpc.CallOption) (*MsgHubGenesisEventResponse, error) { - out := new(MsgHubGenesisEventResponse) - err := c.cc.Invoke(ctx, "/rollapp.hub_genesis.Msg/TriggerGenesisEvent", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - TriggerGenesisEvent(context.Context, *MsgHubGenesisEvent) (*MsgHubGenesisEventResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) TriggerGenesisEvent(ctx context.Context, req *MsgHubGenesisEvent) (*MsgHubGenesisEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TriggerGenesisEvent not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_TriggerGenesisEvent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgHubGenesisEvent) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).TriggerGenesisEvent(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/rollapp.hub_genesis.Msg/TriggerGenesisEvent", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).TriggerGenesisEvent(ctx, req.(*MsgHubGenesisEvent)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "rollapp.hub_genesis.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "TriggerGenesisEvent", - Handler: _Msg_TriggerGenesisEvent_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "hub-genesis/tx.proto", -} - -func (m *MsgHubGenesisEvent) 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 *MsgHubGenesisEvent) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgHubGenesisEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.HubId) > 0 { - i -= len(m.HubId) - copy(dAtA[i:], m.HubId) - i = encodeVarintTx(dAtA, i, uint64(len(m.HubId))) - i-- - dAtA[i] = 0x1a - } - if len(m.ChannelId) > 0 { - i -= len(m.ChannelId) - copy(dAtA[i:], m.ChannelId) - i = encodeVarintTx(dAtA, i, uint64(len(m.ChannelId))) - i-- - dAtA[i] = 0x12 - } - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintTx(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgHubGenesisEventResponse) 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 *MsgHubGenesisEventResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgHubGenesisEventResponse) 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 *MsgHubGenesisEvent) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.ChannelId) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.HubId) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgHubGenesisEventResponse) 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 *MsgHubGenesisEvent) 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: MsgHubGenesisEvent: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgHubGenesisEvent: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", 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.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", 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.ChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HubId", 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.HubId = string(dAtA[iNdEx:postIndex]) - 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 *MsgHubGenesisEventResponse) 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: MsgHubGenesisEventResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgHubGenesisEventResponse: 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") -)