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  }