github.com/Finschia/finschia-sdk@v0.48.1/x/mint/abci.go (about)

     1  package mint
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/Finschia/finschia-sdk/telemetry"
     7  	sdk "github.com/Finschia/finschia-sdk/types"
     8  	"github.com/Finschia/finschia-sdk/x/mint/keeper"
     9  	"github.com/Finschia/finschia-sdk/x/mint/types"
    10  )
    11  
    12  // BeginBlocker mints new tokens for the previous block.
    13  func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
    14  	defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)
    15  
    16  	// fetch stored minter & params
    17  	minter := k.GetMinter(ctx)
    18  	params := k.GetParams(ctx)
    19  
    20  	// recalculate inflation rate
    21  	totalStakingSupply := k.StakingTokenSupply(ctx)
    22  	bondedRatio := k.BondedRatio(ctx)
    23  	minter.Inflation = minter.NextInflationRate(params, bondedRatio)
    24  	minter.AnnualProvisions = minter.NextAnnualProvisions(params, totalStakingSupply)
    25  	k.SetMinter(ctx, minter)
    26  
    27  	// mint coins, update supply
    28  	mintedCoin := minter.BlockProvision(params)
    29  	mintedCoins := sdk.NewCoins(mintedCoin)
    30  
    31  	err := k.MintCoins(ctx, mintedCoins)
    32  	if err != nil {
    33  		panic(err)
    34  	}
    35  
    36  	// send the minted coins to the fee collector account
    37  	err = k.AddCollectedFees(ctx, mintedCoins)
    38  	if err != nil {
    39  		panic(err)
    40  	}
    41  
    42  	if mintedCoin.Amount.IsInt64() {
    43  		defer telemetry.ModuleSetGauge(types.ModuleName, float32(mintedCoin.Amount.Int64()), "minted_tokens")
    44  	}
    45  
    46  	ctx.EventManager().EmitEvent(
    47  		sdk.NewEvent(
    48  			types.EventTypeMint,
    49  			sdk.NewAttribute(types.AttributeKeyBondedRatio, bondedRatio.String()),
    50  			sdk.NewAttribute(types.AttributeKeyInflation, minter.Inflation.String()),
    51  			sdk.NewAttribute(types.AttributeKeyAnnualProvisions, minter.AnnualProvisions.String()),
    52  			sdk.NewAttribute(sdk.AttributeKeyAmount, mintedCoin.Amount.String()),
    53  		),
    54  	)
    55  }