目录
概念
铸币机制
铸币机制的设计目的是:
允许根据市场需求确定灵活的通货膨胀率,目标是特定的质押比例
为了最佳确定适当的市场通货膨胀奖励率,使用了移动变化率机制。移动变化率机制确保,如果质押的百分比低于或高于目标质押百分比,通货膨胀率会相应调整,以进一步激励或抑制质押。将目标质押百分比设定为低于 100% 鼓励网络保持一定数量的非质押代币,这有助于提供流动性。
可以按以下方式分解:
如果实际的质押代币百分比低于目标质押百分比,通货膨胀率将增加,直到达到最大值
如果维持目标质押百分比(在 Cosmos-Hub 中为 67%),则通货膨胀率将保持不变
如果实际的质押代币百分比高于目标质押百分比,通货膨胀率将减少,直到达到最小值
状态
Minter
minter
用于存储当前的通货膨胀信息。
Minter: 0x00 -> ProtocolBuffer(minter)
https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/mint/v1beta1/mint.proto#L10-L24
参数
mint
模块使用前缀 0x01
在状态中存储其参数,可以通过治理或具有权限的地址进行更新。
参数: mint/params -> legacy_amino(params)
https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/mint/v1beta1/mint.proto#L26-L59
Begin-Block
铸币参数会在每个区块开始时重新计算,并支付通货膨胀奖励。
通货膨胀率计算
通货膨胀率使用传递给 NewAppModule
函数的 通货膨胀计算函数 进行计算。如果未提供该函数,则使用 SDK 的默认通货膨胀计算函数(NextInflationRate
)。如果需要自定义通货膨胀计算逻辑,可以定义并传递一个符合 InflationCalculationFn
签名的函数。
type InflationCalculationFn func(ctx sdk.Context, minter Minter, params Params, bondedRatio math.LegacyDec) math.LegacyDec
NextInflationRate
目标年度通货膨胀率会在每个区块重新计算。通货膨胀率的变动(增加或减少)取决于当前质押比例与目标比例(67%)之间的差距。最大年度通货膨胀率变动幅度为 13%,但年度通货膨胀率会被限制在 7% 至 20% 之间。
NextInflationRate(params Params, bondedRatio math.LegacyDec) (inflation math.LegacyDec) {
inflationRateChangePerYear = (1 - bondedRatio/params.GoalBonded) * params.InflationRateChange
inflationRateChange = inflationRateChangePerYear/blocksPerYr
// increase the new annual inflation for this next block
inflation += inflationRateChange
if inflation > params.InflationMax {
inflation = params.InflationMax
}
if inflation < params.InflationMin {
inflation = params.InflationMin
}
return inflation
}
NextAnnualProvisions
根据当前的总供应量和通货膨胀率计算年度供应量(annual provisions)。此参数在每个区块计算一次。
NextAnnualProvisions(params Params, totalSupply math.LegacyDec) (provisions math.LegacyDec) {
return Inflation * totalSupply
BlockProvision
根据当前的年度供应量计算每个区块生成的供应量(provisions)。然后,供应量由 mint
模块的 ModuleMinterAccount
铸造,并转移到 auth
模块的 FeeCollector ModuleAccount
。
BlockProvision(params Params) sdk.Coin {
provisionAmt = AnnualProvisions/ params.BlocksPerYear
return sdk.NewCoin(params.MintDenom, provisionAmt.Truncate())
参数
铸造模块包含以下参数:
事件
铸造模块发出以下事件:
BeginBlocker
客户端
CLI
用户可以使用 CLI 查询并与铸造模块进行交互。
Query
查询命令允许用户查询铸造状态。
simd query mint --help
annual-provisions
annual-provisions
命令允许用户查询当前的年度铸造供给值。
simd query mint annual-provisions [flags]
示例:
simd query mint annual-provisions
示例输出:
22268504368893.612100895088410693
inflation
inflation
命令允许用户查询当前的铸造通胀值。
simd query mint inflation [flags]
示例:
simd query mint inflation
示例输出:
params
params
命令允许用户查询当前的铸造参数。
simd query mint params [flags]
示例:
blocks_per_year: "4360000"
goal_bonded: "0.670000000000000000"
inflation_max: "0.200000000000000000"
inflation_min: "0.070000000000000000"
inflation_rate_change: "0.130000000000000000"
mint_denom: stake
gRPC
用户可以使用 gRPC 端点查询铸造模块。
AnnualProvisions
AnnualProvisions
端点允许用户查询当前的年度铸造供给值。
/cosmos.mint.v1beta1.Query/AnnualProvisions
示例:
grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/AnnualProvisions
示例输出:
{
"annualProvisions": "1432452520532626265712995618"
}
Inflation
Inflation
端点允许用户查询当前的铸造通胀值。
/cosmos.mint.v1beta1.Query/Inflation
示例:
grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/Inflation
示例输出:
{
"inflation": "130197115720711261"
}
Params
The Params
端点允许用户查询当前的铸造参数。
/cosmos.mint.v1beta1.Query/Params
示例:
grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/Params
示例输出:
{
"params": {
"mintDenom": "stake",
"inflationRateChange": "130000000000000000",
"inflationMax": "200000000000000000",
"inflationMin": "70000000000000000",
"goalBonded": "670000000000000000",
"blocksPerYear": "6311520"
}
}
REST
用户可以使用 REST 端点查询铸造模块。
annual-provisions
/cosmos/mint/v1beta1/annual_provisions
示例:
curl "localhost:1317/cosmos/mint/v1beta1/annual_provisions"
示例输出:
{
"annualProvisions": "1432452520532626265712995618"
}
inflation
/cosmos/mint/v1beta1/inflation
示例:
curl "localhost:1317/cosmos/mint/v1beta1/inflation"
示例输出:
{
"inflation": "130197115720711261"
}
params
/cosmos/mint/v1beta1/params
示例:
curl "localhost:1317/cosmos/mint/v1beta1/params"
示例输出:
{
"params": {
"mintDenom": "stake",
"inflationRateChange": "130000000000000000",
"inflationMax": "200000000000000000",
"inflationMin": "70000000000000000",
"goalBonded": "670000000000000000",
"blocksPerYear": "6311520"
}
}