Skip to content

JPYC.mint_totalSupply

名称・種別

  • 名称: JPYC.mint_totalSupply
  • 種別: theorem
  • モジュール: JpycFormalVerification.AccessControlTheorems
  • ソース: JpycFormalVerification/AccessControlTheorems.lean:438-444
  • 概要: mint は totalSupply を amount だけ増やす(桁あふれなし)、という定理(効果・供給)。
  • 仕様: 対象

型シグネチャ

lean
∀ {s s' : JPYC.State} {ctx : JPYC.CallContext} {dst : JPYC.Address} {amount : JPYC.U256}, Eq (JPYC.mint s ctx dst amount) (Except.ok s') → Eq (BitVec.toNat s'.totalSupply) (instHAdd.hAdd (BitVec.toNat s.totalSupply) (BitVec.toNat amount))

mint の成功は、総供給を(自然数換算で)ちょうど amount 増やす、という効果定理です。

和訳 docstring

効果(供給)。 minttotalSupplyamount だけ増やす(あふれなし)。

解説

何を述べているか。 mint が成功すると s'.totalSupply.toNat = s.totalSupply.toNat + amount.toNat です。mint_eq が与える add? totalSupply amount = .ok ns から、checked 加算が「あふれずに」成功したこと(add?_toNat)を使います。

直感。 「刷った分だけ、世の中のトークン総量が増える」。add? が成功した時点であふれは起きていないので、 上の素直な足し算として総供給が増えます。

なぜ安全性に効くか。 発行量が記録上ちょうど amount であること(過不足なし)を保証します。mint_conserves の供給保存と組み合わさり、「発行は帳簿の釣り合いを保ったまま総量を増やす」を厳密に示します。

図解

Lean ソースコード

lean
/-- **Effect (supply).** `mint` raises `totalSupply` by `amount` (no overflow). -/
theorem mint_totalSupply {s s' : State} {ctx : CallContext} {dst : Address} {amount : U256}
    (h : mint s ctx dst amount = .ok s') :
    s'.totalSupply.toNat = s.totalSupply.toNat + amount.toNat := by
  obtain ⟨ns, nb, nma, hns, hnb, hnma, rfl⟩ := mint_eq h
  show ns.toNat = s.totalSupply.toNat + amount.toNat
  exact add?_toNat hns

依存