10
10
{-# LANGUAGE StandaloneDeriving #-}
11
11
{-# LANGUAGE TypeApplications #-}
12
12
{-# LANGUAGE TypeFamilies #-}
13
+ {-# LANGUAGE TypeOperators #-}
13
14
14
15
-- | Certificates embedded in transactions
15
16
module Cardano.Api.Internal.Certificate
@@ -111,6 +112,7 @@ import Data.Maybe
111
112
import Data.Text (Text )
112
113
import Data.Text qualified as Text
113
114
import Data.Text.Encoding qualified as Text
115
+ import Data.Type.Equality (TestEquality (.. ))
114
116
import Data.Typeable
115
117
import GHC.Exts (IsList (.. ), fromString )
116
118
import Network.Socket (PortNumber )
@@ -129,13 +131,15 @@ data Certificate era where
129
131
-- 6. Genesis delegation
130
132
-- 7. MIR certificates
131
133
ShelleyRelatedCertificate
132
- :: ShelleyToBabbageEra era
134
+ :: Typeable era
135
+ => ShelleyToBabbageEra era
133
136
-> Ledger. ShelleyTxCert (ShelleyLedgerEra era )
134
137
-> Certificate era
135
138
-- Conway onwards
136
139
-- TODO: Add comments about the new types of certificates
137
140
ConwayCertificate
138
- :: ConwayEraOnwards era
141
+ :: Typeable era
142
+ => ConwayEraOnwards era
139
143
-> Ledger. ConwayTxCert (ShelleyLedgerEra era )
140
144
-> Certificate era
141
145
deriving anyclass SerialiseAsCBOR
@@ -146,6 +150,27 @@ deriving instance Ord (Certificate era)
146
150
147
151
deriving instance Show (Certificate era )
148
152
153
+ instance TestEquality Certificate where
154
+ testEquality (ShelleyRelatedCertificate _ c) (ShelleyRelatedCertificate _ c') =
155
+ shelleyCertTypeEquality c c'
156
+ testEquality (ConwayCertificate _ c) (ConwayCertificate _ c') =
157
+ conwayCertTypeEquality c c'
158
+ testEquality _ _ = Nothing
159
+
160
+ conwayCertTypeEquality
161
+ :: (Typeable eraA , Typeable eraB )
162
+ => Ledger. ConwayTxCert (ShelleyLedgerEra eraA )
163
+ -> Ledger. ConwayTxCert (ShelleyLedgerEra eraB )
164
+ -> Maybe (eraA :~: eraB )
165
+ conwayCertTypeEquality _ _ = eqT
166
+
167
+ shelleyCertTypeEquality
168
+ :: (Typeable eraA , Typeable eraB )
169
+ => Ledger. ShelleyTxCert (ShelleyLedgerEra eraA )
170
+ -> Ledger. ShelleyTxCert (ShelleyLedgerEra eraB )
171
+ -> Maybe (eraA :~: eraB )
172
+ shelleyCertTypeEquality _ _ = eqT
173
+
149
174
instance Typeable era => HasTypeProxy (Certificate era ) where
150
175
data AsType (Certificate era ) = AsCertificate
151
176
proxyToAsType _ = AsCertificate
@@ -373,7 +398,8 @@ data GenesisKeyDelegationRequirements era where
373
398
-> Hash VrfKey
374
399
-> GenesisKeyDelegationRequirements era
375
400
376
- makeGenesisKeyDelegationCertificate :: GenesisKeyDelegationRequirements era -> Certificate era
401
+ makeGenesisKeyDelegationCertificate
402
+ :: Typeable era => GenesisKeyDelegationRequirements era -> Certificate era
377
403
makeGenesisKeyDelegationCertificate
378
404
( GenesisKeyDelegationRequirements
379
405
atMostEra
@@ -394,7 +420,7 @@ data MirCertificateRequirements era where
394
420
-> MirCertificateRequirements era
395
421
396
422
makeMIRCertificate
397
- :: ()
423
+ :: Typeable era
398
424
=> MirCertificateRequirements era
399
425
-> Certificate era
400
426
makeMIRCertificate (MirCertificateRequirements atMostEra mirPot mirTarget) =
@@ -410,7 +436,7 @@ data DRepRegistrationRequirements era where
410
436
-> DRepRegistrationRequirements era
411
437
412
438
makeDrepRegistrationCertificate
413
- :: ()
439
+ :: Typeable era
414
440
=> DRepRegistrationRequirements era
415
441
-> Maybe (Ledger. Anchor (EraCrypto (ShelleyLedgerEra era )))
416
442
-> Certificate era
@@ -427,7 +453,7 @@ data CommitteeHotKeyAuthorizationRequirements era where
427
453
-> CommitteeHotKeyAuthorizationRequirements era
428
454
429
455
makeCommitteeHotKeyAuthorizationCertificate
430
- :: ()
456
+ :: Typeable era
431
457
=> CommitteeHotKeyAuthorizationRequirements era
432
458
-> Certificate era
433
459
makeCommitteeHotKeyAuthorizationCertificate (CommitteeHotKeyAuthorizationRequirements cOnwards coldKeyCredential hotKeyCredential) =
@@ -443,7 +469,7 @@ data CommitteeColdkeyResignationRequirements era where
443
469
-> CommitteeColdkeyResignationRequirements era
444
470
445
471
makeCommitteeColdkeyResignationCertificate
446
- :: ()
472
+ :: Typeable era
447
473
=> CommitteeColdkeyResignationRequirements era
448
474
-> Certificate era
449
475
makeCommitteeColdkeyResignationCertificate (CommitteeColdkeyResignationRequirements cOnwards coldKeyCred anchor) =
@@ -461,7 +487,7 @@ data DRepUnregistrationRequirements era where
461
487
-> DRepUnregistrationRequirements era
462
488
463
489
makeDrepUnregistrationCertificate
464
- :: ()
490
+ :: Typeable era
465
491
=> DRepUnregistrationRequirements era
466
492
-> Certificate era
467
493
makeDrepUnregistrationCertificate (DRepUnregistrationRequirements conwayOnwards vcred deposit) =
@@ -488,7 +514,8 @@ data DRepUpdateRequirements era where
488
514
-> DRepUpdateRequirements era
489
515
490
516
makeDrepUpdateCertificate
491
- :: DRepUpdateRequirements era
517
+ :: Typeable era
518
+ => DRepUpdateRequirements era
492
519
-> Maybe (Ledger. Anchor (EraCrypto (ShelleyLedgerEra era )))
493
520
-> Certificate era
494
521
makeDrepUpdateCertificate (DRepUpdateRequirements conwayOnwards vcred) mAnchor =
0 commit comments