铸造(Mint)

目录

概念

铸币机制

铸币机制的设计目的是:

  • 允许根据市场需求确定灵活的通货膨胀率,目标是特定的质押比例

  • 在市场流动性和质押供应之间实现平衡

为了最佳确定适当的市场通货膨胀奖励率,使用了移动变化率机制。移动变化率机制确保,如果质押的百分比低于或高于目标质押百分比,通货膨胀率会相应调整,以进一步激励或抑制质押。将目标质押百分比设定为低于 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())

参数

铸造模块包含以下参数:

类型
示例

MintDenom

string

"uatom"

InflationRateChange

string (dec)

"0.130000000000000000"

InflationMax

string (dec)

"0.200000000000000000"

InflationMin

string (dec)

"0.070000000000000000"

GoalBonded

string (dec)

"0.670000000000000000"

BlocksPerYear

string (uint64)

"6311520"

事件

铸造模块发出以下事件:

BeginBlocker

类型
属性键
属性值

mint

bonded_ratio

{bondedRatio}

mint

inflation

{inflation}

mint

annual_provisions

{annualProvisions}

mint

amount

{amount}

客户端

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

示例输出:

0.199200302563256955

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"
  }
}

Last updated