11package keeper
22
33import (
4+ "fmt"
45 sdk "github.com/cosmos/cosmos-sdk/types"
56 banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
67 "github.com/elys-network/elys/x/burner/types"
@@ -14,61 +15,36 @@ func (k Keeper) ShouldBurnTokens(ctx sdk.Context, epochIdentifier string) bool {
1415
1516// BurnTokensForAllDenoms burns tokens for all denominations
1617func (k Keeper ) BurnTokensForAllDenoms (ctx sdk.Context ) error {
17- balances := k .getPositiveBalances (ctx )
18- for denom , balance := range balances {
19- if err := k .burnTokensForDenom (ctx , balance , denom ); err != nil {
20- return err
21- }
22- }
23- return nil
24- }
2518
26- func (k Keeper ) getPositiveBalances (ctx sdk.Context ) map [string ]sdk.Coins {
2719 zeroAddress := types .GetZeroAddress ()
28- balances := make ( map [ string ] sdk.Coins )
20+ coinsToBurn := sdk .NewCoins ( )
2921 k .bankKeeper .IterateAllDenomMetaData (ctx , func (metadata banktypes.Metadata ) bool {
3022 // Get the balance of the zero address for this denom
3123 balance := k .bankKeeper .GetBalance (ctx , zeroAddress , metadata .Base )
3224 if balance .IsPositive () {
33- balances [ metadata . Base ] = sdk . NewCoins (balance )
25+ coinsToBurn = coinsToBurn . Add (balance )
3426 }
3527 return false
3628 })
37- return balances
38- }
3929
40- func (k Keeper ) burnTokensForDenom (ctx sdk.Context , balance sdk.Coins , denom string ) error {
41- if err := k .sendCoinsFromZeroAddressToModule (ctx , balance ); err != nil {
42- k .Logger (ctx ).Error ("Error sending coins and burning tokens" , "denom" , denom , "error" , err )
43- return err
44- }
45- if err := k .burnCoins (ctx , balance ); err != nil {
46- k .Logger (ctx ).Error ("Error burning tokens" , "denom" , denom , "error" , err )
47- return err
48- }
49- k .Logger (ctx ).Info ("Burned tokens for denom" , denom )
50-
51- // check if balance has at least one coin
52- if len (balance ) == 0 {
53- return nil
54- }
30+ if ! coinsToBurn .IsZero () {
31+ if err := k .bankKeeper .SendCoinsFromAccountToModule (ctx , zeroAddress , types .ModuleName , coinsToBurn ); err != nil {
32+ k .Logger (ctx ).Error (fmt .Sprintf ("Error sending coins for burning tokens %s, err: %s" , coinsToBurn .String (), err .Error ()))
33+ return err
34+ }
35+ if err := k .bankKeeper .BurnCoins (ctx , types .ModuleName , coinsToBurn ); err != nil {
36+ k .Logger (ctx ).Error (fmt .Sprintf ("Error burning tokens %s, err: %s" , coinsToBurn .String (), err .Error ()))
37+ return err
38+ }
39+ k .Logger (ctx ).Info ("Burned tokens %s" , coinsToBurn .String ())
5540
56- // Record a history item
57- history := types.History {
58- Timestamp : ctx .BlockTime ().String (),
59- Denom : denom ,
60- Amount : balance [0 ].Amount .String (),
41+ // Record a history item
42+ history := types.History {
43+ Block : uint64 (ctx .BlockHeight ()),
44+ BurnedCoins : coinsToBurn ,
45+ }
46+ k .SetHistory (ctx , history )
6147 }
62- k .SetHistory (ctx , history )
6348
6449 return nil
6550}
66-
67- func (k Keeper ) sendCoinsFromZeroAddressToModule (ctx sdk.Context , coins sdk.Coins ) error {
68- zeroAddress := types .GetZeroAddress ()
69- return k .bankKeeper .SendCoinsFromAccountToModule (ctx , zeroAddress , types .ModuleName , coins )
70- }
71-
72- func (k Keeper ) burnCoins (ctx sdk.Context , coins sdk.Coins ) error {
73- return k .bankKeeper .BurnCoins (ctx , types .ModuleName , coins )
74- }
0 commit comments