diff --git a/hydra-cardano-api/hydra-cardano-api.cabal b/hydra-cardano-api/hydra-cardano-api.cabal index eb6c57e0cb0..a5b20e8e689 100644 --- a/hydra-cardano-api/hydra-cardano-api.cabal +++ b/hydra-cardano-api/hydra-cardano-api.cabal @@ -95,6 +95,7 @@ library , cardano-ledger-alonzo >=1.6 && <1.7 , cardano-ledger-api >=1.8 && <1.9 , cardano-ledger-babbage >=1.6 && <1.7 + , cardano-ledger-conway >=1.12 && <1.13 , cardano-ledger-binary >=1.3 && <1.4 , cardano-ledger-byron >=1.0.0 && <1.1 , cardano-ledger-core >=1.10 && <1.11 diff --git a/hydra-cardano-api/src/Hydra/Cardano/Api/PlutusScript.hs b/hydra-cardano-api/src/Hydra/Cardano/Api/PlutusScript.hs index 14a6038a204..f58baeda438 100644 --- a/hydra-cardano-api/src/Hydra/Cardano/Api/PlutusScript.hs +++ b/hydra-cardano-api/src/Hydra/Cardano/Api/PlutusScript.hs @@ -5,7 +5,7 @@ module Hydra.Cardano.Api.PlutusScript where import Hydra.Cardano.Api.Prelude import Cardano.Ledger.Alonzo.Scripts qualified as Ledger -import Cardano.Ledger.Babbage.Scripts qualified as Ledger +import Cardano.Ledger.Conway.Scripts qualified as Ledger import Cardano.Ledger.Plutus.Language qualified as Ledger import Data.ByteString.Short qualified as SBS import PlutusLedgerApi.Common qualified as Plutus @@ -29,17 +29,31 @@ fromLedgerScript = \case Ledger.TimelockScript{} -> error "fromLedgerScript: TimelockScript" Ledger.PlutusScript x -> Ledger.withPlutusScript x (\(Ledger.Plutus (Ledger.PlutusBinary bytes)) -> PlutusScriptSerialised bytes) --- | Convert a cardano-api 'PlutusScript' into a cardano-ledger 'Script'. -toLedgerScript :: - forall lang. - IsPlutusScriptLanguage lang => - PlutusScript lang -> - Ledger.AlonzoScript (ShelleyLedgerEra Era) -toLedgerScript (PlutusScriptSerialised bytes) = - Ledger.PlutusScript $ case plutusScriptVersion @lang of - PlutusScriptV1 -> Ledger.BabbagePlutusV1 $ Ledger.Plutus (Ledger.PlutusBinary bytes) - PlutusScriptV2 -> Ledger.BabbagePlutusV2 $ Ledger.Plutus (Ledger.PlutusBinary bytes) - PlutusScriptV3 -> error "toLedgerScript: PlutusV3 not supported in Babbage" +class ToAlonzoScript lang era where + toLedgerScript :: + IsPlutusScriptLanguage lang => + PlutusScript lang -> + Ledger.AlonzoScript (ShelleyLedgerEra era) + +instance ToAlonzoScript PlutusScriptV1 BabbageEra where + toLedgerScript (PlutusScriptSerialised bytes) = + Ledger.PlutusScript $ Ledger.BabbagePlutusV1 $ Ledger.Plutus (Ledger.PlutusBinary bytes) + +instance ToAlonzoScript PlutusScriptV2 BabbageEra where + toLedgerScript (PlutusScriptSerialised bytes) = + Ledger.PlutusScript $ Ledger.BabbagePlutusV2 $ Ledger.Plutus (Ledger.PlutusBinary bytes) + +instance ToAlonzoScript PlutusScriptV1 ConwayEra where + toLedgerScript (PlutusScriptSerialised bytes) = + Ledger.PlutusScript $ Ledger.ConwayPlutusV1 $ Ledger.Plutus (Ledger.PlutusBinary bytes) + +instance ToAlonzoScript PlutusScriptV2 ConwayEra where + toLedgerScript (PlutusScriptSerialised bytes) = + Ledger.PlutusScript $ Ledger.ConwayPlutusV2 $ Ledger.Plutus (Ledger.PlutusBinary bytes) + +instance ToAlonzoScript PlutusScriptV3 ConwayEra where + toLedgerScript (PlutusScriptSerialised bytes) = + Ledger.PlutusScript $ Ledger.ConwayPlutusV3 $ Ledger.Plutus (Ledger.PlutusBinary bytes) -- | Convert a serialized plutus script into a cardano-api 'PlutusScript'. fromPlutusScript :: Plutus.SerialisedScript -> PlutusScript lang