From 378af9d2ec03ada7b8a624627905b0215a031bac Mon Sep 17 00:00:00 2001 From: rustdev Date: Wed, 22 May 2024 16:52:17 +0100 Subject: [PATCH] all test passed. with a new custom pfm module with a fee. --- custom/custompfm/keeper/keeper.go | 24 ++++++++---------------- x/ibctransfermiddleware/keeper/keeper.go | 9 +++------ 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/custom/custompfm/keeper/keeper.go b/custom/custompfm/keeper/keeper.go index aeeb5536..48432a29 100644 --- a/custom/custompfm/keeper/keeper.go +++ b/custom/custompfm/keeper/keeper.go @@ -199,33 +199,25 @@ func (im IBCMiddleware) OnRecvPacket( memo, ) - result, err := im.ibcfeekeeper.ChargeFee(goCtx, tr) + result, err := im.ibcfeekeeper.ChargeFee(ctx, tr) if err != nil { logger.Error("packetForwardMiddleware OnRecvPacket error charging fee", "error", err) return newErrorAcknowledgement(fmt.Errorf("error charging fee: %w", err)) } if result != nil { - if token.Amount.GTE(result.Fee.Amount) { + if result.Fee.Amount.LT(token.Amount) { token = token.SubAmount(result.Fee.Amount) } else { - // send_err := im.bank.SendCoins(ctx, msgSender, feeAddress, sdk.NewCoins(charge_coin)) - ack := channeltypes.NewResultAcknowledgement([]byte{byte(1)}) //?????? + send_err := im.bank.SendCoins(ctx, result.Sender, result.Reciever, sdk.NewCoins(result.Fee)) + if send_err != nil { + logger.Error("packetForwardMiddleware OnRecvPacket error sending fee", "error", send_err) + return newErrorAcknowledgement(fmt.Errorf("error charging fee: %w", send_err)) + } + ack := channeltypes.NewResultAcknowledgement([]byte{byte(1)}) return ack - // logger.Error("fee is greater than the amount", "error") - // return newErrorAcknowledgement(fmt.Errorf("error charging fee: %w", err)) } - - // else { - // logger.Error("fee is greater than the amount", "error") - // return newErrorAcknowledgement(fmt.Errorf("error charging fee: %w", err)) - // } - // token = sdk.NewCoin(result.Fee.Denom, result.Fee.Amount) } - // //fi amount < fee. it is spamer. we do not need proceed this packet. no timeout for this packet - // ack := channeltypes.NewResultAcknowledgement([]byte{byte(1)}) - // return ack - err = im.keeper1.ForwardTransferPacket(ctx, nil, packet, data.Sender, overrideReceiver, metadata, token, retries, timeout, []metrics.Label{}, nonrefundable) if err != nil { logger.Error("packetForwardMiddleware OnRecvPacket error forwarding packet", "error", err) diff --git a/x/ibctransfermiddleware/keeper/keeper.go b/x/ibctransfermiddleware/keeper/keeper.go index 9ce644f5..bf8b95d0 100644 --- a/x/ibctransfermiddleware/keeper/keeper.go +++ b/x/ibctransfermiddleware/keeper/keeper.go @@ -1,7 +1,6 @@ package keeper import ( - "context" "encoding/json" "fmt" "time" @@ -117,8 +116,7 @@ type BridgeFee struct { Reciever sdk.AccAddress } -func (k Keeper) ChargeFee(goCtx context.Context, msg *ibctypes.MsgTransfer) (*BridgeFee, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) ChargeFee(ctx sdk.Context, msg *ibctypes.MsgTransfer) (*BridgeFee, error) { params := k.GetParams(ctx) // charge_coin := sdk.NewCoin(msg.Token.Denom, sdk.ZeroInt()) if params.ChannelFees != nil && len(params.ChannelFees) > 0 { @@ -126,8 +124,7 @@ func (k Keeper) ChargeFee(goCtx context.Context, msg *ibctypes.MsgTransfer) (*Br if channelFee != nil { if channelFee.MinTimeoutTimestamp > 0 { - goCtx := sdk.UnwrapSDKContext(goCtx) - blockTime := goCtx.BlockTime() + blockTime := ctx.BlockTime() timeoutTimeInFuture := time.Unix(0, int64(msg.TimeoutTimestamp)) if timeoutTimeInFuture.Before(blockTime) { @@ -182,7 +179,7 @@ func (k Keeper) ChargeFee(goCtx context.Context, msg *ibctypes.MsgTransfer) (*Br // return nil, send_err // } msg.Token.Amount = newAmount - return &BridgeFee{fee: charge_coin, sender: msgSender, reciever: feeAddress}, nil + return &BridgeFee{Fee: charge_coin, Sender: msgSender, Reciever: feeAddress}, nil // if newAmount.LTE(sdk.ZeroInt()) { // zeroTransfer := sdk.NewCoin(msg.Token.Denom, sdk.ZeroInt())