11open import Data.Char.Base as C using (Char)
22import Data.String as S
3- open import Data.Fin using (Fin; toℕ; zero)
3+ open import Data.Fin using (Fin; toℕ; zero; #_ )
44open import Data.Integer using (+_; ∣_∣)
55
66open import Class.Convertible
@@ -9,7 +9,8 @@ open import Tactic.Derive.Convertible
99open import Tactic.Derive.HsType
1010
1111open import Leios.Prelude
12- open import Leios.Foreign.Defaults renaming (EndorserBlock to EndorserBlockAgda; IBHeader to IBHeaderAgda)
12+ open import Leios.Foreign.Defaults
13+ renaming (EndorserBlock to EndorserBlockAgda; IBHeader to IBHeaderAgda) -- LeiosState to LeiosStateAgda)
1314open import Leios.Foreign.BaseTypes
1415open import Leios.Foreign.HSTypes
1516open import Leios.Foreign.Util
@@ -31,8 +32,8 @@ instance
3132 Conv-SlotUpkeep = autoConvert SlotUpkeep
3233
3334record IBHeader : Type where
34- field slotNumber : ℤ
35- producerID : ℤ
35+ field slotNumber : ℕ
36+ producerID : ℕ
3637 bodyHash : String
3738
3839{-# FOREIGN GHC
@@ -46,10 +47,12 @@ instance
4647 HsTy-IBHeader = MkHsType IBHeaderAgda IBHeader
4748 Conv-IBHeader : Convertible IBHeaderAgda IBHeader
4849 Conv-IBHeader = record
49- { to = λ (record { slotNumber = sl ; producerID = pid ; bodyHash = h }) →
50- record { slotNumber = + sl ; producerID = + toℕ pid ; bodyHash = h}
51- ; from = λ (record { slotNumber = sl ; producerID = pid ; bodyHash = h }) →
52- record { slotNumber = ∣ sl ∣ ; producerID = zero ; lotteryPf = tt ; bodyHash = h ; signature = tt }
50+ { to = λ (record { slotNumber = s ; producerID = p ; bodyHash = h }) →
51+ record { slotNumber = s ; producerID = toℕ p ; bodyHash = h}
52+ ; from = λ (record { slotNumber = s ; producerID = p ; bodyHash = h }) →
53+ case p <? numberOfParties of λ where
54+ (yes q) → record { slotNumber = s ; producerID = #_ p {numberOfParties} {fromWitness q} ; lotteryPf = tt ; bodyHash = h ; signature = tt }
55+ (no _) → error "Conversion to Fin not possible!"
5356 }
5457
5558 HsTy-IBBody = autoHsType IBBody
@@ -58,21 +61,12 @@ instance
5861 HsTy-InputBlock = autoHsType InputBlock
5962 Conv-InputBlock = autoConvert InputBlock
6063
61- HsTy-Fin = MkHsType PoolID ℕ
62-
63- Conv-Fin : HsConvertible PoolID
64- Conv-Fin =
65- record
66- { to = Data.Fin.toℕ
67- ; from = λ _ → zero
68- }
69-
7064 Conv-ℕ : HsConvertible ℕ
7165 Conv-ℕ = Convertible-Refl
7266
7367record EndorserBlock : Type where
74- field slotNumber : ℤ
75- producerID : ℤ
68+ field slotNumber : ℕ
69+ producerID : ℕ
7670 ibRefs : List String
7771
7872{-# FOREIGN GHC
@@ -89,25 +83,39 @@ instance
8983 Conv-EndorserBlock : Convertible EndorserBlockAgda EndorserBlock
9084 Conv-EndorserBlock =
9185 record
92- { to = λ (record { slotNumber = sl ; producerID = pid ; ibRefs = refs }) →
93- record { slotNumber = + sl ; producerID = + toℕ pid ; ibRefs = refs }
94- ; from = λ (record { slotNumber = sl ; producerID = pid ; ibRefs = refs }) →
95- record { slotNumber = ∣ sl ∣ ; producerID = zero ; ibRefs = refs ; ebRefs = [] ; lotteryPf = tt ; signature = tt }
86+ { to = λ (record { slotNumber = s ; producerID = p ; ibRefs = refs }) →
87+ record { slotNumber = s ; producerID = toℕ p ; ibRefs = refs }
88+ ; from = λ (record { slotNumber = s ; producerID = p ; ibRefs = refs }) →
89+ case p <? numberOfParties of λ where
90+ (yes q) → record { slotNumber = s ; producerID = #_ p {numberOfParties} {fromWitness q} ; lotteryPf = tt ; signature = tt ; ibRefs = refs ; ebRefs = [] }
91+ (no _) → error "Conversion to Fin not possible!"
9692 }
9793
98- Listable-Fin : Listable (Fin 1 )
94+ Listable-Fin : Listable (Fin numberOfParties )
9995 Listable-Fin =
10096 record
10197 { listing = singleton zero
10298 ; complete = λ {a} → (Equivalence.to ∈-singleton) a≡zero
10399 }
104100 where
105- a≡zero : ∀ {a : Fin 1 } → a ≡ zero
101+ a≡zero : ∀ {a : Fin numberOfParties } → a ≡ zero
106102 a≡zero {zero} = refl
107103
108104 HsTy-FFDState = autoHsType FFDState
109105 Conv-FFDState = autoConvert FFDState
110106
107+ HsTy-Fin = MkHsType (Fin numberOfParties) ℕ
108+
109+ Conv-Fin : HsConvertible (Fin numberOfParties)
110+ Conv-Fin =
111+ record
112+ { to = Data.Fin.toℕ
113+ ; from = λ p →
114+ case p <? numberOfParties of λ where
115+ (yes q) → #_ p {numberOfParties} {fromWitness q}
116+ (no _) → error "Conversion to Fin not possible!"
117+ }
118+
111119 HsTy-LeiosState = autoHsType LeiosState
112120 Conv-LeiosState = autoConvert LeiosState
113121
0 commit comments