github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/mint/abci_fbchain.go (about)

     1  package mint
     2  
     3  import (
     4  	"fmt"
     5  
     6  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     7  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint/internal/types"
     8  	tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types"
     9  )
    10  
    11  func disableMining(minter *types.Minter) {
    12  	minter.Inflation = sdk.ZeroDec()
    13  }
    14  
    15  var setInflationHandler func(minter *types.Minter)
    16  
    17  // BeginBlocker mints new tokens for the previous block.
    18  func beginBlocker(ctx sdk.Context, k Keeper) {
    19  
    20  	logger := k.Logger(ctx)
    21  	// fetch stored minter & params
    22  	params := k.GetParams(ctx)
    23  	minter := k.GetMinterCustom(ctx)
    24  	if ctx.BlockHeight() == 0 || uint64(ctx.BlockHeight()) >= minter.NextBlockToUpdate {
    25  		k.UpdateMinterCustom(ctx, &minter, params)
    26  	}
    27  
    28  	if tmtypes.HigherThanJupiter(ctx.BlockHeight()) && uint64(ctx.BlockHeight()) <= uint64(tmtypes.GetCometHeight()+401) {
    29  		//adjust param and minter
    30  		//back to normal
    31  		if ctx.BlockHeight() == tmtypes.GetJupiterHeight() {
    32  			k.UpdateMinterCustomToRightJupiter(ctx, &minter, params)
    33  		} else if ctx.BlockHeight() >= tmtypes.GetCometHeight() && uint64(ctx.BlockHeight()) <= uint64(tmtypes.GetCometHeight()+400) {
    34  			minter.MintedPerBlock = sdk.NewDecCoinsFromDec(params.MintDenom, sdk.MustNewDecFromStr("3434.9725"))
    35  		} else if uint64(ctx.BlockHeight()) == uint64(tmtypes.GetCometHeight()+401) {
    36  			k.UpdateMinterCustomToRightComet(ctx, &minter, params)
    37  		}
    38  	} else {
    39  		//cache up
    40  		if uint64(ctx.BlockHeight()) > tmtypes.CacheUpBlockHeight &&
    41  			uint64(ctx.BlockHeight()) < tmtypes.CacheUpBlockRewardStopHeight {
    42  			if uint64(ctx.BlockHeight()) >= tmtypes.CacheUpBlockStopHeight {
    43  				minter.MintedPerBlock = sdk.NewDecCoinsFromDec(params.MintDenom, sdk.MustNewDecFromStr("1.2514"))
    44  			} else {
    45  				minter.MintedPerBlock = sdk.NewDecCoinsFromDec(params.MintDenom, sdk.MustNewDecFromStr("1.56"))
    46  			}
    47  		}
    48  	}
    49  
    50  	if minter.MintedPerBlock.AmountOf(params.MintDenom).LTE(sdk.ZeroDec()) {
    51  		logger.Debug(fmt.Sprintf("No more <%v> to mint", params.MintDenom))
    52  		return
    53  	}
    54  
    55  	err := k.MintCoins(ctx, minter.MintedPerBlock)
    56  	if err != nil {
    57  		panic(err)
    58  	}
    59  
    60  	farmingAmount := minter.MintedPerBlock.MulDecTruncate(params.FarmProportion)
    61  
    62  	// send the minted coins to the fee collector account
    63  	err = k.AddCollectedFees(ctx, minter.MintedPerBlock.Sub(farmingAmount))
    64  	if err != nil {
    65  		panic(err)
    66  	}
    67  	// send the minted coins to the farm module account
    68  	err = k.AddYieldFarming(ctx, farmingAmount)
    69  	if err != nil {
    70  		panic(err)
    71  	}
    72  
    73  	logger.Debug(fmt.Sprintf(
    74  		"total supply <%v>, "+
    75  			"\nparams <%v>, "+
    76  			"\nminted amount<%v>, "+
    77  			"staking amount <%v>, "+
    78  			"yield farming amount <%v>, "+
    79  			"\nnext block to update minted per block <%v>, ",
    80  		sdk.NewDecCoinFromDec(params.MintDenom, k.StakingTokenSupply(ctx)),
    81  		params,
    82  		minter.MintedPerBlock,
    83  		minter.MintedPerBlock.Sub(farmingAmount),
    84  		farmingAmount,
    85  		minter.NextBlockToUpdate))
    86  
    87  	ctx.EventManager().EmitEvent(
    88  		sdk.NewEvent(
    89  			types.EventTypeMint,
    90  			sdk.NewAttribute(types.AttributeKeyInflation, params.DeflationRate.String()),
    91  			sdk.NewAttribute(sdk.AttributeKeyAmount, minter.MintedPerBlock.String()),
    92  		),
    93  	)
    94  }
    95  
    96  // BeginBlocker mints new tokens for the previous block.
    97  func BeginBlocker(ctx sdk.Context, k Keeper) {
    98  	setInflationHandler = disableMining
    99  	beginBlocker(ctx, k)
   100  }