Skip to content

Commit 3b5428d

Browse files
committed
Implement deserialisePlutusScriptInEra
1 parent d50863b commit 3b5428d

File tree

4 files changed

+50
-20
lines changed

4 files changed

+50
-20
lines changed

cardano-api/src/Cardano/Api/Certificate/Internal.hs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
{-# LANGUAGE StandaloneDeriving #-}
1111
{-# LANGUAGE TypeApplications #-}
1212
{-# LANGUAGE TypeFamilies #-}
13-
{-# LANGUAGE TypeOperators #-}
1413

1514
-- | Certificates embedded in transactions
1615
module Cardano.Api.Certificate.Internal
@@ -105,7 +104,6 @@ import Data.Maybe
105104
import Data.Text (Text)
106105
import Data.Text qualified as Text
107106
import Data.Text.Encoding qualified as Text
108-
import Data.Type.Equality (TestEquality (..))
109107
import Data.Typeable
110108
import GHC.Exts (IsList (..), fromString)
111109
import Network.Socket (PortNumber)
@@ -153,19 +151,19 @@ deriving instance Show (Certificate era)
153151
-- testEquality ShelleyRelatedCertificate{} ConwayCertificate{} = Nothing
154152
-- testEquality ConwayCertificate{} ShelleyRelatedCertificate{} = Nothing
155153

156-
conwayCertTypeEquality
157-
:: (Typeable eraA, Typeable eraB)
158-
=> Ledger.ConwayTxCert (ShelleyLedgerEra eraA)
159-
-> Ledger.ConwayTxCert (ShelleyLedgerEra eraB)
160-
-> Maybe (eraA :~: eraB)
161-
conwayCertTypeEquality _ _ = eqT
162-
163-
shelleyCertTypeEquality
164-
:: (Typeable eraA, Typeable eraB)
165-
=> Ledger.ShelleyTxCert (ShelleyLedgerEra eraA)
166-
-> Ledger.ShelleyTxCert (ShelleyLedgerEra eraB)
167-
-> Maybe (eraA :~: eraB)
168-
shelleyCertTypeEquality _ _ = eqT
154+
-- conwayCertTypeEquality
155+
-- :: (Typeable eraA, Typeable eraB)
156+
-- => Ledger.ConwayTxCert (ShelleyLedgerEra eraA)
157+
-- -> Ledger.ConwayTxCert (ShelleyLedgerEra eraB)
158+
-- -> Maybe (eraA :~: eraB)
159+
-- conwayCertTypeEquality _ _ = eqT
160+
--
161+
-- shelleyCertTypeEquality
162+
-- :: (Typeable eraA, Typeable eraB)
163+
-- => Ledger.ShelleyTxCert (ShelleyLedgerEra eraA)
164+
-- -> Ledger.ShelleyTxCert (ShelleyLedgerEra eraB)
165+
-- -> Maybe (eraA :~: eraB)
166+
-- shelleyCertTypeEquality _ _ = eqT
169167

170168
instance Typeable era => HasTypeProxy (Certificate era) where
171169
data AsType (Certificate era) = AsCertificate

cardano-api/src/Cardano/Api/Experimental/Plutus.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module Cardano.Api.Experimental.Plutus
22
( -- * Plutus Script
33
PlutusScriptInEra (..)
4+
, deserialisePlutusScriptInEra
45
, plutusScriptInEraLanguage
56
, plutusScriptInEraSLanguage
67
, plutusScriptInEraToScript

cardano-api/src/Cardano/Api/Experimental/Plutus/Internal/Script.hs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
{-# LANGUAGE DataKinds #-}
22
{-# LANGUAGE FlexibleContexts #-}
3+
{-# LANGUAGE FlexibleInstances #-}
34
{-# LANGUAGE GADTs #-}
45
{-# LANGUAGE RankNTypes #-}
56
{-# LANGUAGE ScopedTypeVariables #-}
67
{-# LANGUAGE StandaloneDeriving #-}
78
{-# LANGUAGE TypeApplications #-}
89
{-# LANGUAGE TypeFamilies #-}
9-
{-# LANGUAGE UndecidableInstances #-}
1010

1111
module Cardano.Api.Experimental.Plutus.Internal.Script
1212
( PlutusScriptInEra (..)
1313
, PlutusScriptOrReferenceInput (..)
14+
, HasTypeProxy (..)
15+
, deserialisePlutusScriptInEra
1416
, plutusScriptInEraLanguage
1517
, plutusScriptInEraSLanguage
1618
, plutusScriptInEraToScript
@@ -30,6 +32,7 @@ import Cardano.Ledger.Plutus.Language (PlutusRunnable)
3032
import Cardano.Ledger.Plutus.Language qualified as L
3133
import Cardano.Ledger.Plutus.Language qualified as Plutus
3234

35+
import Data.ByteString qualified as BS
3336
import Data.ByteString.Lazy qualified as LBS
3437
import Data.ByteString.Short qualified as SBS
3538
import Data.Text qualified as Text
@@ -59,12 +62,15 @@ deriving instance Show (PlutusScriptInEra lang era)
5962

6063
deriving instance Eq (PlutusScriptInEra lang era)
6164

62-
instance (Typeable era, Typeable lang) => HasTypeProxy (PlutusScriptInEra lang era) where
63-
data AsType (PlutusScriptInEra lang era) = AsPlutusScriptInEra
64-
proxyToAsType _ = AsPlutusScriptInEra
65+
instance
66+
(Typeable era, Typeable lang, HasTypeProxy (Plutus.SLanguage lang))
67+
=> HasTypeProxy (PlutusScriptInEra lang era)
68+
where
69+
data AsType (PlutusScriptInEra lang era) = AsPlutusScriptInEra (AsType (L.SLanguage lang))
70+
proxyToAsType _ = AsPlutusScriptInEra (proxyToAsType (Proxy @(L.SLanguage lang)))
6571

6672
instance
67-
(Plutus.PlutusLanguage lang, L.Era era)
73+
(Plutus.PlutusLanguage lang, L.Era era, HasTypeProxy (Plutus.SLanguage lang))
6874
=> HasTextEnvelope (PlutusScriptInEra lang era)
6975
where
7076
textEnvelopeType _ =
@@ -79,6 +85,7 @@ instance
7985
, Typeable era
8086
, Typeable lang
8187
, Plutus.PlutusLanguage lang
88+
, HasTypeProxy (Plutus.SLanguage lang)
8289
)
8390
=> SerialiseAsCBOR (PlutusScriptInEra (lang :: L.Language) era)
8491
where
@@ -97,6 +104,13 @@ instance
97104
CBOR.DecoderErrorCustom "PlutusLedgerApi.Common.ScriptDecodeError" (Text.pack . show $ pretty e)
98105
Right s -> Right $ PlutusScriptInEra s
99106

107+
deserialisePlutusScriptInEra
108+
:: forall era lang
109+
. (L.Era era, Plutus.PlutusLanguage lang, HasTypeProxy (Plutus.SLanguage lang))
110+
=> L.SLanguage lang -> BS.ByteString -> Either CBOR.DecoderError (PlutusScriptInEra lang era)
111+
deserialisePlutusScriptInEra _ bs =
112+
deserialiseFromCBOR (AsPlutusScriptInEra (proxyToAsType (Proxy @(L.SLanguage lang)))) bs
113+
100114
plutusScriptInEraSLanguage
101115
:: forall lang era. L.PlutusLanguage lang => PlutusScriptInEra lang era -> L.SLanguage lang
102116
plutusScriptInEraSLanguage (PlutusScriptInEra _) =

cardano-api/src/Cardano/Api/Internal/Orphans/Serialisation.hs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import Cardano.Ledger.HKD (NoUpdate (..))
6767
import Cardano.Ledger.Hashes qualified as L hiding (KeyHash)
6868
import Cardano.Ledger.Keys qualified as L.Keys
6969
import Cardano.Ledger.Mary.Value qualified as L
70+
import Cardano.Ledger.Plutus.Language qualified as L
7071
import Cardano.Ledger.Shelley.API.Mempool qualified as L
7172
import Cardano.Ledger.Shelley.PParams qualified as Ledger
7273
import Cardano.Ledger.Shelley.Rules qualified as L
@@ -470,3 +471,19 @@ instance SerialiseAsRawBytes L.GovActionId where
470471
L.GovActionId . toShelleyTxId
471472
<$> deserialiseFromRawBytes AsTxId txIdBs
472473
<*> deserialiseFromRawBytes AsGovActionIx index
474+
475+
instance HasTypeProxy (L.SLanguage L.PlutusV1) where
476+
data AsType (L.SLanguage L.PlutusV1) = AsPlutusScriptV1
477+
proxyToAsType _ = AsPlutusScriptV1
478+
479+
instance HasTypeProxy (L.SLanguage L.PlutusV2) where
480+
data AsType (L.SLanguage L.PlutusV2) = AsPlutusScriptV2
481+
proxyToAsType _ = AsPlutusScriptV2
482+
483+
instance HasTypeProxy (L.SLanguage L.PlutusV3) where
484+
data AsType (L.SLanguage L.PlutusV3) = AsPlutusScriptV3
485+
proxyToAsType _ = AsPlutusScriptV3
486+
487+
instance HasTypeProxy (L.SLanguage L.PlutusV4) where
488+
data AsType (L.SLanguage L.PlutusV4) = AsPlutusScriptV4
489+
proxyToAsType _ = AsPlutusScriptV4

0 commit comments

Comments
 (0)