11{-# LANGUAGE EmptyCase #-}
22{-# LANGUAGE FlexibleContexts #-}
3+ {-# LANGUAGE FlexibleInstances #-}
34{-# LANGUAGE GADTs #-}
45{-# LANGUAGE RankNTypes #-}
6+ {-# LANGUAGE ScopedTypeVariables #-}
57{-# LANGUAGE StandaloneDeriving #-}
68{-# LANGUAGE TupleSections #-}
9+ {-# LANGUAGE TypeApplications #-}
10+ {-# LANGUAGE TypeFamilies #-}
11+ {-# LANGUAGE TypeOperators #-}
12+ {-# LANGUAGE UndecidableInstances #-}
713
814module Cardano.Api.Experimental.Tx.Internal.Certificate
915 ( Certificate (.. )
@@ -17,22 +23,28 @@ import Cardano.Api.Address qualified as Api
1723import Cardano.Api.Certificate.Internal qualified as Api
1824import Cardano.Api.Era.Internal.Eon.Convert
1925import Cardano.Api.Era.Internal.Eon.ConwayEraOnwards
26+ import Cardano.Api.Era.Internal.Eon.ShelleyBasedEra
2027import Cardano.Api.Era.Internal.Eon.ShelleyToBabbageEra qualified as Api
2128import Cardano.Api.Experimental.Era
2229import Cardano.Api.Experimental.Plutus.Internal.Script qualified as Exp
2330import Cardano.Api.Experimental.Plutus.Internal.ScriptWitness qualified as Exp
2431import Cardano.Api.Experimental.Simple.Script qualified as Exp
2532import Cardano.Api.Experimental.Tx.Internal.AnyWitness
33+ import Cardano.Api.HasTypeProxy
2634import Cardano.Api.Ledger qualified as L
2735import Cardano.Api.Plutus.Internal.Script
2836import Cardano.Api.Plutus.Internal.Script qualified as Api
37+ import Cardano.Api.Serialise.Cbor
38+ import Cardano.Api.Serialise.TextEnvelope.Internal
2939import Cardano.Api.Tx.Internal.Body (TxCertificates (.. ))
3040import Cardano.Api.Tx.Internal.Body qualified as Api
3141
42+ import Cardano.Binary qualified as CBOR
3243import Cardano.Ledger.Allegra.Scripts qualified as L
3344import Cardano.Ledger.Plutus.Language qualified as L
3445import Cardano.Ledger.Plutus.Language qualified as Plutus
3546
47+ import Data.Typeable
3648import GHC.IsList
3749
3850data Certificate era where
@@ -44,6 +56,31 @@ deriving instance Eq (Certificate era)
4456
4557deriving instance Ord (Certificate era )
4658
59+ instance
60+ ( Typeable ledgerera
61+ , IsShelleyBasedEra era
62+ , ShelleyLedgerEra era ~ ledgerera
63+ )
64+ => HasTextEnvelope (Certificate ledgerera )
65+ where
66+ textEnvelopeType _ = " Certificate"
67+
68+ instance Typeable era => HasTypeProxy (Certificate era ) where
69+ data AsType (Certificate era ) = AsCertificate
70+ proxyToAsType _ = AsCertificate
71+
72+ instance
73+ ( Typeable ledgerera
74+ , IsShelleyBasedEra era
75+ , ShelleyLedgerEra era ~ ledgerera
76+ )
77+ => SerialiseAsCBOR (Certificate ledgerera )
78+ where
79+ serialiseToCBOR (Certificate cert) =
80+ CBOR. serialize' cert
81+ deserialiseFromCBOR _ bs =
82+ shelleyBasedEraConstraints (shelleyBasedEra @ era ) $ Certificate <$> CBOR. decodeFull' bs
83+
4784convertToOldApiCertificate :: Era era -> Certificate (LedgerEra era ) -> Api. Certificate era
4885convertToOldApiCertificate ConwayEra (Certificate cert) =
4986 Api. ConwayCertificate ConwayEraOnwardsConway cert
0 commit comments