github.com/cosmos/cosmos-sdk@v0.50.10/x/mint/abci.go (about) 1 package mint 2 3 import ( 4 "context" 5 6 "github.com/cosmos/cosmos-sdk/telemetry" 7 sdk "github.com/cosmos/cosmos-sdk/types" 8 "github.com/cosmos/cosmos-sdk/x/mint/keeper" 9 "github.com/cosmos/cosmos-sdk/x/mint/types" 10 ) 11 12 // BeginBlocker mints new tokens for the previous block. 13 func BeginBlocker(ctx context.Context, k keeper.Keeper, ic types.InflationCalculationFn) error { 14 defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyBeginBlocker) 15 16 // fetch stored minter & params 17 minter, err := k.Minter.Get(ctx) 18 if err != nil { 19 return err 20 } 21 22 params, err := k.Params.Get(ctx) 23 if err != nil { 24 return err 25 } 26 27 // recalculate inflation rate 28 totalStakingSupply, err := k.StakingTokenSupply(ctx) 29 if err != nil { 30 return err 31 } 32 33 bondedRatio, err := k.BondedRatio(ctx) 34 if err != nil { 35 return err 36 } 37 38 minter.Inflation = ic(ctx, minter, params, bondedRatio) 39 minter.AnnualProvisions = minter.NextAnnualProvisions(params, totalStakingSupply) 40 if err = k.Minter.Set(ctx, minter); err != nil { 41 return err 42 } 43 44 // mint coins, update supply 45 mintedCoin := minter.BlockProvision(params) 46 mintedCoins := sdk.NewCoins(mintedCoin) 47 48 err = k.MintCoins(ctx, mintedCoins) 49 if err != nil { 50 return err 51 } 52 53 // send the minted coins to the fee collector account 54 err = k.AddCollectedFees(ctx, mintedCoins) 55 if err != nil { 56 return err 57 } 58 59 if mintedCoin.Amount.IsInt64() { 60 defer telemetry.ModuleSetGauge(types.ModuleName, float32(mintedCoin.Amount.Int64()), "minted_tokens") 61 } 62 63 sdkCtx := sdk.UnwrapSDKContext(ctx) 64 sdkCtx.EventManager().EmitEvent( 65 sdk.NewEvent( 66 types.EventTypeMint, 67 sdk.NewAttribute(types.AttributeKeyBondedRatio, bondedRatio.String()), 68 sdk.NewAttribute(types.AttributeKeyInflation, minter.Inflation.String()), 69 sdk.NewAttribute(types.AttributeKeyAnnualProvisions, minter.AnnualProvisions.String()), 70 sdk.NewAttribute(sdk.AttributeKeyAmount, mintedCoin.Amount.String()), 71 ), 72 ) 73 74 return nil 75 }