Mint
Terra's mint module inherits from the Cosmos SDK's mint
module. This document is a stub and mainly covers important Terra-specific notes on how it is used.
The mint module is in charge of the creation of new Luna through minting. At the beginning of every block, new Luna is released by the mint module and sent to the fee collector account to be distributed to stakers as rewards.
The current inflation rate is set to a fixed 7% annual inflation.
Variable rate
The mint module also allows for a variable inflation rate to be used. While the current rate is fixed, these parameters can be changed through a governance vote. The following outlines the variable inflation logic.
Variable inflation logic is designed to:
-
Allow for a flexible inflation rate determined by market demand targeting a particular bonded-stake ratio.
-
Affect a balance between market liquidity and staked supply.
To best determine the appropriate market rate for inflation rewards, a moving change rate is used. The moving change rate mechanism ensures that if the percentage bonded is either over or under the goal percentage-bonded, the inflation rate will adjust to further incentivize or disincentivize being bonded, respectively. Setting the goal percentage-bonded at less than 100% encourages the network to maintain some non-staked tokens, which helps to provide some liquidity.
It works in the following ways:
If the inflation rate is below the goal percentage-bonded, the inflation rate increases until a maximum value is reached.
If the goal percentage-bonded (67% in Cosmos-Hub) is maintained, the inflation rate stays constant.
If the inflation rate is above the goal percentage-bonded, the inflation rate decreases until a minimum value is reached.
Parameters
The subspace for the Mint module is mint
.
_14type Params struct {_14 // type of coin to mint_14 MintDenom string `protobuf:"bytes,1,opt,name=mint_denom,json=mintDenom,proto3" json:"mint_denom,omitempty"`_14 // maximum annual change in inflation rate_14 InflationRateChange github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=inflation_rate_change,json=inflationRateChange,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation_rate_change" yaml:"inflation_rate_change"`_14 // maximum inflation rate_14 InflationMax github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=inflation_max,json=inflationMax,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation_max" yaml:"inflation_max"`_14 // minimum inflation rate_14 InflationMin github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,4,opt,name=inflation_min,json=inflationMin,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation_min" yaml:"inflation_min"`_14 // goal of percent bonded Luna_14 GoalBonded github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,5,opt,name=goal_bonded,json=goalBonded,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"goal_bonded" yaml:"goal_bonded"`_14 // expected blocks per year_14 BlocksPerYear uint64 `protobuf:"varint,6,opt,name=blocks_per_year,json=blocksPerYear,proto3" json:"blocks_per_year,omitempty" yaml:"blocks_per_year"`_14}
Genesis parameters
The genesis parameters for the mint module outlined in the Genesis Builder Script are as follows:
_15 # Mint: set mint params_15 genesis['app_state']['mint'] = {_15 'minter': {_15 'inflation': '0.070000000000000000',_15 'annual_provisions': '0.000000000000000000'_15 },_15 'params': {_15 'mint_denom': DENOM_LUNA,_15 'inflation_rate_change': '0.000000000000000000',_15 'inflation_max': '0.070000000000000000',_15 'inflation_min': '0.070000000000000000',_15 'goal_bonded': '0.670000000000000000',_15 'blocks_per_year': '4360000'_15 }_15 }