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  }