Rewards
module Ledger.Dijkstra.Foreign.Rewards where open import Foreign.Convertible open import Foreign.Convertible.Deriving open import Foreign.HaskellTypes open import Foreign.HaskellTypes.Deriving open import Ledger.Prelude open import Ledger.Prelude.Foreign.HSTypes open import Ledger.Core.Foreign.Address open import Ledger.Dijkstra.Foreign.HSStructures open import Ledger.Dijkstra.Foreign.PParams open import Ledger.Dijkstra.Foreign.Cert open import Ledger.Dijkstra.Specification.Rewards it DummyAbstractFunctions instance HsTy-Snapshot = autoHsType Snapshot ⊣ withConstructor "MkSnapshot" • fieldPrefix "ss" Conv-Snapshot = autoConvert Snapshot HsTy-Snapshots = autoHsType Snapshots ⊣ withConstructor "MkSnapshots" Conv-Snapshots = autoConvert Snapshots record HsRewardUpdate : Type where field Δt Δr Δf : ℤ rs : Stake open import Data.Integer using (ℤ) renaming (+_ to pos; _≤_ to _≤ℤ_) instance iHsTy-ℤ : HasHsType ℤ iHsTy-ℤ = MkHsType ℤ ℤ iConv-ℤ : Convertible ℤ ℤ iConv-ℤ = Convertible-Refl postulate trustMe-flowConservation : ∀ {Δt Δr Δf : ℤ} {rs : Stake} → Δt + Δr + Δf + pos (∑[ c ← rs ] c) ≡ pos 0 trustMe-nonneg : ∀ {x : ℤ} → pos 0 ≤ℤ x trustMe-nonpos : ∀ {x : ℤ} → x ≤ℤ pos 0 private mkHsRewardUpdate : Convertible RewardUpdate HsRewardUpdate mkHsRewardUpdate = λ where .to ru → let module ru = RewardUpdate ru in record { Δt = ru.Δt ; Δr = ru.Δr ; Δf = ru.Δf ; rs = ru.rs } .from ru → let module ru = HsRewardUpdate ru in record { Δt = ru.Δt ; Δr = ru.Δr ; Δf = ru.Δf ; rs = ru.rs ; flowConservation = trustMe-flowConservation {ru.Δt} {ru.Δr} {ru.Δf} {ru.rs} ; Δt-nonnegative = trustMe-nonneg {ru.Δt} ; Δf-nonpositive = trustMe-nonpos {ru.Δf} } instance HsTy-HsRewardUpdate = autoHsType HsRewardUpdate ⊣ withName "RewardUpdate" • withConstructor "MkRewardUpdate" • fieldPrefix "ru" Conv-HsRewardUpdate = autoConvert HsRewardUpdate HsTy-RewardUpdate = MkHsType RewardUpdate (HsType HsRewardUpdate) Conv-RewardUpdate = mkHsRewardUpdate ⨾ Conv-HsRewardUpdate unquoteDecl = do hsTypeAlias BlocksMade ⊣ withName "BlocksMade"