Skip to content

鑄幣

概念

鑄幣機制

鑄幣機制的設計目的是:

  • 允許通過市場需求確定特定擔保股權比率的靈活通脹率。
  • 在市場流動性和抵押供應之間實現平衡。

為了最好地確定通脹獎勵的適當市場利率,使用了移動變動率。 移動變動率機制確保,如果擔保比例高於或低於目標擔保比例,通脹率將相應地進行調整,以進一步激勵或抑制擔保。 將目標擔保比例設定為低於100%,鼓勵網絡保留一些非抵押代幣,這應有助於提供一定的流動性。

它可以分解成以下方式:

  • 如果通脹率低於目標百分比擔保率,通脹率將持續上升,直至達到最大值。
  • 如果維持目標擔保比例(在DST中為67%),那麼通脹率將保持不變。
  • 如果通脹率高於目標百分比擔保率,通脹率將持續下降,直至達到最小值。

狀態

Minter

minter 是用於存放當前通脹信息的空間。

  • Minter: 0x00 -> ProtocolBuffer(minter)

+++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc7/proto/cosmos/mint/v1beta1/mint.proto#L8-L19

Params

鑄造參數保存在全局參數存儲中。

  • Params: mint/params -> legacy_amino(params)

+++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc7/proto/cosmos/mint/v1beta1/mint.proto#L21-L53

Begin-Block

在每個區塊開始時,鑄幣參數將被重新計算,並支付通脹。

NextInflationRate

目標年通脹率在每個區塊中都會重新計算。 通脹率也會根據與期望比例(67%)的距離而發生變化(正向或負向)。 可能的最大變化率被定義為每年13%,但年通脹率被限制在7%到20%之間。

NextInflationRate(params Params, bondedRatio sdk.Dec) (inflation sdk.Dec) {
    inflationRateChangePerYear = (1 - bondedRatio/params.GoalBonded) * params.InflationRateChange
    inflationRateChange = inflationRateChangePerYear/blocksPerYr

    // increase the new annual inflation for this next cycle
    inflation += inflationRateChange
    if inflation > params.InflationMax {
        inflation = params.InflationMax
    }
    if inflation < params.InflationMin {
        inflation = params.InflationMin
    }

    return inflation
}

NextAnnualProvisions(下一年度供應量)

要根據當前總供應量和通脹率計算年度供應量,可以使用以下公式。請注意,這個參數每個區塊只計算一次。

NextAnnualProvisions(params Params, totalSupply sdk.Dec) (provisions sdk.Dec) {
    return Inflation * totalSupply

BlockProvision(每個區塊的貨幣供應量)

根據當前年度供應量計算每個區塊所生成的供應量。 供應量隨後由 mint 模組的 ModuleMinterAccount 鑄造,然後轉移到 auth 的 FeeCollector ModuleAccount。

BlockProvision(params Params) sdk.Coin {
    provisionAmt = AnnualProvisions/ params.BlocksPerYear
    return sdk.NewCoin(params.MintDenom, provisionAmt.Truncate())

Parameters(參數)

鑄幣模組包含以下參數:

Key Type Example
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"

Events(事件)

鑄幣模組會發出以下事件:

BeginBlocker

Type Attribute Key Attribute Value
mint bonded_ratio {bondedRatio}
mint inflation {inflation}
mint annual_provisions {annualProvisions}
mint amount {amount}

客戶端

CLI

用戶可以使用命令列界面(CLI)查詢和與 mint 模組進行互動。

查詢

query 命令允許用戶查詢 mint 的狀態。

stcd query mint --help

annual-provisions(年度供應量)

annual-provisions 命令允許用戶查詢當前鑄幣年度供應量值。

stcd query mint annual-provisions [flags]

範例:

stcd query mint annual-provisions

範例輸出:

22268504368893.612100895088410693

通脹率

inflation 命令允許用戶查詢當前鑄幣通脹率值。

stcd query mint inflation [flags]

範例:

stcd query mint inflation

範例輸出:

0.199200302563256955

params(參數)

params 命令允許用戶查詢當前鑄幣參數。

stcd 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 端點查詢 mint 模塊。

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

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 端點查詢 mint 模塊。

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