@@ -30,7 +30,8 @@ record StakePoolParams : Type where
3030 cost : Coin
3131 margin : UnitInterval
3232 pledge : Coin
33- rewardAccount : Credential
33+ rewardAccount : RewardAddress
34+ vrf : VRF
3435
3536CCHotKeys : Type
3637CCHotKeys = Credential ⇀ Maybe Credential
@@ -127,8 +128,10 @@ record DelegEnv : Type where
127128 pools : Pools
128129 delegatees : ℙ Credential
129130
130- PoolEnv : Type
131- PoolEnv = PParams
131+ record PoolEnv : Type where
132+ field
133+ epoch : Epoch
134+ pp : PParams
132135
133136record GovCertEnv : Type where
134137 field
@@ -139,6 +142,8 @@ record GovCertEnv : Type where
139142
140143<!--
141144```agda
145+ open StakePoolParams
146+
142147IsConwayCert? : IsConwayCert ⁇¹
143148IsConwayCert? {x} .dec with x
144149... | regdrep _ _ _ = yes tt
@@ -166,6 +171,10 @@ record HasPools {a} (A : Type a) : Type a where
166171 field PoolsOf : A → Pools
167172open HasPools ⦃...⦄ public
168173
174+ record HasFuturePools {a} (A : Type a) : Type a where
175+ field FuturePoolsOf : A → Pools
176+ open HasFuturePools ⦃...⦄ public
177+
169178record HasRetiring {a} (A : Type a) : Type a where
170179 field RetiringOf : A → Retiring
171180open HasRetiring ⦃...⦄ public
@@ -234,6 +243,9 @@ instance
234243 HasPools-PState : HasPools PState
235244 HasPools-PState .PoolsOf = PState.pools
236245
246+ HasFuturePools-PState : HasFuturePools PState
247+ HasFuturePools-PState .FuturePoolsOf = PState.fPools
248+
237249 HasDeposits-PState : HasDeposits PState
238250 HasDeposits-PState .DepositsOf = PState.deposits
239251
@@ -282,12 +294,13 @@ instance
282294 HasEpoch-CertEnv : HasEpoch CertEnv
283295 HasEpoch-CertEnv .EpochOf = CertEnv.epoch
284296
285- unquoteDecl HasCast-CertEnv HasCast-DState HasCast-PState HasCast-GState HasCast-CertState HasCast-DelegEnv HasCast-GovCertEnv = derive-HasCast
297+ unquoteDecl HasCast-CertEnv HasCast-DState HasCast-PState HasCast-GState HasCast-CertState HasCast-DelegEnv HasCast-PoolEnv HasCast- GovCertEnv = derive-HasCast
286298 ( (quote CertEnv , HasCast-CertEnv)
287299 ∷ (quote DState , HasCast-DState)
288300 ∷ (quote PState , HasCast-PState)
289301 ∷ (quote GState , HasCast-GState)
290302 ∷ (quote CertState , HasCast-CertState)
303+ ∷ (quote PoolEnv , HasCast-PoolEnv)
291304 ∷ (quote GovCertEnv , HasCast-GovCertEnv)
292305 ∷ [ (quote DelegEnv , HasCast-DelegEnv) ])
293306
@@ -312,7 +325,7 @@ private variable
312325 mc : Maybe Credential
313326 delegatees : ℙ Credential
314327 dCert : DCert
315- e : Epoch
328+ e e' : Epoch
316329 vs : List GovVote
317330 kh : KeyHash
318331 mkh : Maybe KeyHash
@@ -408,44 +421,53 @@ data _⊢_⇀⦇_,POOL⦈_ : PoolEnv → PState → DCert → PState → Type wh
408421
409422 POOL-reg :
410423 ∙ ¬ (IsPoolRegistered pools kh)
424+ ∙ ¬ (poolParams .vrf ∈ mapˢ vrf (range pools ∪ range fPools))
425+ ∙ NetworkIdOf (poolParams .rewardAccount) ≡ NetworkId
426+ ∙ pp .minPoolCost ≤ poolParams .cost
411427 ────────────────────────────────
412- pp ⊢ ⟦ pools
413- , fPools
414- , retiring
415- , deposits
416- ⟧ ⇀⦇ regpool kh poolParams ,POOL⦈ ⟦
417- pools ∪ˡ ❴ kh , poolParams ❵
418- , fPools
419- , retiring
420- , deposits ∪ˡ ❴ kh , pp .poolDeposit ❵
421- ⟧
428+ ⟦ e , pp ⟧ ⊢ ⟦ pools
429+ , fPools
430+ , retiring
431+ , deposits
432+ ⟧ ⇀⦇ regpool kh poolParams ,POOL⦈ ⟦
433+ pools ∪ˡ ❴ kh , poolParams ❵
434+ , fPools
435+ , retiring
436+ , deposits ∪ˡ ❴ kh , pp .poolDeposit ❵
437+ ⟧
422438
423439 POOL-rereg :
424440 ∙ IsPoolRegistered pools kh
441+ ∙ ¬ (poolParams .vrf ∈ mapˢ vrf (range (pools ∣ ❴ kh ❵ ᶜ) ∪ range (fPools ∣ ❴ kh ❵ ᶜ)))
442+ ∙ NetworkIdOf (poolParams .rewardAccount) ≡ NetworkId
443+ ∙ pp .minPoolCost ≤ poolParams .cost
425444 ────────────────────────────────
426- pp ⊢ ⟦ pools
427- , fPools
428- , retiring
429- , deposits
430- ⟧ ⇀⦇ regpool kh poolParams ,POOL⦈ ⟦
431- pools
432- , ❴ kh , poolParams ❵ ∪ˡ fPools
433- , retiring ∣ ❴ kh ❵ ᶜ
434- , deposits
435- ⟧
445+ ⟦ e , pp ⟧ ⊢ ⟦ pools
446+ , fPools
447+ , retiring
448+ , deposits
449+ ⟧ ⇀⦇ regpool kh poolParams ,POOL⦈ ⟦
450+ pools
451+ , ❴ kh , poolParams ❵ ∪ˡ fPools
452+ , retiring ∣ ❴ kh ❵ ᶜ
453+ , deposits
454+ ⟧
436455
437456 POOL-retirepool :
457+ ∙ IsPoolRegistered pools kh
458+ ∙ e < e'
459+ ∙ e' ≤ e + pp .Emax
438460 ────────────────────────────────
439- pp ⊢ ⟦ pools
440- , fPools
441- , retiring
442- , deposits
443- ⟧ ⇀⦇ retirepool kh e ,POOL⦈ ⟦
444- pools
445- , fPools
446- , ❴ kh , e ❵ ∪ˡ retiring
447- , deposits
448- ⟧
461+ ⟦ e , pp ⟧ ⊢ ⟦ pools
462+ , fPools
463+ , retiring
464+ , deposits
465+ ⟧ ⇀⦇ retirepool kh e' ,POOL⦈ ⟦
466+ pools
467+ , fPools
468+ , ❴ kh , e' ❵ ∪ˡ retiring
469+ , deposits
470+ ⟧
449471```
450472
451473## ` GOVCERT ` {.AgdaDatatype} Transition System
@@ -482,7 +504,7 @@ data _⊢_⇀⦇_,CERT⦈_ : CertEnv → CertState → DCert → CertState →
482504 ⟦ e , pp , cc ⟧ ⊢ ⟦ stᵈ , stᵖ , stᵍ ⟧ ⇀⦇ dCert ,CERT⦈ ⟦ stᵈ' , stᵖ , stᵍ ⟧
483505
484506 CERT-pool :
485- ∙ pp ⊢ stᵖ ⇀⦇ dCert ,POOL⦈ stᵖ'
507+ ∙ ⟦ e , pp ⟧ ⊢ stᵖ ⇀⦇ dCert ,POOL⦈ stᵖ'
486508 ────────────────────────────────
487509 ⟦ e , pp , cc ⟧ ⊢ ⟦ stᵈ , stᵖ , stᵍ ⟧ ⇀⦇ dCert ,CERT⦈ ⟦ stᵈ , stᵖ' , stᵍ ⟧
488510
0 commit comments