From fb1c2b0221dfe49af361cde623fea74f4da424a2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 22:07:15 +0900 Subject: [PATCH] feat: support message based proposals (backport #1372) (#1373) * feat: support message based proposals (#1372) * feat: change MakeSwapProposal to foundation proposal * chore: refactor MsgMakeSwapProposal -> MsgSetSwap * chore: clean-up * chore: use original proto stringer interface * chore: remove unused proto annotations * chore: allow gov and foundation as authority address * chore: lint fix * chore: remove redundant part * chore: update changelog (cherry picked from commit 97570b2d5868b100233debc09598f00daf65aa45) # Conflicts: # x/fswap/keeper/proposal.go * chore: fix conflict --------- Co-authored-by: jaeseung-bae <119839167+jaeseung-bae@users.noreply.github.com> Co-authored-by: jaeseung.bae Co-authored-by: zemyblue --- CHANGELOG.md | 1 + docs/core/proto-docs.md | 49 +-- proto/lbm/fswap/v1/fswap.proto | 19 -- proto/lbm/fswap/v1/tx.proto | 13 + simapp/app.go | 7 +- x/fswap/client/cli/tx.go | 79 +++-- x/fswap/client/proposal_handler.go | 8 - x/fswap/codec/codec.go | 18 -- x/fswap/handler.go | 27 -- x/fswap/keeper/keeper.go | 192 ++++++++++- x/fswap/keeper/keeper_test.go | 132 +++++++- x/fswap/keeper/msg_server.go | 14 + x/fswap/keeper/msg_server_test.go | 4 +- x/fswap/keeper/proposal.go | 169 ---------- x/fswap/keeper/proposal_test.go | 167 ---------- x/fswap/proposal_handler_test.go | 40 --- x/fswap/types/codec.go | 33 +- x/fswap/types/fswap.go | 19 +- x/fswap/types/fswap.pb.go | 477 +++------------------------- x/fswap/types/genesis.go | 18 ++ x/fswap/types/msgs.go | 41 ++- x/fswap/types/proposal.go | 54 ---- x/fswap/types/tx.pb.go | 492 +++++++++++++++++++++++++++-- 23 files changed, 996 insertions(+), 1077 deletions(-) delete mode 100644 x/fswap/client/proposal_handler.go delete mode 100644 x/fswap/codec/codec.go delete mode 100644 x/fswap/handler.go delete mode 100644 x/fswap/keeper/proposal.go delete mode 100644 x/fswap/keeper/proposal_test.go delete mode 100644 x/fswap/proposal_handler_test.go delete mode 100644 x/fswap/types/proposal.go diff --git a/CHANGELOG.md b/CHANGELOG.md index d83d4ec64e..601ae4e5d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/fswap) [\#1363](https://github.com/Finschia/finschia-sdk/pull/1363) introduce new event for MakeSwapProposal * (x/fbridge) [\#1366](https://github.com/Finschia/finschia-sdk/pull/1366) Set target denom as module parameters * (x/fbridge) [\#1369](https://github.com/Finschia/finschia-sdk/pull/1369) Add the event of `SetBridgeStatus` +* (x/fswap) [\#1372](https://github.com/Finschia/finschia-sdk/pull/1372) support message based proposals ### Bug Fixes * (x/auth) [#1281](https://github.com/Finschia/finschia-sdk/pull/1281) `ModuleAccount.Validate` now reports a nil `.BaseAccount` instead of panicking. (backport #1274) diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md index 9cbd5f6d61..289208be3d 100644 --- a/docs/core/proto-docs.md +++ b/docs/core/proto-docs.md @@ -978,7 +978,6 @@ - [Msg](#lbm.foundation.v1.Msg) - [lbm/fswap/v1/fswap.proto](#lbm/fswap/v1/fswap.proto) - - [MakeSwapProposal](#lbm.fswap.v1.MakeSwapProposal) - [Swap](#lbm.fswap.v1.Swap) - [SwapStats](#lbm.fswap.v1.SwapStats) - [Swapped](#lbm.fswap.v1.Swapped) @@ -1002,6 +1001,8 @@ - [Query](#lbm.fswap.v1.Query) - [lbm/fswap/v1/tx.proto](#lbm/fswap/v1/tx.proto) + - [MsgSetSwap](#lbm.fswap.v1.MsgSetSwap) + - [MsgSetSwapResponse](#lbm.fswap.v1.MsgSetSwapResponse) - [MsgSwap](#lbm.fswap.v1.MsgSwap) - [MsgSwapAll](#lbm.fswap.v1.MsgSwapAll) - [MsgSwapAllResponse](#lbm.fswap.v1.MsgSwapAllResponse) @@ -14555,24 +14556,6 @@ Msg defines the foundation Msg service. - - -### MakeSwapProposal -From cosmos-sdk 0.46.0 they deprecated this way, but currently finschia-sdk based on 0.45.10 - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `title` | [string](#string) | | | -| `description` | [string](#string) | | | -| `swap` | [Swap](#lbm.fswap.v1.Swap) | | | -| `to_denom_metadata` | [cosmos.bank.v1beta1.Metadata](#cosmos.bank.v1beta1.Metadata) | | | - - - - - - ### Swap @@ -14856,6 +14839,33 @@ GenesisState defines the fswap module's genesis state. + + +### MsgSetSwap + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `authority` | [string](#string) | | authority is the address of the privileged account. | +| `swap` | [Swap](#lbm.fswap.v1.Swap) | | | +| `to_denom_metadata` | [cosmos.bank.v1beta1.Metadata](#cosmos.bank.v1beta1.Metadata) | | | + + + + + + + + +### MsgSetSwapResponse + + + + + + + ### MsgSwap @@ -14925,6 +14935,7 @@ GenesisState defines the fswap module's genesis state. | ----------- | ------------ | ------------- | ------------| ------- | -------- | | `Swap` | [MsgSwap](#lbm.fswap.v1.MsgSwap) | [MsgSwapResponse](#lbm.fswap.v1.MsgSwapResponse) | | | | `SwapAll` | [MsgSwapAll](#lbm.fswap.v1.MsgSwapAll) | [MsgSwapAllResponse](#lbm.fswap.v1.MsgSwapAllResponse) | | | +| `SetSwap` | [MsgSetSwap](#lbm.fswap.v1.MsgSetSwap) | [MsgSetSwapResponse](#lbm.fswap.v1.MsgSetSwapResponse) | | | diff --git a/proto/lbm/fswap/v1/fswap.proto b/proto/lbm/fswap/v1/fswap.proto index 13a5c2a006..5bb9331bbc 100644 --- a/proto/lbm/fswap/v1/fswap.proto +++ b/proto/lbm/fswap/v1/fswap.proto @@ -5,12 +5,8 @@ option go_package = "github.com/Finschia/finschia-sdk/x/fswap/types"; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; -import "cosmos/bank/v1beta1/bank.proto"; message Swap { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; - string from_denom = 1; string to_denom = 2; string amount_cap_for_to_denom = 3 @@ -20,25 +16,10 @@ message Swap { } message SwapStats { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; - int32 swap_count = 1; } -// From cosmos-sdk 0.46.0 they deprecated this way, but currently finschia-sdk based on 0.45.10 -message MakeSwapProposal { - option (gogoproto.goproto_stringer) = false; - - string title = 1; - string description = 2; - Swap swap = 3 [(gogoproto.nullable) = false]; - cosmos.bank.v1beta1.Metadata to_denom_metadata = 4 - [(gogoproto.moretags) = "yaml:\"denom_metadata\"", (gogoproto.nullable) = false]; -} - message Swapped { - option (gogoproto.goproto_stringer) = false; cosmos.base.v1beta1.Coin from_coin_amount = 1 [(gogoproto.castrepeated) = "github.com/Finschia/finschia-sdk/types.Coin", (gogoproto.nullable) = false]; cosmos.base.v1beta1.Coin to_coin_amount = 2 diff --git a/proto/lbm/fswap/v1/tx.proto b/proto/lbm/fswap/v1/tx.proto index 07813f9eab..eb6154dd81 100644 --- a/proto/lbm/fswap/v1/tx.proto +++ b/proto/lbm/fswap/v1/tx.proto @@ -5,10 +5,13 @@ option go_package = "github.com/Finschia/finschia-sdk/x/fswap/types"; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/bank/v1beta1/bank.proto"; +import "lbm/fswap/v1/fswap.proto"; service Msg { rpc Swap(MsgSwap) returns (MsgSwapResponse); rpc SwapAll(MsgSwapAll) returns (MsgSwapAllResponse); + rpc SetSwap(MsgSetSwap) returns (MsgSetSwapResponse); } message MsgSwap { @@ -30,3 +33,13 @@ message MsgSwapAll { } message MsgSwapAllResponse {} + +message MsgSetSwap { + // authority is the address of the privileged account. + string authority = 1; + Swap swap = 2 [(gogoproto.nullable) = false]; + cosmos.bank.v1beta1.Metadata to_denom_metadata = 3 + [(gogoproto.moretags) = "yaml:\"denom_metadata\"", (gogoproto.nullable) = false]; +} + +message MsgSetSwapResponse {} diff --git a/simapp/app.go b/simapp/app.go index 4f615af767..f7500fb8fc 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -78,7 +78,6 @@ import ( foundationkeeper "github.com/Finschia/finschia-sdk/x/foundation/keeper" foundationmodule "github.com/Finschia/finschia-sdk/x/foundation/module" "github.com/Finschia/finschia-sdk/x/fswap" - fswapclient "github.com/Finschia/finschia-sdk/x/fswap/client" fswapkeeper "github.com/Finschia/finschia-sdk/x/fswap/keeper" fswaptypes "github.com/Finschia/finschia-sdk/x/fswap/types" "github.com/Finschia/finschia-sdk/x/genutil" @@ -139,7 +138,6 @@ var ( upgradeclient.ProposalHandler, upgradeclient.CancelProposalHandler, foundationclient.ProposalHandler, - fswapclient.ProposalHandler, ), params.AppModuleBasic{}, crisis.AppModuleBasic{}, @@ -349,7 +347,7 @@ func NewSimApp( app.AuthzKeeper = authzkeeper.NewKeeper(keys[authzkeeper.StoreKey], appCodec, app.BaseApp.MsgServiceRouter()) fswapConfig := fswaptypes.DefaultConfig() - app.FswapKeeper = fswapkeeper.NewKeeper(appCodec, keys[fswaptypes.StoreKey], fswapConfig, app.BankKeeper) + app.FswapKeeper = fswapkeeper.NewKeeper(appCodec, keys[fswaptypes.StoreKey], fswapConfig, fswaptypes.DefaultAuthority().String(), app.BankKeeper) // register the proposal types govRouter := govtypes.NewRouter() @@ -357,8 +355,7 @@ func NewSimApp( AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)). AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). - AddRoute(foundation.RouterKey, foundationkeeper.NewFoundationProposalsHandler(app.FoundationKeeper)). - AddRoute(fswaptypes.RouterKey, fswap.NewSwapHandler(app.FswapKeeper)) + AddRoute(foundation.RouterKey, foundationkeeper.NewFoundationProposalsHandler(app.FoundationKeeper)) govKeeper := govkeeper.NewKeeper( appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper, diff --git a/x/fswap/client/cli/tx.go b/x/fswap/client/cli/tx.go index 433c8ae33e..61cd359d75 100644 --- a/x/fswap/client/cli/tx.go +++ b/x/fswap/client/cli/tx.go @@ -13,8 +13,6 @@ import ( sdkerrors "github.com/Finschia/finschia-sdk/types/errors" bank "github.com/Finschia/finschia-sdk/x/bank/types" "github.com/Finschia/finschia-sdk/x/fswap/types" - govcli "github.com/Finschia/finschia-sdk/x/gov/client/cli" - gov "github.com/Finschia/finschia-sdk/x/gov/types" ) const ( @@ -36,6 +34,7 @@ func GetTxCmd() *cobra.Command { cmd.AddCommand( CmdTxMsgSwap(), CmdTxMsgSwapAll(), + CmdMsgSetSwap(), ) return cmd @@ -115,21 +114,21 @@ func CmdTxMsgSwapAll() *cobra.Command { return cmd } -// NewCmdMakeSwapProposal implements a command handler for submitting a swap init proposal transaction. -func NewCmdMakeSwapProposal() *cobra.Command { +// CmdMsgSetSwap implements a command handler for submitting a swap init proposal transaction. +func CmdMsgSetSwap() *cobra.Command { cmd := &cobra.Command{ - Use: "make-swap [messages-json]", - Args: cobra.ExactArgs(1), - Short: "todo", + Use: "set-swap [authority] [metadata-json]", + Args: cobra.ExactArgs(2), + Short: "Set a swap", Long: ` Parameters: - messages-json: messages in json format that will be executed if the proposal is accepted. + metadata-json: messages in json format that will be executed if the proposal is accepted. -Example of the content of messages-json: +Example of the content of metadata-json: { "metadata": { - "description": "the base coin of Finschia mainnet", + "description": "example of to-denom is finschia cony", "denom_units": [ { "denom": "cony", @@ -152,19 +151,11 @@ Example of the content of messages-json: } `, RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - from := clientCtx.GetFromAddress() - - title, err := cmd.Flags().GetString(govcli.FlagTitle) - if err != nil { + if err := validateGenerateOnly(cmd); err != nil { return err } - description, err := cmd.Flags().GetString(govcli.FlagDescription) + clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err } @@ -178,10 +169,12 @@ Example of the content of messages-json: if err != nil { return err } + amountCapStr, err := cmd.Flags().GetString(FlagAmountCapForToDenom) if err != nil { return err } + amountCap, ok := sdk.NewIntFromString(amountCapStr) if !ok { return sdkerrors.ErrInvalidRequest.Wrapf("failed to parse %s %s", FlagAmountCapForToDenom, amountCap.String()) @@ -202,42 +195,42 @@ Example of the content of messages-json: SwapRate: swapRateDec, } - toDenomMetadata, err := parseToDenomMetadata(args[0]) - if err != nil { - return err - } - - content := types.NewMakeSwapProposal(title, description, swap, toDenomMetadata) - - depositStr, err := cmd.Flags().GetString(govcli.FlagDeposit) - if err != nil { - return err - } - deposit, err := sdk.ParseCoinsNormalized(depositStr) + authority := args[0] + toDenomMetadata, err := parseToDenomMetadata(args[1]) if err != nil { return err } - msg, err := gov.NewMsgSubmitProposal(content, deposit, from) - if err != nil { - return err + msg := types.MsgSetSwap{ + Authority: authority, + Swap: swap, + ToDenomMetadata: toDenomMetadata, } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) }, } - cmd.Flags().String(govcli.FlagTitle, "", "title of proposal") - cmd.Flags().String(govcli.FlagDescription, "", "description of proposal") - cmd.Flags().String(govcli.FlagDeposit, "", "deposit of proposal") - cmd.Flags().String(FlagFromDenom, "", "cony") - cmd.Flags().String(FlagToDenom, "", "PDT") - cmd.Flags().String(FlagAmountCapForToDenom, "0", "tbd") - cmd.Flags().String(FlagSwapRate, "0", "tbd") + cmd.Flags().String(FlagFromDenom, "", "set fromDenom string, ex) cony") + cmd.Flags().String(FlagToDenom, "", "set toDenom string, ex) peb") + cmd.Flags().String(FlagAmountCapForToDenom, "0", "set integer value for limit cap for the amount to swap to to-denom, ex 1000000000") + cmd.Flags().String(FlagSwapRate, "0", "set swap rate for swap from fromDenom to toDenom, ex(rate for cony to peb) 148079656000000") + flags.AddTxFlagsToCmd(cmd) return cmd } +func validateGenerateOnly(cmd *cobra.Command) error { + generateOnly, err := cmd.Flags().GetBool(flags.FlagGenerateOnly) + if err != nil { + return err + } + if !generateOnly { + return fmt.Errorf("you must use it with the flag --%s", flags.FlagGenerateOnly) + } + return nil +} + func parseToDenomMetadata(jsonDenomMetadata string) (bank.Metadata, error) { type toDenomMeta struct { Metadata bank.Metadata `json:"metadata"` diff --git a/x/fswap/client/proposal_handler.go b/x/fswap/client/proposal_handler.go deleted file mode 100644 index 72c073b733..0000000000 --- a/x/fswap/client/proposal_handler.go +++ /dev/null @@ -1,8 +0,0 @@ -package client - -import ( - "github.com/Finschia/finschia-sdk/x/fswap/client/cli" - govclient "github.com/Finschia/finschia-sdk/x/gov/client" -) - -var ProposalHandler = govclient.NewProposalHandler(cli.NewCmdMakeSwapProposal) diff --git a/x/fswap/codec/codec.go b/x/fswap/codec/codec.go deleted file mode 100644 index 7cbd4f6a69..0000000000 --- a/x/fswap/codec/codec.go +++ /dev/null @@ -1,18 +0,0 @@ -package codec - -import ( - "github.com/Finschia/finschia-sdk/codec" - cryptocodec "github.com/Finschia/finschia-sdk/crypto/codec" - sdk "github.com/Finschia/finschia-sdk/types" -) - -var ( - Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewAminoCodec(Amino) -) - -func init() { - cryptocodec.RegisterCrypto(Amino) - codec.RegisterEvidences(Amino) - sdk.RegisterLegacyAminoCodec(Amino) -} diff --git a/x/fswap/handler.go b/x/fswap/handler.go deleted file mode 100644 index 7bae485c7e..0000000000 --- a/x/fswap/handler.go +++ /dev/null @@ -1,27 +0,0 @@ -package fswap - -import ( - sdk "github.com/Finschia/finschia-sdk/types" - sdkerrors "github.com/Finschia/finschia-sdk/types/errors" - "github.com/Finschia/finschia-sdk/x/fswap/keeper" - "github.com/Finschia/finschia-sdk/x/fswap/types" - govtypes "github.com/Finschia/finschia-sdk/x/gov/types" -) - -// NewSwapHandler creates a governance handler to manage new proposal types. -// It enables Swap to propose a swap init -func NewSwapHandler(k keeper.Keeper) govtypes.Handler { - return func(ctx sdk.Context, content govtypes.Content) error { - switch c := content.(type) { - case *types.MakeSwapProposal: - return handleMakeSwapProposal(ctx, k, c) - - default: - return sdkerrors.ErrUnknownRequest.Wrapf("unrecognized sawp proposal content type: %T", c) - } - } -} - -func handleMakeSwapProposal(ctx sdk.Context, k keeper.Keeper, p *types.MakeSwapProposal) error { - return k.MakeSwap(ctx, p.Swap, p.ToDenomMetadata) -} diff --git a/x/fswap/keeper/keeper.go b/x/fswap/keeper/keeper.go index 6f88495b02..4ea9298703 100644 --- a/x/fswap/keeper/keeper.go +++ b/x/fswap/keeper/keeper.go @@ -9,23 +9,41 @@ import ( "github.com/Finschia/finschia-sdk/store/prefix" storetypes "github.com/Finschia/finschia-sdk/store/types" sdk "github.com/Finschia/finschia-sdk/types" + sdkerrors "github.com/Finschia/finschia-sdk/types/errors" + bank "github.com/Finschia/finschia-sdk/x/bank/types" "github.com/Finschia/finschia-sdk/x/fswap/types" ) type Keeper struct { - cdc codec.BinaryCodec - storeKey storetypes.StoreKey - - config types.Config - + cdc codec.BinaryCodec + storeKey storetypes.StoreKey + config types.Config + authority string BankKeeper } -func NewKeeper(cdc codec.BinaryCodec, storeKey storetypes.StoreKey, config types.Config, bk BankKeeper) Keeper { +func NewKeeper(cdc codec.BinaryCodec, storeKey storetypes.StoreKey, config types.Config, authority string, bk BankKeeper) Keeper { + if _, err := sdk.AccAddressFromBech32(authority); err != nil { + panic("authority is not a valid acc address") + } + + found := false + for _, addr := range types.AuthorityCandidates() { + if authority == addr.String() { + found = true + break + } + } + + if !found { + panic("x/fswap authority must be ether gov or foundation module account") + } + return Keeper{ cdc, storeKey, config, + authority, bk, } } @@ -82,6 +100,63 @@ func (k Keeper) Swap(ctx sdk.Context, addr sdk.AccAddress, fromCoinAmount sdk.Co return nil } +func (k Keeper) SetSwap(ctx sdk.Context, swap types.Swap, toDenomMetadata bank.Metadata) error { + isNewSwap := true + if _, err := k.getSwap(ctx, swap.FromDenom, swap.ToDenom); err == nil { + isNewSwap = false + } + + if !isNewSwap && !k.config.UpdateAllowed { + return sdkerrors.ErrInvalidRequest.Wrap("update existing swap not allowed") + } + + if isNewSwap { + if err := k.increaseSwapCount(ctx); err != nil { + return err + } + } + + stats, err := k.getSwapStats(ctx) + if err != nil { + return err + } + + if int(stats.SwapCount) > k.config.MaxSwaps && !k.isUnlimited() { + return types.ErrCanNotHaveMoreSwap.Wrapf("cannot make more swaps, max swaps is %d", k.config.MaxSwaps) + } + + if isNewSwap { + swapped := types.Swapped{ + FromCoinAmount: sdk.Coin{ + Denom: swap.GetFromDenom(), + Amount: sdk.ZeroInt(), + }, + ToCoinAmount: sdk.Coin{ + Denom: swap.GetToDenom(), + Amount: sdk.ZeroInt(), + }, + } + if err := k.setSwapped(ctx, swapped); err != nil { + return err + } + } + + if err := k.setSwap(ctx, swap); err != nil { + return err + } + + existingMetadata, ok := k.GetDenomMetaData(ctx, swap.ToDenom) + if !ok { + k.SetDenomMetaData(ctx, toDenomMetadata) + return nil + } + if !denomMetadataEqual(existingMetadata, toDenomMetadata) { + return sdkerrors.ErrInvalidRequest.Wrap("changing existing metadata not allowed") + } + + return nil +} + func (k Keeper) getAllSwapped(ctx sdk.Context) []types.Swapped { swappedSlice := []types.Swapped{} k.iterateAllSwapped(ctx, func(swapped types.Swapped) bool { @@ -201,3 +276,108 @@ func (k Keeper) setSwapStats(ctx sdk.Context, stats types.SwapStats) error { store.Set(swapStatsKey, bz) return nil } + +func (k Keeper) validateAuthority(authority string) error { + if authority != k.authority { + return sdkerrors.ErrUnauthorized.Wrapf("invalid authority; expected %s, got %s", k.authority, authority) + } + + return nil +} + +func denomMetadataEqual(metadata, otherMetadata bank.Metadata) bool { + if metadata.Description != otherMetadata.Description { + return false + } + if len(metadata.DenomUnits) != len(otherMetadata.DenomUnits) { + return false + } + for i, unit := range metadata.DenomUnits { + if unit.Denom != otherMetadata.DenomUnits[i].Denom { + return false + } + } + if metadata.Base != otherMetadata.Base { + return false + } + if metadata.Display != otherMetadata.Display { + return false + } + if metadata.Name != otherMetadata.Name { + return false + } + if metadata.Symbol != otherMetadata.Symbol { + return false + } + return true +} + +func (k Keeper) increaseSwapCount(ctx sdk.Context) error { + stats, err := k.getSwapStats(ctx) + if err != nil { + return err + } + + prev := stats.SwapCount + stats.SwapCount += 1 + if stats.SwapCount < prev { + return types.ErrInvalidState.Wrap("overflow detected") + } + + if err := k.setSwapStats(ctx, stats); err != nil { + return err + } + return nil +} + +func (k Keeper) setSwap(ctx sdk.Context, swap types.Swap) error { + key := swapKey(swap.FromDenom, swap.ToDenom) + bz, err := k.cdc.Marshal(&swap) + if err != nil { + return err + } + + store := ctx.KVStore(k.storeKey) + store.Set(key, bz) + return nil +} + +func (k Keeper) getSwap(ctx sdk.Context, fromDenom, toDenom string) (types.Swap, error) { + store := ctx.KVStore(k.storeKey) + key := swapKey(fromDenom, toDenom) + bz := store.Get(key) + if bz == nil { + return types.Swap{}, sdkerrors.ErrNotFound.Wrap("swap not found") + } + + swap := types.Swap{} + if err := k.cdc.Unmarshal(bz, &swap); err != nil { + return types.Swap{}, err + } + + return swap, nil +} + +func (k Keeper) getAllSwaps(ctx sdk.Context) []types.Swap { + swaps := []types.Swap{} + k.iterateAllSwaps(ctx, func(swap types.Swap) bool { + swaps = append(swaps, swap) + return false + }) + return swaps +} + +func (k Keeper) iterateAllSwaps(ctx sdk.Context, cb func(swapped types.Swap) (stop bool)) { + store := ctx.KVStore(k.storeKey) + swapDataStore := prefix.NewStore(store, swapPrefix) + + iterator := swapDataStore.Iterator(nil, nil) + defer iterator.Close() + for ; iterator.Valid(); iterator.Next() { + swap := types.Swap{} + k.cdc.MustUnmarshal(iterator.Value(), &swap) + if cb(swap) { + break + } + } +} diff --git a/x/fswap/keeper/keeper_test.go b/x/fswap/keeper/keeper_test.go index fdf9e95d25..63774bef84 100644 --- a/x/fswap/keeper/keeper_test.go +++ b/x/fswap/keeper/keeper_test.go @@ -172,7 +172,7 @@ func (s *KeeperTestSuite) TestSwap() { for name, tc := range testCases { s.Run(name, func() { ctx, _ := s.ctx.CacheContext() - err := s.keeper.MakeSwap(ctx, s.swap, s.toDenomMetadata) + err := s.keeper.SetSwap(ctx, s.swap, s.toDenomMetadata) s.Require().NoError(err) err = s.keeper.Swap(ctx, tc.from, tc.amountToSwap, tc.toDenom) @@ -187,3 +187,133 @@ func (s *KeeperTestSuite) TestSwap() { }) } } + +func (s *KeeperTestSuite) TestSetSwap() { + testCases := map[string]struct { + swap types.Swap + toDenomMeta bank.Metadata + existingMetadata bool + expectedError error + }{ + "valid": { + types.Swap{ + FromDenom: "fromD", + ToDenom: "toD", + AmountCapForToDenom: sdk.OneInt(), + SwapRate: sdk.OneDec(), + }, + s.toDenomMetadata, + false, + nil, + }, + "to-denom metadata change not allowed": { + types.Swap{ + FromDenom: "fromD", + ToDenom: "toD", + AmountCapForToDenom: sdk.OneInt(), + SwapRate: sdk.OneDec(), + }, + bank.Metadata{ + Description: s.toDenomMetadata.Description, + DenomUnits: s.toDenomMetadata.DenomUnits, + Base: "change", + Display: s.toDenomMetadata.Display, + Name: s.toDenomMetadata.Name, + Symbol: s.toDenomMetadata.Symbol, + }, + true, + sdkerrors.ErrInvalidRequest, + }, + } + for name, tc := range testCases { + s.Run(name, func() { + ctx, _ := s.ctx.CacheContext() + err := s.keeper.SetSwap(ctx, tc.swap, s.toDenomMetadata) + if tc.existingMetadata { + err := s.keeper.SetSwap(ctx, tc.swap, s.toDenomMetadata) + s.Require().ErrorIs(err, tc.expectedError) + } else { + s.Require().ErrorIs(err, tc.expectedError) + } + }) + } +} + +func (s *KeeperTestSuite) TestSwapValidateBasic() { + testCases := map[string]struct { + swap types.Swap + shouldThrowError bool + expectedError error + }{ + "valid": { + types.Swap{ + FromDenom: "fromD", + ToDenom: "toD", + AmountCapForToDenom: sdk.OneInt(), + SwapRate: sdk.OneDec(), + }, + false, + nil, + }, + "invalid empty from-denom": { + types.Swap{ + FromDenom: "", + ToDenom: "toD", + AmountCapForToDenom: sdk.OneInt(), + SwapRate: sdk.OneDec(), + }, + true, + sdkerrors.ErrInvalidRequest, + }, + "invalid empty to-denom": { + types.Swap{ + FromDenom: "fromD", + ToDenom: "", + AmountCapForToDenom: sdk.OneInt(), + SwapRate: sdk.OneDec(), + }, + true, + sdkerrors.ErrInvalidRequest, + }, + "invalid zero amount cap for to-denom": { + types.Swap{ + FromDenom: "fromD", + ToDenom: "toD", + AmountCapForToDenom: sdk.ZeroInt(), + SwapRate: sdk.OneDec(), + }, + true, + sdkerrors.ErrInvalidRequest, + }, + "invalid zero swap-rate": { + types.Swap{ + FromDenom: "fromD", + ToDenom: "toD", + AmountCapForToDenom: sdk.OneInt(), + SwapRate: sdk.ZeroDec(), + }, + true, + sdkerrors.ErrInvalidRequest, + }, + "invalid the same from-denom and to-denom": { + types.Swap{ + FromDenom: "same", + ToDenom: "same", + AmountCapForToDenom: sdk.OneInt(), + SwapRate: sdk.OneDec(), + }, + true, + sdkerrors.ErrInvalidRequest, + }, + } + for name, tc := range testCases { + s.Run(name, func() { + err := tc.swap.ValidateBasic() + if tc.shouldThrowError { + s.Require().ErrorIs(err, tc.expectedError) + return + } + s.Require().NoError(err) + }) + } +} diff --git a/x/fswap/keeper/msg_server.go b/x/fswap/keeper/msg_server.go index 1f3086fc4f..9f948f1ebf 100644 --- a/x/fswap/keeper/msg_server.go +++ b/x/fswap/keeper/msg_server.go @@ -60,3 +60,17 @@ func (s MsgServer) SwapAll(ctx context.Context, req *types.MsgSwapAll) (*types.M return &types.MsgSwapAllResponse{}, nil } + +func (s MsgServer) SetSwap(ctx context.Context, req *types.MsgSetSwap) (*types.MsgSetSwapResponse, error) { + c := sdk.UnwrapSDKContext(ctx) + + if err := s.keeper.validateAuthority(req.Authority); err != nil { + return nil, err + } + + if err := s.keeper.SetSwap(c, req.GetSwap(), req.GetToDenomMetadata()); err != nil { + return nil, err + } + + return &types.MsgSetSwapResponse{}, nil +} diff --git a/x/fswap/keeper/msg_server_test.go b/x/fswap/keeper/msg_server_test.go index 6e7953ac64..ab8be87e04 100644 --- a/x/fswap/keeper/msg_server_test.go +++ b/x/fswap/keeper/msg_server_test.go @@ -63,7 +63,7 @@ func (s *KeeperTestSuite) TestMsgSwap() { for name, tc := range testCases { s.Run(name, func() { ctx, _ := s.ctx.CacheContext() - err := s.keeper.MakeSwap(ctx, s.swap, s.toDenomMetadata) + err := s.keeper.SetSwap(ctx, s.swap, s.toDenomMetadata) s.Require().NoError(err) swapResponse, err := s.msgServer.Swap(sdk.WrapSDKContext(ctx), tc.request) @@ -115,7 +115,7 @@ func (s *KeeperTestSuite) TestMsgSwapAll() { for name, tc := range testCases { s.Run(name, func() { ctx, _ := s.ctx.CacheContext() - err := s.keeper.MakeSwap(ctx, s.swap, s.toDenomMetadata) + err := s.keeper.SetSwap(ctx, s.swap, s.toDenomMetadata) s.Require().NoError(err) swapResponse, err := s.msgServer.SwapAll(sdk.WrapSDKContext(ctx), tc.request) diff --git a/x/fswap/keeper/proposal.go b/x/fswap/keeper/proposal.go deleted file mode 100644 index 1893c9f33a..0000000000 --- a/x/fswap/keeper/proposal.go +++ /dev/null @@ -1,169 +0,0 @@ -package keeper - -import ( - "github.com/Finschia/finschia-sdk/store/prefix" - sdk "github.com/Finschia/finschia-sdk/types" - "github.com/Finschia/finschia-sdk/types/errors" - bank "github.com/Finschia/finschia-sdk/x/bank/types" - "github.com/Finschia/finschia-sdk/x/fswap/types" -) - -func (k Keeper) MakeSwap(ctx sdk.Context, swap types.Swap, toDenomMetadata bank.Metadata) error { - isNewSwap := true - if _, err := k.getSwap(ctx, swap.FromDenom, swap.ToDenom); err == nil { - isNewSwap = false - } - - if !isNewSwap && !k.config.UpdateAllowed { - return errors.ErrInvalidRequest.Wrap("update existing swap not allowed") - } - - if isNewSwap { - if err := k.increaseSwapCount(ctx); err != nil { - return err - } - } - - stats, err := k.getSwapStats(ctx) - if err != nil { - return err - } - - if int(stats.SwapCount) > k.config.MaxSwaps && !k.isUnlimited() { - return types.ErrCanNotHaveMoreSwap.Wrapf("cannot make more swaps, max swaps is %d", k.config.MaxSwaps) - } - - if isNewSwap { - swapped := types.Swapped{ - FromCoinAmount: sdk.Coin{ - Denom: swap.GetFromDenom(), - Amount: sdk.ZeroInt(), - }, - ToCoinAmount: sdk.Coin{ - Denom: swap.GetToDenom(), - Amount: sdk.ZeroInt(), - }, - } - if err := k.setSwapped(ctx, swapped); err != nil { - return err - } - } - - eventManager := ctx.EventManager() - if err := k.setSwap(ctx, swap); err != nil { - return err - } - if err := eventManager.EmitTypedEvent(&types.EventMakeSwap{Swap: swap}); err != nil { - panic(err) - } - - existingMetadata, ok := k.GetDenomMetaData(ctx, swap.ToDenom) - if !ok { - k.SetDenomMetaData(ctx, toDenomMetadata) - if err := eventManager.EmitTypedEvent(&(types.EventAddDenomMetadata{Metadata: toDenomMetadata})); err != nil { - panic(err) - } - return nil - } - if !denomMetadataEqual(existingMetadata, toDenomMetadata) { - return errors.ErrInvalidRequest.Wrap("changing existing metadata not allowed") - } - return nil -} - -func denomMetadataEqual(metadata, otherMetadata bank.Metadata) bool { - if metadata.Description != otherMetadata.Description { - return false - } - if len(metadata.DenomUnits) != len(otherMetadata.DenomUnits) { - return false - } - for i, unit := range metadata.DenomUnits { - if unit.Denom != otherMetadata.DenomUnits[i].Denom { - return false - } - } - if metadata.Base != otherMetadata.Base { - return false - } - if metadata.Display != otherMetadata.Display { - return false - } - if metadata.Name != otherMetadata.Name { - return false - } - if metadata.Symbol != otherMetadata.Symbol { - return false - } - return true -} - -func (k Keeper) increaseSwapCount(ctx sdk.Context) error { - stats, err := k.getSwapStats(ctx) - if err != nil { - return err - } - - prev := stats.SwapCount - stats.SwapCount++ - if stats.SwapCount < prev { - return types.ErrInvalidState.Wrap("overflow detected") - } - - if err := k.setSwapStats(ctx, stats); err != nil { - return err - } - return nil -} - -func (k Keeper) setSwap(ctx sdk.Context, swap types.Swap) error { - key := swapKey(swap.FromDenom, swap.ToDenom) - bz, err := k.cdc.Marshal(&swap) - if err != nil { - return err - } - - store := ctx.KVStore(k.storeKey) - store.Set(key, bz) - return nil -} - -func (k Keeper) getSwap(ctx sdk.Context, fromDenom, toDenom string) (types.Swap, error) { - store := ctx.KVStore(k.storeKey) - key := swapKey(fromDenom, toDenom) - bz := store.Get(key) - if bz == nil { - return types.Swap{}, errors.ErrNotFound.Wrap("swap not found") - } - - swap := types.Swap{} - if err := k.cdc.Unmarshal(bz, &swap); err != nil { - return types.Swap{}, err - } - - return swap, nil -} - -func (k Keeper) getAllSwaps(ctx sdk.Context) []types.Swap { - swaps := []types.Swap{} - k.iterateAllSwaps(ctx, func(swap types.Swap) bool { - swaps = append(swaps, swap) - return false - }) - return swaps -} - -func (k Keeper) iterateAllSwaps(ctx sdk.Context, cb func(swapped types.Swap) (stop bool)) { - store := ctx.KVStore(k.storeKey) - swapDataStore := prefix.NewStore(store, swapPrefix) - - iterator := swapDataStore.Iterator(nil, nil) - defer iterator.Close() - for ; iterator.Valid(); iterator.Next() { - swap := types.Swap{} - k.cdc.MustUnmarshal(iterator.Value(), &swap) - if cb(swap) { - break - } - } -} diff --git a/x/fswap/keeper/proposal_test.go b/x/fswap/keeper/proposal_test.go deleted file mode 100644 index 65be82d923..0000000000 --- a/x/fswap/keeper/proposal_test.go +++ /dev/null @@ -1,167 +0,0 @@ -package keeper_test - -import ( - abci "github.com/tendermint/tendermint/abci/types" - - sdk "github.com/Finschia/finschia-sdk/types" - sdkerrors "github.com/Finschia/finschia-sdk/types/errors" - bank "github.com/Finschia/finschia-sdk/x/bank/types" - "github.com/Finschia/finschia-sdk/x/fswap/types" -) - -func (s *KeeperTestSuite) TestMakeSwapProposal() { - testCases := map[string]struct { - swap types.Swap - toDenomMeta bank.Metadata - existingMetadata bool - expectedError error - expectedEvents sdk.Events - }{ - "valid": { - types.Swap{ - FromDenom: "fromD", - ToDenom: "toD", - AmountCapForToDenom: sdk.OneInt(), - SwapRate: sdk.OneDec(), - }, - s.toDenomMetadata, - false, - nil, - sdk.Events{ - sdk.Event{ - Type: "lbm.fswap.v1.EventMakeSwap", - Attributes: []abci.EventAttribute{ - { - Key: []byte("swap"), - Value: []uint8{0x7b, 0x22, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x3a, 0x22, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x22, 0x2c, 0x22, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x3a, 0x22, 0x74, 0x6f, 0x44, 0x22, 0x2c, 0x22, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x3a, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x22, 0x3a, 0x22, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x7d}, - Index: false, - }, - }, - }, - sdk.Event{ - Type: "lbm.fswap.v1.EventAddDenomMetadata", - Attributes: []abci.EventAttribute{ - { - Key: []byte("metadata"), - Value: []uint8{0x7b, 0x22, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x2d, 0x63, 0x6f, 0x69, 0x6e, 0x22, 0x2c, 0x22, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x3a, 0x22, 0x74, 0x6f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x2c, 0x22, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, 0x5d, 0x2c, 0x22, 0x62, 0x61, 0x73, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x22, 0x2c, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x22, 0x3a, 0x22, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x63, 0x6f, 0x69, 0x6e, 0x22, 0x2c, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x22, 0x44, 0x55, 0x4d, 0x4d, 0x59, 0x22, 0x2c, 0x22, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x3a, 0x22, 0x44, 0x55, 0x4d, 0x22, 0x7d}, - Index: false, - }, - }, - }, - }, - }, - "to-denom metadata change not allowed": { - types.Swap{ - FromDenom: "fromD", - ToDenom: "toD", - AmountCapForToDenom: sdk.OneInt(), - SwapRate: sdk.OneDec(), - }, - bank.Metadata{ - Description: s.toDenomMetadata.Description, - DenomUnits: s.toDenomMetadata.DenomUnits, - Base: "change", - Display: s.toDenomMetadata.Display, - Name: s.toDenomMetadata.Name, - Symbol: s.toDenomMetadata.Symbol, - }, - true, - sdkerrors.ErrInvalidRequest, - sdk.Events{}, - }, - } - for name, tc := range testCases { - s.Run(name, func() { - ctx, _ := s.ctx.CacheContext() - err := s.keeper.MakeSwap(ctx, tc.swap, s.toDenomMetadata) - if tc.existingMetadata { - err := s.keeper.MakeSwap(ctx, tc.swap, s.toDenomMetadata) - s.Require().ErrorIs(err, tc.expectedError) - return - } - - s.Require().ErrorIs(err, tc.expectedError) - events := ctx.EventManager().Events() - s.Require().Equal(tc.expectedEvents, events) - }) - } -} - -func (s *KeeperTestSuite) TestSwapValidateBasic() { - testCases := map[string]struct { - swap types.Swap - shouldThrowError bool - expectedError error - }{ - "valid": { - types.Swap{ - FromDenom: "fromD", - ToDenom: "toD", - AmountCapForToDenom: sdk.OneInt(), - SwapRate: sdk.OneDec(), - }, - false, - nil, - }, - "invalid empty from-denom": { - types.Swap{ - FromDenom: "", - ToDenom: "toD", - AmountCapForToDenom: sdk.OneInt(), - SwapRate: sdk.OneDec(), - }, - true, - sdkerrors.ErrInvalidRequest, - }, - "invalid empty to-denom": { - types.Swap{ - FromDenom: "fromD", - ToDenom: "", - AmountCapForToDenom: sdk.OneInt(), - SwapRate: sdk.OneDec(), - }, - true, - sdkerrors.ErrInvalidRequest, - }, - "invalid zero amount cap for to-denom": { - types.Swap{ - FromDenom: "fromD", - ToDenom: "toD", - AmountCapForToDenom: sdk.ZeroInt(), - SwapRate: sdk.OneDec(), - }, - true, - sdkerrors.ErrInvalidRequest, - }, - "invalid zero swap-rate": { - types.Swap{ - FromDenom: "fromD", - ToDenom: "toD", - AmountCapForToDenom: sdk.OneInt(), - SwapRate: sdk.ZeroDec(), - }, - true, - sdkerrors.ErrInvalidRequest, - }, - "invalid the same from-denom and to-denom": { - types.Swap{ - FromDenom: "same", - ToDenom: "same", - AmountCapForToDenom: sdk.OneInt(), - SwapRate: sdk.OneDec(), - }, - true, - sdkerrors.ErrInvalidRequest, - }, - } - for name, tc := range testCases { - s.Run(name, func() { - err := tc.swap.ValidateBasic() - if tc.shouldThrowError { - s.Require().ErrorIs(err, tc.expectedError) - return - } - s.Require().NoError(err) - }) - } -} diff --git a/x/fswap/proposal_handler_test.go b/x/fswap/proposal_handler_test.go deleted file mode 100644 index c55bd5a2e4..0000000000 --- a/x/fswap/proposal_handler_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package fswap_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - - "github.com/Finschia/finschia-sdk/simapp" - sdk "github.com/Finschia/finschia-sdk/types" - bank "github.com/Finschia/finschia-sdk/x/bank/types" - "github.com/Finschia/finschia-sdk/x/fswap" - "github.com/Finschia/finschia-sdk/x/fswap/types" -) - -func testProposal(swap types.Swap) *types.MakeSwapProposal { - return types.NewMakeSwapProposal("Test", "description", swap, bank.Metadata{Base: "DUM"}) -} - -func TestProposalHandlerPassed(t *testing.T) { - app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - - forConyRate, err := sdk.NewDecFromStr("148079656000000") - require.NoError(t, err) - swap := types.Swap{ - FromDenom: "aaa", - ToDenom: "bbb", - AmountCapForToDenom: sdk.NewInt(100), - SwapRate: forConyRate, - } - tp := testProposal(swap) - hdlr := fswap.NewSwapHandler(app.FswapKeeper) - require.NoError(t, hdlr(ctx, tp)) - - // todo check contents -} - -// todo check failed -// func TestProposalHandlerFailed(t *testing.T) {} diff --git a/x/fswap/types/codec.go b/x/fswap/types/codec.go index de8865ec57..77c591743d 100644 --- a/x/fswap/types/codec.go +++ b/x/fswap/types/codec.go @@ -4,36 +4,39 @@ import ( "github.com/Finschia/finschia-sdk/codec" "github.com/Finschia/finschia-sdk/codec/legacy" "github.com/Finschia/finschia-sdk/codec/types" + cryptocodec "github.com/Finschia/finschia-sdk/crypto/codec" sdk "github.com/Finschia/finschia-sdk/types" "github.com/Finschia/finschia-sdk/types/msgservice" - fscodec "github.com/Finschia/finschia-sdk/x/fswap/codec" - govcodec "github.com/Finschia/finschia-sdk/x/gov/codec" - govtypes "github.com/Finschia/finschia-sdk/x/gov/types" + fdncodec "github.com/Finschia/finschia-sdk/x/foundation/codec" ) +var ( + Amino = codec.NewLegacyAmino() + ModuleCdc = codec.NewAminoCodec(Amino) +) + +func init() { + cryptocodec.RegisterCrypto(Amino) + codec.RegisterEvidences(Amino) + sdk.RegisterLegacyAminoCodec(Amino) + + RegisterLegacyAminoCodec(Amino) + RegisterLegacyAminoCodec(fdncodec.Amino) +} + // RegisterLegacyAminoCodec registers concrete types on the LegacyAmino codec func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { legacy.RegisterAminoMsg(cdc, &MsgSwap{}, "lbm-sdk/MsgSwap") legacy.RegisterAminoMsg(cdc, &MsgSwapAll{}, "lbm-sdk/MsgSwapAll") - - cdc.RegisterConcrete(&MakeSwapProposal{}, "lbm-sdk/MakeSwapProposal", nil) + legacy.RegisterAminoMsg(cdc, &MsgSetSwap{}, "lbm-sdk/MsgSetSwap") } func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSwap{}, &MsgSwapAll{}, + &MsgSetSwap{}, ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) - - registry.RegisterImplementations( - (*govtypes.Content)(nil), - &MakeSwapProposal{}, - ) -} - -func init() { - RegisterLegacyAminoCodec(govcodec.Amino) - RegisterLegacyAminoCodec(fscodec.Amino) } diff --git a/x/fswap/types/fswap.go b/x/fswap/types/fswap.go index f45d2b2d89..85d73dc0c7 100644 --- a/x/fswap/types/fswap.go +++ b/x/fswap/types/fswap.go @@ -1,8 +1,6 @@ package types import ( - "gopkg.in/yaml.v2" - sdk "github.com/Finschia/finschia-sdk/types" sdkerrors "github.com/Finschia/finschia-sdk/types/errors" ) @@ -32,11 +30,7 @@ func (s *Swap) ValidateBasic() error { return nil } -func (s *Swap) String() string { - out, _ := yaml.Marshal(s) - return string(out) -} - +// ValidateBasic validates the set of SwapStats func (s *SwapStats) ValidateBasic() error { if s.SwapCount < 0 { return ErrInvalidState.Wrap("swap count cannot be negative") @@ -44,11 +38,6 @@ func (s *SwapStats) ValidateBasic() error { return nil } -func (s *SwapStats) String() string { - out, _ := yaml.Marshal(s) - return string(out) -} - // ValidateBasic validates the set of Swapped func (s *Swapped) ValidateBasic() error { if err := validateCoinAmount(s.FromCoinAmount); err != nil { @@ -73,9 +62,3 @@ func validateCoinAmount(i interface{}) error { } return nil } - -// String implements the Stringer interface. -func (s *Swapped) String() string { - out, _ := yaml.Marshal(s) - return string(out) -} diff --git a/x/fswap/types/fswap.pb.go b/x/fswap/types/fswap.pb.go index 4449b20bec..55bca47046 100644 --- a/x/fswap/types/fswap.pb.go +++ b/x/fswap/types/fswap.pb.go @@ -6,8 +6,7 @@ package types import ( fmt "fmt" github_com_Finschia_finschia_sdk_types "github.com/Finschia/finschia-sdk/types" - types1 "github.com/Finschia/finschia-sdk/types" - types "github.com/Finschia/finschia-sdk/x/bank/types" + types "github.com/Finschia/finschia-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" io "io" @@ -33,8 +32,9 @@ type Swap struct { SwapRate github_com_Finschia_finschia_sdk_types.Dec `protobuf:"bytes,4,opt,name=swap_rate,json=swapRate,proto3,customtype=github.com/Finschia/finschia-sdk/types.Dec" json:"swap_rate"` } -func (m *Swap) Reset() { *m = Swap{} } -func (*Swap) ProtoMessage() {} +func (m *Swap) Reset() { *m = Swap{} } +func (m *Swap) String() string { return proto.CompactTextString(m) } +func (*Swap) ProtoMessage() {} func (*Swap) Descriptor() ([]byte, []int) { return fileDescriptor_42ca60eaf37a2b67, []int{0} } @@ -83,8 +83,9 @@ type SwapStats struct { SwapCount int32 `protobuf:"varint,1,opt,name=swap_count,json=swapCount,proto3" json:"swap_count,omitempty"` } -func (m *SwapStats) Reset() { *m = SwapStats{} } -func (*SwapStats) ProtoMessage() {} +func (m *SwapStats) Reset() { *m = SwapStats{} } +func (m *SwapStats) String() string { return proto.CompactTextString(m) } +func (*SwapStats) ProtoMessage() {} func (*SwapStats) Descriptor() ([]byte, []int) { return fileDescriptor_42ca60eaf37a2b67, []int{1} } @@ -122,83 +123,16 @@ func (m *SwapStats) GetSwapCount() int32 { return 0 } -// From cosmos-sdk 0.46.0 they deprecated this way, but currently finschia-sdk based on 0.45.10 -type MakeSwapProposal struct { - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Swap Swap `protobuf:"bytes,3,opt,name=swap,proto3" json:"swap"` - ToDenomMetadata types.Metadata `protobuf:"bytes,4,opt,name=to_denom_metadata,json=toDenomMetadata,proto3" json:"to_denom_metadata" yaml:"denom_metadata"` -} - -func (m *MakeSwapProposal) Reset() { *m = MakeSwapProposal{} } -func (*MakeSwapProposal) ProtoMessage() {} -func (*MakeSwapProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_42ca60eaf37a2b67, []int{2} -} -func (m *MakeSwapProposal) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MakeSwapProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MakeSwapProposal.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 *MakeSwapProposal) XXX_Merge(src proto.Message) { - xxx_messageInfo_MakeSwapProposal.Merge(m, src) -} -func (m *MakeSwapProposal) XXX_Size() int { - return m.Size() -} -func (m *MakeSwapProposal) XXX_DiscardUnknown() { - xxx_messageInfo_MakeSwapProposal.DiscardUnknown(m) -} - -var xxx_messageInfo_MakeSwapProposal proto.InternalMessageInfo - -func (m *MakeSwapProposal) GetTitle() string { - if m != nil { - return m.Title - } - return "" -} - -func (m *MakeSwapProposal) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *MakeSwapProposal) GetSwap() Swap { - if m != nil { - return m.Swap - } - return Swap{} -} - -func (m *MakeSwapProposal) GetToDenomMetadata() types.Metadata { - if m != nil { - return m.ToDenomMetadata - } - return types.Metadata{} -} - type Swapped struct { - FromCoinAmount types1.Coin `protobuf:"bytes,1,opt,name=from_coin_amount,json=fromCoinAmount,proto3,castrepeated=github.com/Finschia/finschia-sdk/types.Coin" json:"from_coin_amount"` - ToCoinAmount types1.Coin `protobuf:"bytes,2,opt,name=to_coin_amount,json=toCoinAmount,proto3,castrepeated=github.com/Finschia/finschia-sdk/types.Coin" json:"to_coin_amount"` + FromCoinAmount types.Coin `protobuf:"bytes,1,opt,name=from_coin_amount,json=fromCoinAmount,proto3,castrepeated=github.com/Finschia/finschia-sdk/types.Coin" json:"from_coin_amount"` + ToCoinAmount types.Coin `protobuf:"bytes,2,opt,name=to_coin_amount,json=toCoinAmount,proto3,castrepeated=github.com/Finschia/finschia-sdk/types.Coin" json:"to_coin_amount"` } -func (m *Swapped) Reset() { *m = Swapped{} } -func (*Swapped) ProtoMessage() {} +func (m *Swapped) Reset() { *m = Swapped{} } +func (m *Swapped) String() string { return proto.CompactTextString(m) } +func (*Swapped) ProtoMessage() {} func (*Swapped) Descriptor() ([]byte, []int) { - return fileDescriptor_42ca60eaf37a2b67, []int{3} + return fileDescriptor_42ca60eaf37a2b67, []int{2} } func (m *Swapped) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -227,124 +161,57 @@ func (m *Swapped) XXX_DiscardUnknown() { var xxx_messageInfo_Swapped proto.InternalMessageInfo -func (m *Swapped) GetFromCoinAmount() types1.Coin { +func (m *Swapped) GetFromCoinAmount() types.Coin { if m != nil { return m.FromCoinAmount } - return types1.Coin{} + return types.Coin{} } -func (m *Swapped) GetToCoinAmount() types1.Coin { +func (m *Swapped) GetToCoinAmount() types.Coin { if m != nil { return m.ToCoinAmount } - return types1.Coin{} + return types.Coin{} } func init() { proto.RegisterType((*Swap)(nil), "lbm.fswap.v1.Swap") proto.RegisterType((*SwapStats)(nil), "lbm.fswap.v1.SwapStats") - proto.RegisterType((*MakeSwapProposal)(nil), "lbm.fswap.v1.MakeSwapProposal") proto.RegisterType((*Swapped)(nil), "lbm.fswap.v1.Swapped") } func init() { proto.RegisterFile("lbm/fswap/v1/fswap.proto", fileDescriptor_42ca60eaf37a2b67) } var fileDescriptor_42ca60eaf37a2b67 = []byte{ - // 539 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x93, 0xbf, 0x6f, 0xd3, 0x40, - 0x14, 0xc7, 0xe3, 0x92, 0xd2, 0xe4, 0x52, 0x95, 0x62, 0x8a, 0x48, 0x2b, 0xc5, 0xae, 0x32, 0x21, - 0x7e, 0xd8, 0x4a, 0xca, 0x94, 0x8d, 0xa4, 0xaa, 0x60, 0xa8, 0x40, 0x2e, 0x13, 0x8b, 0x75, 0x76, - 0x2e, 0x89, 0x15, 0xdb, 0xcf, 0xf2, 0xbd, 0xa6, 0xed, 0x1f, 0xc0, 0xce, 0xc8, 0xd8, 0x99, 0xbf, - 0xa4, 0x63, 0x47, 0xc4, 0x10, 0x50, 0xb2, 0x74, 0xe6, 0x1f, 0x00, 0xbd, 0x3b, 0x37, 0x4d, 0xc5, - 0x00, 0x42, 0x62, 0x7b, 0xf7, 0xde, 0xbb, 0xf7, 0xb9, 0xfb, 0x7e, 0xef, 0x58, 0x3d, 0x0e, 0x12, - 0x77, 0x20, 0x4f, 0x78, 0xe6, 0x4e, 0x5a, 0x3a, 0x70, 0xb2, 0x1c, 0x10, 0xcc, 0xf5, 0x38, 0x48, - 0x1c, 0x9d, 0x98, 0xb4, 0x76, 0xb6, 0x86, 0x30, 0x04, 0x55, 0x70, 0x29, 0xd2, 0x3d, 0x3b, 0x56, - 0x08, 0x32, 0x01, 0xe9, 0x06, 0x5c, 0x0a, 0x77, 0xd2, 0x0a, 0x04, 0xf2, 0x96, 0x1b, 0x42, 0x94, - 0xfe, 0x56, 0x4f, 0xc7, 0x8b, 0x3a, 0x2d, 0x74, 0xbd, 0xf9, 0x61, 0x85, 0x95, 0x8f, 0x4e, 0x78, - 0x66, 0x36, 0x18, 0x1b, 0xe4, 0x90, 0xf8, 0x7d, 0x91, 0x42, 0x52, 0x37, 0x76, 0x8d, 0xc7, 0x55, - 0xaf, 0x4a, 0x99, 0x7d, 0x4a, 0x98, 0xdb, 0xac, 0x82, 0x50, 0x14, 0x57, 0x54, 0x71, 0x0d, 0x41, - 0x97, 0x46, 0xec, 0x11, 0x4f, 0xe0, 0x38, 0x45, 0x3f, 0xe4, 0x99, 0x3f, 0x80, 0xdc, 0x5f, 0x74, - 0xde, 0xa1, 0xce, 0x6e, 0xfb, 0x62, 0x6a, 0x97, 0xbe, 0x4e, 0xed, 0x27, 0xc3, 0x08, 0x47, 0xc7, - 0x81, 0x13, 0x42, 0xe2, 0x1e, 0x44, 0xa9, 0x0c, 0x47, 0x11, 0x77, 0x07, 0x45, 0xf0, 0x5c, 0xf6, - 0xc7, 0x2e, 0x9e, 0x65, 0x42, 0x3a, 0xaf, 0x53, 0xf4, 0x1e, 0xe8, 0x91, 0x3d, 0x9e, 0x1d, 0x40, - 0xfe, 0xae, 0x20, 0xbd, 0x61, 0x55, 0x52, 0xc3, 0xcf, 0x39, 0x8a, 0x7a, 0xf9, 0x9f, 0x66, 0xef, - 0x8b, 0xd0, 0xab, 0xd0, 0x10, 0x8f, 0xa3, 0xe8, 0x54, 0x3e, 0x9d, 0xdb, 0xa5, 0xab, 0x73, 0xdb, - 0x68, 0xbe, 0x60, 0x55, 0x92, 0xe1, 0x08, 0x39, 0x4a, 0xd2, 0x42, 0x71, 0x42, 0x3a, 0x82, 0xd2, - 0x62, 0xd5, 0x53, 0xe4, 0x1e, 0x25, 0x96, 0x76, 0x5d, 0x19, 0x6c, 0xf3, 0x90, 0x8f, 0x05, 0x6d, - 0x7d, 0x9b, 0x43, 0x06, 0x92, 0xc7, 0xe6, 0x16, 0x5b, 0xc5, 0x08, 0x63, 0x51, 0x88, 0xa8, 0x17, - 0xe6, 0x2e, 0xab, 0xf5, 0x85, 0x0c, 0xf3, 0x28, 0xc3, 0x08, 0xd2, 0x42, 0xc3, 0xe5, 0x94, 0xf9, - 0x8c, 0x95, 0x89, 0xa1, 0x44, 0xab, 0xb5, 0x4d, 0x67, 0xd9, 0x7d, 0x87, 0x08, 0xdd, 0x32, 0x5d, - 0xd6, 0x53, 0x5d, 0xe6, 0x88, 0xdd, 0xbf, 0x96, 0xd9, 0x4f, 0x04, 0xf2, 0x3e, 0x47, 0xae, 0x34, - 0xa9, 0xb5, 0x1b, 0x8e, 0x36, 0xdd, 0x51, 0x3e, 0x17, 0xa6, 0x3b, 0x87, 0x45, 0x53, 0xb7, 0x41, - 0x53, 0x7e, 0x4c, 0xed, 0x87, 0x67, 0x3c, 0x89, 0x3b, 0xcd, 0xdb, 0x23, 0x9a, 0xde, 0xbd, 0xc2, - 0xd7, 0xeb, 0xfe, 0x4e, 0x99, 0xae, 0xdb, 0xfc, 0x69, 0xb0, 0x35, 0x3a, 0x44, 0x26, 0xfa, 0xe6, - 0x29, 0xdb, 0x54, 0x6f, 0x85, 0xde, 0x99, 0xaf, 0x8d, 0x52, 0x97, 0xad, 0xb5, 0xb7, 0x6f, 0xd0, - 0x52, 0x2c, 0xd0, 0x3d, 0x88, 0xd2, 0xee, 0x1e, 0x61, 0x3f, 0x7f, 0xb3, 0x9f, 0xfe, 0xa5, 0x53, - 0xb4, 0xc9, 0xdb, 0x20, 0x0e, 0x45, 0x2f, 0x15, 0xc5, 0x44, 0xb6, 0x81, 0x70, 0x8b, 0xbb, 0xf2, - 0x5f, 0xb8, 0xeb, 0x08, 0x37, 0x54, 0xad, 0x40, 0xf7, 0xd5, 0xc5, 0xcc, 0x32, 0x2e, 0x67, 0x96, - 0xf1, 0x7d, 0x66, 0x19, 0x1f, 0xe7, 0x56, 0xe9, 0x72, 0x6e, 0x95, 0xbe, 0xcc, 0xad, 0xd2, 0x7b, - 0xe7, 0x8f, 0xa3, 0x4f, 0x8b, 0x1f, 0xae, 0x10, 0xc1, 0x5d, 0xf5, 0xf7, 0xf6, 0x7e, 0x05, 0x00, - 0x00, 0xff, 0xff, 0x9d, 0x2f, 0x11, 0xda, 0xfb, 0x03, 0x00, 0x00, -} - -func (this *Swap) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Swap) - if !ok { - that2, ok := that.(Swap) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.FromDenom != that1.FromDenom { - return false - } - if this.ToDenom != that1.ToDenom { - return false - } - if !this.AmountCapForToDenom.Equal(that1.AmountCapForToDenom) { - return false - } - if !this.SwapRate.Equal(that1.SwapRate) { - return false - } - return true + // 397 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x92, 0xcf, 0xae, 0xd2, 0x40, + 0x14, 0xc6, 0x5b, 0x44, 0xa1, 0x23, 0x21, 0xa6, 0x9a, 0x08, 0x24, 0x16, 0xc3, 0xca, 0x60, 0x9c, + 0x49, 0xe1, 0x09, 0x04, 0x42, 0x74, 0x65, 0x52, 0x5c, 0xb9, 0x69, 0xa6, 0x65, 0x0a, 0x8d, 0xb4, + 0xa7, 0xe9, 0x0c, 0x7f, 0x7c, 0x0b, 0x9f, 0xc3, 0x27, 0x61, 0xc9, 0xd2, 0xb8, 0x40, 0x03, 0x4f, + 0x61, 0xdc, 0x98, 0x33, 0xd3, 0x68, 0x5c, 0x79, 0x73, 0x93, 0xbb, 0x3b, 0x39, 0xdf, 0x99, 0xef, + 0x77, 0xe6, 0xcb, 0x21, 0x9d, 0x4d, 0x94, 0xb1, 0x44, 0xee, 0x79, 0xc1, 0x76, 0xbe, 0x29, 0x68, + 0x51, 0x82, 0x02, 0xb7, 0xb5, 0x89, 0x32, 0x6a, 0x1a, 0x3b, 0xbf, 0xf7, 0x64, 0x05, 0x2b, 0xd0, + 0x02, 0xc3, 0xca, 0xcc, 0xf4, 0xbc, 0x18, 0x64, 0x06, 0x92, 0x45, 0x5c, 0x0a, 0xb6, 0xf3, 0x23, + 0xa1, 0xb8, 0xcf, 0x62, 0x48, 0x73, 0xa3, 0x0f, 0x7e, 0xd9, 0xa4, 0xbe, 0xd8, 0xf3, 0xc2, 0x7d, + 0x46, 0x48, 0x52, 0x42, 0x16, 0x2e, 0x45, 0x0e, 0x59, 0xc7, 0x7e, 0x6e, 0xbf, 0x70, 0x02, 0x07, + 0x3b, 0x33, 0x6c, 0xb8, 0x5d, 0xd2, 0x54, 0x50, 0x89, 0x35, 0x2d, 0x36, 0x14, 0x18, 0x69, 0x4d, + 0x9e, 0xf2, 0x0c, 0xb6, 0xb9, 0x0a, 0x63, 0x5e, 0x84, 0x09, 0x94, 0xe1, 0x9f, 0xc9, 0x7b, 0x38, + 0x39, 0x19, 0x1d, 0xcf, 0x7d, 0xeb, 0xdb, 0xb9, 0x3f, 0x5c, 0xa5, 0x6a, 0xbd, 0x8d, 0x68, 0x0c, + 0x19, 0x9b, 0xa7, 0xb9, 0x8c, 0xd7, 0x29, 0x67, 0x49, 0x55, 0xbc, 0x92, 0xcb, 0x8f, 0x4c, 0x7d, + 0x2a, 0x84, 0xa4, 0x6f, 0x73, 0x15, 0x3c, 0x36, 0x96, 0x53, 0x5e, 0xcc, 0xa1, 0x7c, 0x5f, 0x91, + 0xde, 0x11, 0x07, 0x7f, 0x1b, 0x96, 0x5c, 0x89, 0x4e, 0xfd, 0x56, 0xde, 0x33, 0x11, 0x07, 0x4d, + 0x34, 0x09, 0xb8, 0x12, 0x83, 0x21, 0x71, 0xf0, 0xf3, 0x0b, 0xc5, 0x95, 0xc4, 0x04, 0xb4, 0x7b, + 0x8c, 0x60, 0x9d, 0xc0, 0xfd, 0x40, 0xf3, 0xa6, 0xd8, 0x18, 0xfc, 0xb4, 0x49, 0x03, 0x87, 0x0b, + 0xb1, 0x74, 0x0f, 0xe4, 0x91, 0x0e, 0x0b, 0x83, 0x0c, 0xcd, 0xa6, 0xfa, 0xc1, 0xc3, 0x51, 0x97, + 0x9a, 0xc0, 0x29, 0x06, 0x4e, 0xab, 0xc0, 0xe9, 0x14, 0xd2, 0x7c, 0x32, 0xc6, 0x55, 0xbf, 0x7c, + 0xef, 0xbf, 0xbc, 0xe1, 0xaa, 0xf8, 0x28, 0x68, 0x23, 0x07, 0xab, 0xd7, 0x9a, 0xe2, 0x2a, 0xd2, + 0x56, 0xf0, 0x0f, 0xb7, 0x76, 0x27, 0xdc, 0x96, 0x82, 0xbf, 0xd4, 0xc9, 0x9b, 0xe3, 0xc5, 0xb3, + 0x4f, 0x17, 0xcf, 0xfe, 0x71, 0xf1, 0xec, 0xcf, 0x57, 0xcf, 0x3a, 0x5d, 0x3d, 0xeb, 0xeb, 0xd5, + 0xb3, 0x3e, 0xd0, 0xff, 0x9a, 0x1e, 0xaa, 0xe3, 0xd5, 0xe6, 0xd1, 0x03, 0x7d, 0x76, 0xe3, 0xdf, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x53, 0x35, 0xf1, 0x71, 0xd6, 0x02, 0x00, 0x00, } -func (this *SwapStats) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*SwapStats) - if !ok { - that2, ok := that.(SwapStats) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.SwapCount != that1.SwapCount { - return false - } - return true -} func (m *Swap) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -430,63 +297,6 @@ func (m *SwapStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MakeSwapProposal) 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 *MakeSwapProposal) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MakeSwapProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.ToDenomMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintFswap(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.Swap.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintFswap(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.Description) > 0 { - i -= len(m.Description) - copy(dAtA[i:], m.Description) - i = encodeVarintFswap(dAtA, i, uint64(len(m.Description))) - i-- - dAtA[i] = 0x12 - } - if len(m.Title) > 0 { - i -= len(m.Title) - copy(dAtA[i:], m.Title) - i = encodeVarintFswap(dAtA, i, uint64(len(m.Title))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func (m *Swapped) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -574,27 +384,6 @@ func (m *SwapStats) Size() (n int) { return n } -func (m *MakeSwapProposal) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Title) - if l > 0 { - n += 1 + l + sovFswap(uint64(l)) - } - l = len(m.Description) - if l > 0 { - n += 1 + l + sovFswap(uint64(l)) - } - l = m.Swap.Size() - n += 1 + l + sovFswap(uint64(l)) - l = m.ToDenomMetadata.Size() - n += 1 + l + sovFswap(uint64(l)) - return n -} - func (m *Swapped) Size() (n int) { if m == nil { return 0 @@ -865,186 +654,6 @@ func (m *SwapStats) Unmarshal(dAtA []byte) error { } return nil } -func (m *MakeSwapProposal) 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 ErrIntOverflowFswap - } - 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: MakeSwapProposal: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MakeSwapProposal: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Title", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowFswap - } - 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 ErrInvalidLengthFswap - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthFswap - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Title = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowFswap - } - 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 ErrInvalidLengthFswap - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthFswap - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Description = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Swap", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowFswap - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthFswap - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthFswap - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Swap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ToDenomMetadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowFswap - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthFswap - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthFswap - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ToDenomMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipFswap(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthFswap - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *Swapped) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/fswap/types/genesis.go b/x/fswap/types/genesis.go index 08c1d79338..e12f0dfdf8 100644 --- a/x/fswap/types/genesis.go +++ b/x/fswap/types/genesis.go @@ -1,5 +1,12 @@ package types +import ( + sdk "github.com/Finschia/finschia-sdk/types" + authtypes "github.com/Finschia/finschia-sdk/x/auth/types" + "github.com/Finschia/finschia-sdk/x/foundation" + govtypes "github.com/Finschia/finschia-sdk/x/gov/types" +) + // DefaultGenesis returns the default Capability genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ @@ -9,6 +16,17 @@ func DefaultGenesis() *GenesisState { } } +func DefaultAuthority() sdk.AccAddress { + return authtypes.NewModuleAddress(foundation.ModuleName) +} + +func AuthorityCandidates() []sdk.AccAddress { + return []sdk.AccAddress{ + authtypes.NewModuleAddress(govtypes.ModuleName), + authtypes.NewModuleAddress(foundation.ModuleName), + } +} + // Validate performs basic genesis state validation returning an error upon any failure. func (gs *GenesisState) Validate() error { for _, swap := range gs.GetSwaps() { diff --git a/x/fswap/types/msgs.go b/x/fswap/types/msgs.go index f94e123cae..936aa1cdb4 100644 --- a/x/fswap/types/msgs.go +++ b/x/fswap/types/msgs.go @@ -3,10 +3,13 @@ package types import ( sdk "github.com/Finschia/finschia-sdk/types" sdkerrors "github.com/Finschia/finschia-sdk/types/errors" - "github.com/Finschia/finschia-sdk/x/fswap/codec" ) -var _ sdk.Msg = &MsgSwap{} +var ( + _ sdk.Msg = &MsgSwap{} + _ sdk.Msg = &MsgSwapAll{} + _ sdk.Msg = &MsgSetSwap{} +) // ValidateBasic Implements Msg. func (m *MsgSwap) ValidateBasic() error { @@ -41,11 +44,9 @@ func (m *MsgSwap) GetSigners() []sdk.AccAddress { // GetSignBytes implements the LegacyMsg.GetSignBytes method. func (m *MsgSwap) GetSignBytes() []byte { - return sdk.MustSortJSON(codec.ModuleCdc.MustMarshalJSON(m)) + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m)) } -var _ sdk.Msg = &MsgSwapAll{} - // ValidateBasic Implements Msg. func (m *MsgSwapAll) ValidateBasic() error { _, err := sdk.AccAddressFromBech32(m.FromAddress) @@ -75,5 +76,33 @@ func (m *MsgSwapAll) GetSigners() []sdk.AccAddress { // GetSignBytes implements the LegacyMsg.GetSignBytes method. func (m *MsgSwapAll) GetSignBytes() []byte { - return sdk.MustSortJSON(codec.ModuleCdc.MustMarshalJSON(m)) + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m)) +} + +func (m *MsgSetSwap) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid authority address: %s", m.Authority) + } + + if err := m.Swap.ValidateBasic(); err != nil { + return err + } + if err := m.ToDenomMetadata.Validate(); err != nil { + return err + } + if m.Swap.ToDenom != m.ToDenomMetadata.Base { + return sdkerrors.ErrInvalidRequest.Wrapf("denomination does not match %s != %s", m.Swap.ToDenom, m.ToDenomMetadata.Base) + } + + return nil +} + +func (m *MsgSetSwap) GetSigners() []sdk.AccAddress { + signer := sdk.MustAccAddressFromBech32(m.Authority) + return []sdk.AccAddress{signer} +} + +// GetSignBytes implements the LegacyMsg.GetSignBytes method. +func (m *MsgSetSwap) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(m)) } diff --git a/x/fswap/types/proposal.go b/x/fswap/types/proposal.go deleted file mode 100644 index 99048caa57..0000000000 --- a/x/fswap/types/proposal.go +++ /dev/null @@ -1,54 +0,0 @@ -package types - -import ( - "gopkg.in/yaml.v2" - - sdkerrors "github.com/Finschia/finschia-sdk/types/errors" - bank "github.com/Finschia/finschia-sdk/x/bank/types" - gov "github.com/Finschia/finschia-sdk/x/gov/types" -) - -const ( - ProposalTypeMakeSwap string = "MakeSwap" -) - -// NewMakeSwapProposal creates a new SwapProposal instance. -// Deprecated: this proposal is considered legacy and is deprecated in favor of -// Msg-based gov proposals. See MakeSwapProposal. -func NewMakeSwapProposal(title, description string, swap Swap, toDenomMetadata bank.Metadata) *MakeSwapProposal { - return &MakeSwapProposal{title, description, swap, toDenomMetadata} -} - -// Implements Proposal Interface -var _ gov.Content = &MakeSwapProposal{} - -func init() { - gov.RegisterProposalType(ProposalTypeMakeSwap) -} - -// ProposalRoute gets the proposal's router key -func (m *MakeSwapProposal) ProposalRoute() string { return RouterKey } - -// ProposalType is "Swap" -func (m *MakeSwapProposal) ProposalType() string { return ProposalTypeMakeSwap } - -// String implements the Stringer interface. -func (m *MakeSwapProposal) String() string { - out, _ := yaml.Marshal(m) - return string(out) -} - -// ValidateBasic validates the proposal -func (m *MakeSwapProposal) ValidateBasic() error { - if err := m.Swap.ValidateBasic(); err != nil { - return err - } - if err := m.ToDenomMetadata.Validate(); err != nil { - return err - } - if m.Swap.ToDenom != m.ToDenomMetadata.Base { - return sdkerrors.ErrInvalidRequest.Wrapf("denomination does not match %s != %s", m.Swap.ToDenom, m.ToDenomMetadata.Base) - } - - return gov.ValidateAbstract(m) -} diff --git a/x/fswap/types/tx.pb.go b/x/fswap/types/tx.pb.go index 288ada4778..b4a9922936 100644 --- a/x/fswap/types/tx.pb.go +++ b/x/fswap/types/tx.pb.go @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" types "github.com/Finschia/finschia-sdk/types" + types1 "github.com/Finschia/finschia-sdk/x/bank/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" @@ -224,42 +225,148 @@ func (m *MsgSwapAllResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSwapAllResponse proto.InternalMessageInfo +type MsgSetSwap struct { + // authority is the address of the privileged account. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + Swap Swap `protobuf:"bytes,2,opt,name=swap,proto3" json:"swap"` + ToDenomMetadata types1.Metadata `protobuf:"bytes,3,opt,name=to_denom_metadata,json=toDenomMetadata,proto3" json:"to_denom_metadata" yaml:"denom_metadata"` +} + +func (m *MsgSetSwap) Reset() { *m = MsgSetSwap{} } +func (m *MsgSetSwap) String() string { return proto.CompactTextString(m) } +func (*MsgSetSwap) ProtoMessage() {} +func (*MsgSetSwap) Descriptor() ([]byte, []int) { + return fileDescriptor_65c77cf1d9b67323, []int{4} +} +func (m *MsgSetSwap) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSetSwap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSetSwap.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 *MsgSetSwap) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetSwap.Merge(m, src) +} +func (m *MsgSetSwap) XXX_Size() int { + return m.Size() +} +func (m *MsgSetSwap) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetSwap.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSetSwap proto.InternalMessageInfo + +func (m *MsgSetSwap) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgSetSwap) GetSwap() Swap { + if m != nil { + return m.Swap + } + return Swap{} +} + +func (m *MsgSetSwap) GetToDenomMetadata() types1.Metadata { + if m != nil { + return m.ToDenomMetadata + } + return types1.Metadata{} +} + +type MsgSetSwapResponse struct { +} + +func (m *MsgSetSwapResponse) Reset() { *m = MsgSetSwapResponse{} } +func (m *MsgSetSwapResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSetSwapResponse) ProtoMessage() {} +func (*MsgSetSwapResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_65c77cf1d9b67323, []int{5} +} +func (m *MsgSetSwapResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSetSwapResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSetSwapResponse.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 *MsgSetSwapResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetSwapResponse.Merge(m, src) +} +func (m *MsgSetSwapResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSetSwapResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetSwapResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSetSwapResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgSwap)(nil), "lbm.fswap.v1.MsgSwap") proto.RegisterType((*MsgSwapResponse)(nil), "lbm.fswap.v1.MsgSwapResponse") proto.RegisterType((*MsgSwapAll)(nil), "lbm.fswap.v1.MsgSwapAll") proto.RegisterType((*MsgSwapAllResponse)(nil), "lbm.fswap.v1.MsgSwapAllResponse") + proto.RegisterType((*MsgSetSwap)(nil), "lbm.fswap.v1.MsgSetSwap") + proto.RegisterType((*MsgSetSwapResponse)(nil), "lbm.fswap.v1.MsgSetSwapResponse") } func init() { proto.RegisterFile("lbm/fswap/v1/tx.proto", fileDescriptor_65c77cf1d9b67323) } var fileDescriptor_65c77cf1d9b67323 = []byte{ - // 387 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xbd, 0x6e, 0xe2, 0x40, - 0x10, 0xc7, 0xbd, 0x70, 0x3a, 0x8e, 0x05, 0xdd, 0x87, 0x05, 0x92, 0xb1, 0x84, 0xe1, 0xa8, 0x90, - 0x4e, 0xb7, 0x2b, 0x43, 0x7b, 0x8d, 0xb9, 0xbb, 0x28, 0x0d, 0x0d, 0xe9, 0xd2, 0x20, 0x7f, 0x61, - 0xac, 0xd8, 0x1e, 0x8b, 0x5d, 0x3e, 0xf2, 0x0a, 0xa9, 0xf2, 0x1c, 0x79, 0x8b, 0x74, 0x94, 0x94, - 0xa9, 0x92, 0x08, 0x5e, 0x24, 0xda, 0xb5, 0xad, 0xa4, 0x20, 0x1f, 0xdd, 0xf8, 0x3f, 0xff, 0x9d, - 0xdf, 0x8c, 0x67, 0x70, 0x33, 0x72, 0x62, 0x3a, 0x63, 0x6b, 0x3b, 0xa5, 0x2b, 0x93, 0xf2, 0x0d, - 0x49, 0x17, 0xc0, 0x41, 0xad, 0x47, 0x4e, 0x4c, 0xa4, 0x4c, 0x56, 0xa6, 0xde, 0x08, 0x20, 0x00, - 0x99, 0xa0, 0x22, 0xca, 0x3c, 0xba, 0xe1, 0x02, 0x8b, 0x81, 0x51, 0xc7, 0x66, 0x3e, 0x5d, 0x99, - 0x8e, 0xcf, 0x6d, 0x93, 0xba, 0x10, 0x26, 0x59, 0xbe, 0x77, 0x8b, 0x70, 0x65, 0xcc, 0x82, 0xb3, - 0xb5, 0x9d, 0xaa, 0x3f, 0x71, 0x7d, 0xb6, 0x80, 0x78, 0x6a, 0x7b, 0xde, 0xc2, 0x67, 0x4c, 0x43, - 0x5d, 0xd4, 0xaf, 0x4e, 0x6a, 0x42, 0xb3, 0x32, 0x49, 0xdd, 0xe0, 0xef, 0xd2, 0x22, 0x2a, 0x4c, - 0xed, 0x18, 0x96, 0x09, 0xd7, 0x4a, 0x5d, 0xd4, 0xaf, 0x0d, 0x5a, 0x24, 0x23, 0x11, 0x41, 0x22, - 0x39, 0x89, 0xfc, 0x85, 0x30, 0x19, 0x0d, 0xb7, 0xf7, 0x1d, 0xe5, 0xe6, 0xa1, 0xf3, 0x2b, 0x08, - 0xf9, 0x7c, 0xe9, 0x10, 0x17, 0x62, 0x7a, 0x12, 0x26, 0xcc, 0x9d, 0x87, 0x36, 0x9d, 0xe5, 0xc1, - 0x6f, 0xe6, 0x5d, 0x50, 0x7e, 0x99, 0xfa, 0x4c, 0x3e, 0x9a, 0x7c, 0x15, 0x1c, 0x11, 0x59, 0x92, - 0xa2, 0xb6, 0xf0, 0x17, 0x0e, 0x53, 0xcf, 0x4f, 0x20, 0xd6, 0xca, 0xb2, 0xb1, 0x0a, 0x87, 0x7f, - 0xe2, 0xb3, 0xf7, 0x03, 0x7f, 0xcb, 0x47, 0x98, 0xf8, 0x2c, 0x85, 0x84, 0xf9, 0xbd, 0x10, 0xe3, - 0x5c, 0xb2, 0xa2, 0xe8, 0x23, 0x83, 0xb5, 0x31, 0x96, 0x96, 0x0c, 0x50, 0x92, 0x86, 0xaa, 0x50, - 0x24, 0xe2, 0x2d, 0x7a, 0x03, 0xab, 0xcf, 0xa8, 0xa2, 0x81, 0xc1, 0x15, 0xc2, 0xe5, 0x31, 0x0b, - 0xd4, 0x3f, 0xf8, 0x93, 0xfc, 0xb7, 0x4d, 0xf2, 0x72, 0x59, 0x24, 0x7f, 0xa1, 0xb7, 0x8f, 0xca, - 0x45, 0x15, 0xf5, 0x3f, 0xae, 0x14, 0x33, 0x68, 0x47, 0x9d, 0x56, 0x14, 0xe9, 0xdd, 0xd7, 0x32, - 0x45, 0x99, 0xd1, 0xe9, 0x76, 0x6f, 0xa0, 0xdd, 0xde, 0x40, 0x8f, 0x7b, 0x03, 0x5d, 0x1f, 0x0c, - 0x65, 0x77, 0x30, 0x94, 0xbb, 0x83, 0xa1, 0x9c, 0x93, 0x77, 0x57, 0xb2, 0xc9, 0x0f, 0x4f, 0xae, - 0xc6, 0xf9, 0x2c, 0xaf, 0x66, 0xf8, 0x14, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x18, 0x17, 0xb0, 0x92, - 0x02, 0x00, 0x00, + // 506 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xcb, 0x8e, 0xda, 0x30, + 0x14, 0xc5, 0x33, 0xa8, 0x14, 0x33, 0xea, 0x74, 0xac, 0x41, 0x62, 0x50, 0x09, 0x34, 0xab, 0x91, + 0xda, 0xda, 0x82, 0xd9, 0x55, 0xdd, 0x40, 0x1f, 0xea, 0x86, 0x4d, 0xba, 0xeb, 0x06, 0x39, 0xc4, + 0x84, 0x88, 0x38, 0x8e, 0xb0, 0x61, 0xe0, 0x2f, 0xfa, 0x1d, 0xfd, 0x8b, 0x76, 0x35, 0xcb, 0xe9, + 0xae, 0xab, 0x69, 0x05, 0x7f, 0xd0, 0x2f, 0xa8, 0xec, 0x38, 0xd0, 0xa8, 0xf4, 0xb1, 0x73, 0xee, + 0x39, 0xb9, 0xe7, 0x9c, 0x7b, 0x6d, 0x58, 0x8f, 0x7d, 0x4e, 0x26, 0xf2, 0x9a, 0xa6, 0x64, 0xd9, + 0x25, 0x6a, 0x85, 0xd3, 0xb9, 0x50, 0x02, 0x9d, 0xc4, 0x3e, 0xc7, 0xa6, 0x8c, 0x97, 0xdd, 0xe6, + 0x79, 0x28, 0x42, 0x61, 0x00, 0xa2, 0x4f, 0x19, 0xa7, 0xe9, 0x8c, 0x85, 0xe4, 0x42, 0x12, 0x9f, + 0x4a, 0x46, 0x96, 0x5d, 0x9f, 0x29, 0xda, 0x25, 0x63, 0x11, 0x25, 0xbf, 0xe1, 0xc9, 0x6c, 0x87, + 0xeb, 0x0f, 0x8b, 0x37, 0x0a, 0xd2, 0x99, 0x98, 0x41, 0xdc, 0x4f, 0x00, 0x56, 0x86, 0x32, 0x7c, + 0x77, 0x4d, 0x53, 0xf4, 0x18, 0x9e, 0x4c, 0xe6, 0x82, 0x8f, 0x68, 0x10, 0xcc, 0x99, 0x94, 0x0d, + 0xd0, 0x01, 0x97, 0x55, 0xaf, 0xa6, 0x6b, 0xfd, 0xac, 0x84, 0x56, 0xf0, 0xa1, 0xa1, 0x68, 0xed, + 0x11, 0xe5, 0x62, 0x91, 0xa8, 0xc6, 0x51, 0x07, 0x5c, 0xd6, 0x7a, 0x17, 0x38, 0xf3, 0x80, 0xb5, + 0x47, 0x6c, 0x3d, 0xe0, 0x97, 0x22, 0x4a, 0x06, 0x57, 0x37, 0x77, 0xed, 0xd2, 0xc7, 0x6f, 0xed, + 0x27, 0x61, 0xa4, 0xa6, 0x0b, 0x1f, 0x8f, 0x05, 0x27, 0x6f, 0xa2, 0x44, 0x8e, 0xa7, 0x11, 0x25, + 0x13, 0x7b, 0x78, 0x26, 0x83, 0x19, 0x51, 0xeb, 0x94, 0x49, 0xf3, 0x93, 0xf7, 0x40, 0xeb, 0xe8, + 0x53, 0xdf, 0xa8, 0xa0, 0x0b, 0x78, 0x5f, 0x89, 0x51, 0xc0, 0x12, 0xc1, 0x1b, 0xc7, 0xc6, 0x58, + 0x45, 0x89, 0x57, 0xfa, 0xd3, 0x3d, 0x83, 0xa7, 0x36, 0x82, 0xc7, 0x64, 0x2a, 0x12, 0xc9, 0xdc, + 0x08, 0x42, 0x5b, 0xea, 0xc7, 0xf1, 0xff, 0x04, 0x6b, 0x41, 0x68, 0x28, 0x99, 0xc0, 0x91, 0x21, + 0x54, 0x75, 0xc5, 0x48, 0xfc, 0x4d, 0xfd, 0x1c, 0xa2, 0xbd, 0xd4, 0xce, 0xc0, 0x67, 0x90, 0x39, + 0x60, 0xca, 0x8c, 0xf6, 0x11, 0xac, 0xd2, 0x85, 0x9a, 0x8a, 0x79, 0xa4, 0xd6, 0x56, 0x7e, 0x5f, + 0x40, 0x4f, 0x61, 0x59, 0xaf, 0xc4, 0x4e, 0x12, 0xe1, 0x5f, 0x6f, 0x04, 0xd6, 0xff, 0x0f, 0xca, + 0x7a, 0x84, 0x9e, 0x61, 0xa1, 0x29, 0x3c, 0xcb, 0xbd, 0x8c, 0x38, 0x53, 0x34, 0xa0, 0x8a, 0x1a, + 0x53, 0xb5, 0x5e, 0x6b, 0xbf, 0x84, 0x64, 0xb6, 0x5b, 0xc2, 0xd0, 0x92, 0x06, 0x2d, 0xdd, 0xe5, + 0xc7, 0x5d, 0xbb, 0xbe, 0xa6, 0x3c, 0x7e, 0xee, 0x16, 0x5b, 0xb8, 0xde, 0xa9, 0x8d, 0x94, 0xf3, + 0xf3, 0x68, 0x59, 0x86, 0x3c, 0x5a, 0xef, 0x0b, 0x80, 0xc7, 0x43, 0x19, 0xa2, 0x17, 0xb0, 0x6c, + 0xb2, 0xd5, 0x8b, 0x7e, 0xed, 0x30, 0x9a, 0xad, 0x83, 0xe5, 0xbc, 0x0b, 0x7a, 0x0d, 0x2b, 0xf9, + 0x7a, 0x1a, 0x07, 0x99, 0xfd, 0x38, 0x6e, 0x76, 0xfe, 0x84, 0x14, 0xda, 0xd8, 0x19, 0x1f, 0x68, + 0x93, 0x21, 0x87, 0xda, 0x14, 0x33, 0x0d, 0xde, 0xde, 0x6c, 0x1c, 0x70, 0xbb, 0x71, 0xc0, 0xf7, + 0x8d, 0x03, 0x3e, 0x6c, 0x9d, 0xd2, 0xed, 0xd6, 0x29, 0x7d, 0xdd, 0x3a, 0xa5, 0xf7, 0xf8, 0x9f, + 0x97, 0x76, 0x65, 0x5f, 0x96, 0xb9, 0xbc, 0xfe, 0x3d, 0xf3, 0xae, 0xae, 0x7e, 0x06, 0x00, 0x00, + 0xff, 0xff, 0xc9, 0xd9, 0x78, 0xc1, 0xee, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -276,6 +383,7 @@ const _ = grpc.SupportPackageIsVersion4 type MsgClient interface { Swap(ctx context.Context, in *MsgSwap, opts ...grpc.CallOption) (*MsgSwapResponse, error) SwapAll(ctx context.Context, in *MsgSwapAll, opts ...grpc.CallOption) (*MsgSwapAllResponse, error) + SetSwap(ctx context.Context, in *MsgSetSwap, opts ...grpc.CallOption) (*MsgSetSwapResponse, error) } type msgClient struct { @@ -304,10 +412,20 @@ func (c *msgClient) SwapAll(ctx context.Context, in *MsgSwapAll, opts ...grpc.Ca return out, nil } +func (c *msgClient) SetSwap(ctx context.Context, in *MsgSetSwap, opts ...grpc.CallOption) (*MsgSetSwapResponse, error) { + out := new(MsgSetSwapResponse) + err := c.cc.Invoke(ctx, "/lbm.fswap.v1.Msg/SetSwap", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { Swap(context.Context, *MsgSwap) (*MsgSwapResponse, error) SwapAll(context.Context, *MsgSwapAll) (*MsgSwapAllResponse, error) + SetSwap(context.Context, *MsgSetSwap) (*MsgSetSwapResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -320,6 +438,9 @@ func (*UnimplementedMsgServer) Swap(ctx context.Context, req *MsgSwap) (*MsgSwap func (*UnimplementedMsgServer) SwapAll(ctx context.Context, req *MsgSwapAll) (*MsgSwapAllResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SwapAll not implemented") } +func (*UnimplementedMsgServer) SetSwap(ctx context.Context, req *MsgSetSwap) (*MsgSetSwapResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetSwap not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -361,6 +482,24 @@ func _Msg_SwapAll_Handler(srv interface{}, ctx context.Context, dec func(interfa return interceptor(ctx, in, info, handler) } +func _Msg_SetSwap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSetSwap) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SetSwap(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lbm.fswap.v1.Msg/SetSwap", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SetSwap(ctx, req.(*MsgSetSwap)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "lbm.fswap.v1.Msg", HandlerType: (*MsgServer)(nil), @@ -373,6 +512,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "SwapAll", Handler: _Msg_SwapAll_Handler, }, + { + MethodName: "SetSwap", + Handler: _Msg_SetSwap_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "lbm/fswap/v1/tx.proto", @@ -515,6 +658,79 @@ func (m *MsgSwapAllResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgSetSwap) 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 *MsgSetSwap) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSetSwap) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ToDenomMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Swap.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 *MsgSetSwapResponse) 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 *MsgSetSwapResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSetSwapResponse) 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 @@ -584,6 +800,32 @@ func (m *MsgSwapAllResponse) Size() (n int) { return n } +func (m *MsgSetSwap) 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.Swap.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.ToDenomMetadata.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgSetSwapResponse) 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 } @@ -983,6 +1225,204 @@ func (m *MsgSwapAllResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgSetSwap) 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: MsgSetSwap: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSetSwap: 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 Swap", 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.Swap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ToDenomMetadata", 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.ToDenomMetadata.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 *MsgSetSwapResponse) 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: MsgSetSwapResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSetSwapResponse: 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