package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/nft" ) var _ nft.MsgServer = Keeper{} // Send implement Send method of the types.MsgServer. func (k Keeper) Send(goCtx context.Context, msg *nft.MsgSend) (*nft.MsgSendResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) sender, err := sdk.AccAddressFromBech32(msg.Sender) if err != nil { return nil, err } owner := k.GetOwner(ctx, msg.ClassId, msg.Id) if !owner.Equals(sender) { return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not the owner of nft %s", sender, msg.Id) } receiver, err := sdk.AccAddressFromBech32(msg.Receiver) if err != nil { return nil, err } if err := k.Transfer(ctx, msg.ClassId, msg.Id, receiver); err != nil { return nil, err } ctx.EventManager().EmitTypedEvent(&nft.EventSend{ ClassId: msg.ClassId, Id: msg.Id, Sender: msg.Sender, Receiver: msg.Receiver, }) return &nft.MsgSendResponse{}, nil }