Skip to content

Commit 2fc3af8

Browse files
author
Robert 'Probie' Offner
committed
Downgrade SimpleScripts to lowest possible version
1 parent 163b02d commit 2fc3af8

File tree

1 file changed

+40
-16
lines changed

1 file changed

+40
-16
lines changed

cardano-api/src/Cardano/Api/Script.hs

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
{-# LANGUAGE DeriveAnyClass #-}
22
{-# LANGUAGE DerivingVia #-}
3+
{-# LANGUAGE FlexibleContexts #-}
34
{-# LANGUAGE FlexibleInstances #-}
45
{-# LANGUAGE GADTs #-}
56
{-# LANGUAGE LambdaCase #-}
7+
{-# LANGUAGE MultiParamTypeClasses #-}
68
{-# LANGUAGE NamedFieldPuns #-}
79
{-# LANGUAGE RankNTypes #-}
810
{-# LANGUAGE ScopedTypeVariables #-}
911
{-# LANGUAGE StandaloneDeriving #-}
1012
{-# LANGUAGE TypeApplications #-}
1113
{-# LANGUAGE TypeFamilies #-}
14+
{-# LANGUAGE UndecidableInstances #-}
1215

1316
{- HLINT ignore "Avoid lambda using `infix`" -}
1417
{- HLINT ignore "Use section" -}
@@ -1168,23 +1171,15 @@ fromShelleyBasedScript :: ShelleyBasedEra era
11681171
fromShelleyBasedScript era script =
11691172
case era of
11701173
ShelleyBasedEraShelley ->
1171-
ScriptInEra SimpleScriptV1InShelley $
1172-
SimpleScript SimpleScriptV1 $
1173-
fromShelleyMultiSig script
1174+
minimumShelleySimpleScriptVersion @ShelleyEra @SimpleScriptV1 (fromShelleyMultiSig script)
11741175
ShelleyBasedEraAllegra ->
1175-
ScriptInEra SimpleScriptV2InAllegra $
1176-
SimpleScript SimpleScriptV2 $
1177-
fromAllegraTimelock TimeLocksInSimpleScriptV2 script
1176+
minimumShelleySimpleScriptVersion (fromAllegraTimelock TimeLocksInSimpleScriptV2 script)
11781177
ShelleyBasedEraMary ->
1179-
ScriptInEra SimpleScriptV2InMary $
1180-
SimpleScript SimpleScriptV2 $
1181-
fromAllegraTimelock TimeLocksInSimpleScriptV2 script
1178+
minimumShelleySimpleScriptVersion (fromAllegraTimelock TimeLocksInSimpleScriptV2 script)
11821179
ShelleyBasedEraAlonzo ->
11831180
case script of
11841181
Alonzo.TimelockScript s ->
1185-
ScriptInEra SimpleScriptV2InAlonzo $
1186-
SimpleScript SimpleScriptV2 $
1187-
fromAllegraTimelock TimeLocksInSimpleScriptV2 s
1182+
minimumShelleySimpleScriptVersion (fromAllegraTimelock TimeLocksInSimpleScriptV2 s)
11881183
Alonzo.PlutusScript Alonzo.PlutusV1 s ->
11891184
ScriptInEra PlutusScriptV1InAlonzo $
11901185
PlutusScript PlutusScriptV1 $
@@ -1194,9 +1189,7 @@ fromShelleyBasedScript era script =
11941189
ShelleyBasedEraBabbage ->
11951190
case script of
11961191
Alonzo.TimelockScript s ->
1197-
ScriptInEra SimpleScriptV2InBabbage $
1198-
SimpleScript SimpleScriptV2 $
1199-
fromAllegraTimelock TimeLocksInSimpleScriptV2 s
1192+
minimumShelleySimpleScriptVersion (fromAllegraTimelock TimeLocksInSimpleScriptV2 s)
12001193
Alonzo.PlutusScript Alonzo.PlutusV1 s ->
12011194
ScriptInEra PlutusScriptV1InBabbage $
12021195
PlutusScript PlutusScriptV1 $
@@ -1206,7 +1199,38 @@ fromShelleyBasedScript era script =
12061199
PlutusScript PlutusScriptV2 $
12071200
PlutusScriptSerialised s
12081201

1209-
1202+
class SimpleScriptInEra era lang where
1203+
simpleScriptInEra :: SimpleScript lang -> ScriptInEra era
1204+
1205+
instance SimpleScriptInEra ShelleyEra SimpleScriptV1 where
1206+
simpleScriptInEra = ScriptInEra SimpleScriptV1InShelley . SimpleScript SimpleScriptV1
1207+
instance SimpleScriptInEra AllegraEra SimpleScriptV1 where
1208+
simpleScriptInEra = ScriptInEra SimpleScriptV1InAllegra . SimpleScript SimpleScriptV1
1209+
instance SimpleScriptInEra AllegraEra SimpleScriptV2 where
1210+
simpleScriptInEra = ScriptInEra SimpleScriptV2InAllegra . SimpleScript SimpleScriptV2
1211+
instance SimpleScriptInEra MaryEra SimpleScriptV1 where
1212+
simpleScriptInEra = ScriptInEra SimpleScriptV1InMary . SimpleScript SimpleScriptV1
1213+
instance SimpleScriptInEra MaryEra SimpleScriptV2 where
1214+
simpleScriptInEra = ScriptInEra SimpleScriptV2InMary . SimpleScript SimpleScriptV2
1215+
instance SimpleScriptInEra AlonzoEra SimpleScriptV1 where
1216+
simpleScriptInEra = ScriptInEra SimpleScriptV1InAlonzo . SimpleScript SimpleScriptV1
1217+
instance SimpleScriptInEra AlonzoEra SimpleScriptV2 where
1218+
simpleScriptInEra = ScriptInEra SimpleScriptV2InAlonzo . SimpleScript SimpleScriptV2
1219+
instance SimpleScriptInEra BabbageEra SimpleScriptV1 where
1220+
simpleScriptInEra = ScriptInEra SimpleScriptV1InBabbage . SimpleScript SimpleScriptV1
1221+
instance SimpleScriptInEra BabbageEra SimpleScriptV2 where
1222+
simpleScriptInEra = ScriptInEra SimpleScriptV2InBabbage . SimpleScript SimpleScriptV2
1223+
1224+
class MinimumShelleySimpleScriptVersion era lang where
1225+
minimumShelleySimpleScriptVersion :: SimpleScript lang -> ScriptInEra era
1226+
1227+
instance (SimpleScriptInEra era SimpleScriptV1) => MinimumShelleySimpleScriptVersion era SimpleScriptV1 where
1228+
minimumShelleySimpleScriptVersion = simpleScriptInEra
1229+
1230+
instance (SimpleScriptInEra era SimpleScriptV1, SimpleScriptInEra era SimpleScriptV2) => MinimumShelleySimpleScriptVersion era SimpleScriptV2 where
1231+
minimumShelleySimpleScriptVersion s = case adjustSimpleScriptVersion SimpleScriptV1 s of
1232+
Nothing -> simpleScriptInEra s
1233+
Just s' -> simpleScriptInEra s'
12101234

12111235
-- | Conversion for the 'Shelley.MultiSig' language used by the Shelley era.
12121236
--

0 commit comments

Comments
 (0)