github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/dex/proposal_handler.go (about) 1 package dex 2 3 import ( 4 "fmt" 5 "github.com/fibonacci-chain/fbc/x/common" 6 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 "github.com/fibonacci-chain/fbc/x/dex/types" 9 govTypes "github.com/fibonacci-chain/fbc/x/gov/types" 10 ) 11 12 // NewProposalHandler handles "gov" type message in "dex" 13 func NewProposalHandler(k *Keeper) govTypes.Handler { 14 return func(ctx sdk.Context, proposal *govTypes.Proposal) (err sdk.Error) { 15 switch c := proposal.Content.(type) { 16 case types.DelistProposal: 17 return handleDelistProposal(ctx, k, proposal) 18 default: 19 return common.ErrUnknownProposalType(DefaultCodespace, fmt.Sprintf("%T", c)) 20 } 21 } 22 } 23 24 func handleDelistProposal(ctx sdk.Context, keeper *Keeper, proposal *govTypes.Proposal) (err sdk.Error) { 25 p := proposal.Content.(types.DelistProposal) 26 logger := ctx.Logger().With("module", types.ModuleName) 27 logger.Debug("execute DelistProposal begin") 28 29 tokenPairName := fmt.Sprintf("%s_%s", p.BaseAsset, p.QuoteAsset) 30 tokenPair := keeper.GetTokenPair(ctx, tokenPairName) 31 if tokenPair == nil { 32 return ErrTokenPairNotFound(tokenPairName) 33 } 34 if keeper.IsTokenPairLocked(ctx, tokenPairName) { 35 return types.ErrIsTokenPairLocked(tokenPairName) 36 } 37 // withdraw 38 if tokenPair.Deposits.IsPositive() { 39 if err := keeper.Withdraw(ctx, tokenPair.Name(), tokenPair.Owner, tokenPair.Deposits); err != nil { 40 return types.ErrWithdrawFailed(err.Error()) 41 } 42 } 43 44 // delete the token pair by its name from store and cache 45 keeper.DeleteTokenPairByName(ctx, tokenPair.Owner, tokenPairName) 46 47 // remove the delistProposal from the active proposal queue 48 keeper.RemoveFromActiveProposalQueue(ctx, proposal.ProposalID, proposal.VotingEndTime) 49 50 ctx.EventManager().EmitEvent( 51 sdk.NewEvent( 52 sdk.EventTypeMessage, 53 sdk.NewAttribute("token-pair-deleted", tokenPairName), 54 )) 55 return nil 56 }