From acd7cacc3ede26698cb04830f12c03b47d07e6ff Mon Sep 17 00:00:00 2001 From: Peter Bukva Date: Wed, 4 Feb 2026 13:25:32 +0000 Subject: [PATCH 1/2] Enable burn for any denom + tokens holder can burn --- x/tokenfactory/keeper/bankactions.go | 14 ++++++++------ x/tokenfactory/keeper/msg_server.go | 27 +++++++++++++++------------ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/x/tokenfactory/keeper/bankactions.go b/x/tokenfactory/keeper/bankactions.go index 0eb94de..7985d26 100644 --- a/x/tokenfactory/keeper/bankactions.go +++ b/x/tokenfactory/keeper/bankactions.go @@ -39,12 +39,14 @@ func (k Keeper) mintTo(ctx sdk.Context, amount sdk.Coin, mintTo string, isSudo b sdk.NewCoins(amount)) } -func (k Keeper) burnFrom(ctx sdk.Context, amount sdk.Coin, burnFrom string) error { - // verify that denom is an x/tokenfactory denom - _, _, err := types.DeconstructDenom(amount.Denom) - if err != nil { - return err - } +func (k Keeper) burnFrom(ctx sdk.Context, amount sdk.Coin, burnFrom string /*, isTokenOwner bool*/) error { + //// verify that denom is an x/tokenfactory denom + //if !isTokenOwner { + // _, _, err := types.DeconstructDenom(amount.Denom) + // if err != nil { + // return err + // } + //} addr, err := sdk.AccAddressFromBech32(burnFrom) if err != nil { diff --git a/x/tokenfactory/keeper/msg_server.go b/x/tokenfactory/keeper/msg_server.go index bb031fa..48bd693 100644 --- a/x/tokenfactory/keeper/msg_server.go +++ b/x/tokenfactory/keeper/msg_server.go @@ -96,22 +96,25 @@ func (server msgServer) Mint(goCtx context.Context, msg *types.MsgMint) (*types. func (server msgServer) Burn(goCtx context.Context, msg *types.MsgBurn) (*types.MsgBurnResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - authorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Amount.GetDenom()) - if err != nil { - return nil, err - } - - if msg.Sender != authorityMetadata.GetAdmin() { - return nil, types.ErrUnauthorized - } - if msg.BurnFromAddress == "" { msg.BurnFromAddress = msg.Sender - } else if !types.IsCapabilityEnabled(server.Keeper.enabledCapabilities, types.EnableBurnFrom) { - return nil, types.ErrCapabilityNotEnabled + } else if msg.BurnFromAddress == msg.Sender { + } else { + if !types.IsCapabilityEnabled(server.Keeper.enabledCapabilities, types.EnableBurnFrom) { + return nil, types.ErrCapabilityNotEnabled + } else { + authorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Amount.GetDenom()) + if err != nil { + return nil, err + } + + if msg.Sender != authorityMetadata.GetAdmin() { + return nil, types.ErrUnauthorized + } + } } - err = server.Keeper.burnFrom(ctx, msg.Amount, msg.BurnFromAddress) + err := server.Keeper.burnFrom(ctx, msg.Amount, msg.BurnFromAddress) if err != nil { return nil, err } From 5751eace1951e1f1abb197fc06bb616451c13bd0 Mon Sep 17 00:00:00 2001 From: Peter Bukva Date: Wed, 4 Feb 2026 15:46:24 +0000 Subject: [PATCH 2/2] Cosmetic --- x/tokenfactory/keeper/msg_server.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/x/tokenfactory/keeper/msg_server.go b/x/tokenfactory/keeper/msg_server.go index 48bd693..066a6b2 100644 --- a/x/tokenfactory/keeper/msg_server.go +++ b/x/tokenfactory/keeper/msg_server.go @@ -102,15 +102,15 @@ func (server msgServer) Burn(goCtx context.Context, msg *types.MsgBurn) (*types. } else { if !types.IsCapabilityEnabled(server.Keeper.enabledCapabilities, types.EnableBurnFrom) { return nil, types.ErrCapabilityNotEnabled - } else { - authorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Amount.GetDenom()) - if err != nil { - return nil, err - } - - if msg.Sender != authorityMetadata.GetAdmin() { - return nil, types.ErrUnauthorized - } + } + + authorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Amount.GetDenom()) + if err != nil { + return nil, err + } + + if msg.Sender != authorityMetadata.GetAdmin() { + return nil, types.ErrUnauthorized } }