@@ -146,11 +146,12 @@ import Data.Aeson (FromJSON (..), ToJSON (..), object, withObject, (.!
146
146
import Data.Bifunctor (bimap , first )
147
147
import Data.ByteString (ByteString )
148
148
import Data.Data (Data )
149
+ import Data.Either (partitionEithers )
149
150
import Data.Either.Combinators (maybeToRight )
150
151
import Data.Int (Int64 )
151
152
import Data.Map.Strict (Map )
152
153
import qualified Data.Map.Strict as Map
153
- import Data.Maybe (isJust )
154
+ import Data.Maybe (fromMaybe , isJust )
154
155
import Data.Maybe.Strict (StrictMaybe (.. ))
155
156
import Data.String (IsString )
156
157
import Data.Text (Text )
@@ -1006,7 +1007,12 @@ newtype CostModels = CostModels {unCostModels :: Map AnyPlutusScriptVersion Cost
1006
1007
deriving (Eq , Show )
1007
1008
1008
1009
instance FromJSON CostModels where
1009
- parseJSON v = CostModels . fromAlonzoCostModels <$> parseJSON v
1010
+ parseJSON v =
1011
+ case sequence parsed of
1012
+ Left err -> fail $ displayError err
1013
+ Right costModels -> CostModels <$> costModels
1014
+ where
1015
+ parsed = fromAlonzoCostModels <$> parseJSON v
1010
1016
1011
1017
instance ToJSON CostModels where
1012
1018
toJSON (CostModels costModels) =
@@ -1030,12 +1036,15 @@ toAlonzoCostModels m = do
1030
1036
1031
1037
fromAlonzoCostModels
1032
1038
:: Plutus. CostModels
1033
- -> Map AnyPlutusScriptVersion CostModel
1039
+ -> Either CostModelNotEnoughParametersError ( Map AnyPlutusScriptVersion CostModel )
1034
1040
fromAlonzoCostModels cModels =
1035
- fromList
1036
- . map (bimap fromAlonzoScriptLanguage fromAlonzoCostModel)
1037
- $ toList
1038
- $ Plutus. costModelsValid cModels
1041
+ case Map. toList errs of
1042
+ [] -> Right $ Map. mapKeys fromAlonzoScriptLanguage models -- All models are valid
1043
+ ((lang, err) : _) -> Left err -- Take first error
1044
+ where
1045
+ (errs, models) = Map. mapEither id entries
1046
+ entries :: Map Plutus. Language (Either CostModelNotEnoughParametersError CostModel )
1047
+ entries = Map. map fromAlonzoCostModel $ Plutus. costModelsValid cModels
1039
1048
1040
1049
toAlonzoScriptLanguage :: AnyPlutusScriptVersion -> Plutus. Language
1041
1050
toAlonzoScriptLanguage (AnyPlutusScriptVersion PlutusScriptV1 ) = Plutus. PlutusV1
@@ -1051,8 +1060,11 @@ toAlonzoCostModel
1051
1060
:: CostModel -> Plutus. Language -> Either ProtocolParametersConversionError Alonzo. CostModel
1052
1061
toAlonzoCostModel (CostModel m) l = first (PpceInvalidCostModel (CostModel m)) $ Alonzo. mkCostModel l m
1053
1062
1054
- fromAlonzoCostModel :: Alonzo. CostModel -> CostModel
1055
- fromAlonzoCostModel m = CostModel $ Alonzo. getCostModelParams m
1063
+ fromAlonzoCostModel :: Alonzo. CostModel -> Either CostModelNotEnoughParametersError CostModel
1064
+ fromAlonzoCostModel m = validateCostModelSize Nothing lang params
1065
+ where
1066
+ params = Alonzo. getCostModelParams m
1067
+ lang = Alonzo. getCostModelLanguage m
1056
1068
1057
1069
validateCostModelSize
1058
1070
:: Maybe (ShelleyBasedEra era )
@@ -1365,13 +1377,15 @@ fromLedgerProposedPPUpdates sbe =
1365
1377
fromLedgerPParamsUpdate
1366
1378
:: ShelleyBasedEra era
1367
1379
-> Ledger. PParamsUpdate (ShelleyLedgerEra era )
1368
- -> ProtocolParametersUpdate
1369
- fromLedgerPParamsUpdate ShelleyBasedEraShelley = fromShelleyPParamsUpdate
1370
- fromLedgerPParamsUpdate ShelleyBasedEraAllegra = fromShelleyPParamsUpdate
1371
- fromLedgerPParamsUpdate ShelleyBasedEraMary = fromShelleyPParamsUpdate
1372
- fromLedgerPParamsUpdate ShelleyBasedEraAlonzo = fromAlonzoPParamsUpdate
1373
- fromLedgerPParamsUpdate ShelleyBasedEraBabbage = fromBabbagePParamsUpdate
1374
- fromLedgerPParamsUpdate ShelleyBasedEraConway = fromConwayPParamsUpdate
1380
+ -> Either CostModelNotEnoughParametersError ProtocolParametersUpdate
1381
+ fromLedgerPParamsUpdate era ppu =
1382
+ case era of
1383
+ ShelleyBasedEraShelley -> pure $ fromShelleyPParamsUpdate ppu
1384
+ ShelleyBasedEraAllegra -> pure $ fromShelleyPParamsUpdate ppu
1385
+ ShelleyBasedEraMary -> pure $ fromShelleyPParamsUpdate ppu
1386
+ ShelleyBasedEraAlonzo -> fromAlonzoPParamsUpdate ppu
1387
+ ShelleyBasedEraBabbage -> fromBabbagePParamsUpdate ppu
1388
+ ShelleyBasedEraConway -> fromConwayPParamsUpdate ppu
1375
1389
1376
1390
fromShelleyCommonPParamsUpdate
1377
1391
:: EraPParams ledgerera
@@ -1431,64 +1445,74 @@ fromShelleyPParamsUpdate ppu =
1431
1445
fromAlonzoCommonPParamsUpdate
1432
1446
:: AlonzoEraPParams ledgerera
1433
1447
=> PParamsUpdate ledgerera
1434
- -> ProtocolParametersUpdate
1448
+ -> Either CostModelNotEnoughParametersError ProtocolParametersUpdate
1435
1449
fromAlonzoCommonPParamsUpdate ppu =
1436
- (fromShelleyCommonPParamsUpdate ppu)
1437
- { protocolUpdateCostModels =
1438
- maybe
1439
- mempty
1440
- fromAlonzoCostModels
1441
- (strictMaybeToMaybe (ppu ^. ppuCostModelsL))
1442
- , protocolUpdatePrices =
1443
- fromAlonzoPrices
1444
- <$> strictMaybeToMaybe (ppu ^. ppuPricesL)
1445
- , protocolUpdateMaxTxExUnits =
1446
- fromAlonzoExUnits
1447
- <$> strictMaybeToMaybe (ppu ^. ppuMaxTxExUnitsL)
1448
- , protocolUpdateMaxBlockExUnits =
1449
- fromAlonzoExUnits
1450
- <$> strictMaybeToMaybe (ppu ^. ppuMaxBlockExUnitsL)
1451
- , protocolUpdateMaxValueSize = strictMaybeToMaybe (ppu ^. ppuMaxValSizeL)
1452
- , protocolUpdateCollateralPercent = strictMaybeToMaybe (ppu ^. ppuCollateralPercentageL)
1453
- , protocolUpdateMaxCollateralInputs = strictMaybeToMaybe (ppu ^. ppuMaxCollateralInputsL)
1454
- , protocolUpdateUTxOCostPerByte = Nothing
1455
- }
1450
+ case costModels of
1451
+ Left err -> Left err
1452
+ Right mCostModelMap ->
1453
+ Right $
1454
+ (fromShelleyCommonPParamsUpdate ppu)
1455
+ { protocolUpdateCostModels = fromMaybe mempty mCostModelMap
1456
+ , protocolUpdatePrices =
1457
+ fromAlonzoPrices
1458
+ <$> strictMaybeToMaybe (ppu ^. ppuPricesL)
1459
+ , protocolUpdateMaxTxExUnits =
1460
+ fromAlonzoExUnits
1461
+ <$> strictMaybeToMaybe (ppu ^. ppuMaxTxExUnitsL)
1462
+ , protocolUpdateMaxBlockExUnits =
1463
+ fromAlonzoExUnits
1464
+ <$> strictMaybeToMaybe (ppu ^. ppuMaxBlockExUnitsL)
1465
+ , protocolUpdateMaxValueSize = strictMaybeToMaybe (ppu ^. ppuMaxValSizeL)
1466
+ , protocolUpdateCollateralPercent = strictMaybeToMaybe (ppu ^. ppuCollateralPercentageL)
1467
+ , protocolUpdateMaxCollateralInputs = strictMaybeToMaybe (ppu ^. ppuMaxCollateralInputsL)
1468
+ , protocolUpdateUTxOCostPerByte = Nothing
1469
+ }
1470
+ where
1471
+ mCostModels :: Maybe (Plutus. CostModels )
1472
+ mCostModels = strictMaybeToMaybe (ppu ^. ppuCostModelsL)
1473
+ costModels :: Either
1474
+ CostModelNotEnoughParametersError
1475
+ (Maybe (Map AnyPlutusScriptVersion CostModel ))
1476
+ costModels = sequence $ fromAlonzoCostModels <$> mCostModels
1456
1477
1457
1478
fromAlonzoPParamsUpdate
1458
1479
:: Ledger. Crypto crypto
1459
1480
=> PParamsUpdate (Ledger. AlonzoEra crypto )
1460
- -> ProtocolParametersUpdate
1481
+ -> Either CostModelNotEnoughParametersError ProtocolParametersUpdate
1461
1482
fromAlonzoPParamsUpdate ppu =
1462
- (fromAlonzoCommonPParamsUpdate ppu)
1463
- { protocolUpdateProtocolVersion =
1464
- (\ (Ledger. ProtVer a b) -> (Ledger. getVersion a, b))
1465
- <$> strictMaybeToMaybe (ppu ^. ppuProtocolVersionL)
1466
- }
1483
+ (fromAlonzoCommonPParamsUpdate ppu) <&> \ ppu' ->
1484
+ ppu'
1485
+ { protocolUpdateProtocolVersion =
1486
+ (\ (Ledger. ProtVer a b) -> (Ledger. getVersion a, b))
1487
+ <$> strictMaybeToMaybe (ppu ^. ppuProtocolVersionL)
1488
+ }
1467
1489
1468
1490
fromBabbageCommonPParamsUpdate
1469
1491
:: BabbageEraPParams ledgerera
1470
1492
=> PParamsUpdate ledgerera
1471
- -> ProtocolParametersUpdate
1493
+ -> Either CostModelNotEnoughParametersError ProtocolParametersUpdate
1472
1494
fromBabbageCommonPParamsUpdate ppu =
1473
- (fromAlonzoCommonPParamsUpdate ppu)
1474
- { protocolUpdateUTxOCostPerByte = unCoinPerByte <$> strictMaybeToMaybe (ppu ^. ppuCoinsPerUTxOByteL)
1475
- }
1495
+ (fromAlonzoCommonPParamsUpdate ppu) <&> \ ppu' ->
1496
+ ppu'
1497
+ { protocolUpdateUTxOCostPerByte = unCoinPerByte <$> strictMaybeToMaybe (ppu ^. ppuCoinsPerUTxOByteL)
1498
+ }
1476
1499
1477
1500
fromBabbagePParamsUpdate
1478
1501
:: Ledger. Crypto crypto
1479
1502
=> PParamsUpdate (Ledger. BabbageEra crypto )
1480
- -> ProtocolParametersUpdate
1503
+ -> Either CostModelNotEnoughParametersError ProtocolParametersUpdate
1481
1504
fromBabbagePParamsUpdate ppu =
1482
- (fromBabbageCommonPParamsUpdate ppu)
1483
- { protocolUpdateProtocolVersion =
1484
- (\ (Ledger. ProtVer a b) -> (Ledger. getVersion a, b))
1485
- <$> strictMaybeToMaybe (ppu ^. ppuProtocolVersionL)
1486
- }
1505
+ (fromBabbageCommonPParamsUpdate ppu) <&> \ ppu' ->
1506
+ ppu'
1507
+ { protocolUpdateProtocolVersion =
1508
+ (\ (Ledger. ProtVer a b) -> (Ledger. getVersion a, b))
1509
+ <$> strictMaybeToMaybe (ppu ^. ppuProtocolVersionL)
1510
+ }
1487
1511
1488
1512
fromConwayPParamsUpdate
1489
1513
:: BabbageEraPParams ledgerera
1490
1514
=> PParamsUpdate ledgerera
1491
- -> ProtocolParametersUpdate
1515
+ -> Either CostModelNotEnoughParametersError ProtocolParametersUpdate
1492
1516
fromConwayPParamsUpdate = fromBabbageCommonPParamsUpdate
1493
1517
1494
1518
-- ----------------------------------------------------------------------------
@@ -1666,13 +1690,15 @@ toConwayPParams = toBabbagePParams
1666
1690
fromLedgerPParams
1667
1691
:: ShelleyBasedEra era
1668
1692
-> Ledger. PParams (ShelleyLedgerEra era )
1669
- -> ProtocolParameters
1670
- fromLedgerPParams ShelleyBasedEraShelley = fromShelleyPParams
1671
- fromLedgerPParams ShelleyBasedEraAllegra = fromShelleyPParams
1672
- fromLedgerPParams ShelleyBasedEraMary = fromShelleyPParams
1673
- fromLedgerPParams ShelleyBasedEraAlonzo = fromExactlyAlonzoPParams
1674
- fromLedgerPParams ShelleyBasedEraBabbage = fromBabbagePParams
1675
- fromLedgerPParams ShelleyBasedEraConway = fromConwayPParams
1693
+ -> Either CostModelNotEnoughParametersError ProtocolParameters
1694
+ fromLedgerPParams sbe pp =
1695
+ case sbe of
1696
+ ShelleyBasedEraShelley -> pure $ fromShelleyPParams pp
1697
+ ShelleyBasedEraAllegra -> pure $ fromShelleyPParams pp
1698
+ ShelleyBasedEraMary -> pure $ fromShelleyPParams pp
1699
+ ShelleyBasedEraAlonzo -> fromExactlyAlonzoPParams pp
1700
+ ShelleyBasedEraBabbage -> fromBabbagePParams pp
1701
+ ShelleyBasedEraConway -> fromConwayPParams pp
1676
1702
1677
1703
{-# DEPRECATED
1678
1704
fromShelleyCommonPParams
@@ -1737,18 +1763,23 @@ fromShelleyPParams pp =
1737
1763
fromAlonzoPParams
1738
1764
:: AlonzoEraPParams ledgerera
1739
1765
=> PParams ledgerera
1740
- -> ProtocolParameters
1766
+ -> Either CostModelNotEnoughParametersError ProtocolParameters
1741
1767
fromAlonzoPParams pp =
1742
- (fromShelleyCommonPParams pp)
1743
- { protocolParamCostModels = fromAlonzoCostModels $ pp ^. ppCostModelsL
1744
- , protocolParamDecentralization = Just . Ledger. unboundRational $ pp ^. ppDG
1745
- , protocolParamPrices = Just . fromAlonzoPrices $ pp ^. ppPricesL
1746
- , protocolParamMaxTxExUnits = Just . fromAlonzoExUnits $ pp ^. ppMaxTxExUnitsL
1747
- , protocolParamMaxBlockExUnits = Just . fromAlonzoExUnits $ pp ^. ppMaxBlockExUnitsL
1748
- , protocolParamMaxValueSize = Just $ pp ^. ppMaxValSizeL
1749
- , protocolParamCollateralPercent = Just $ pp ^. ppCollateralPercentageL
1750
- , protocolParamMaxCollateralInputs = Just $ pp ^. ppMaxCollateralInputsL
1751
- }
1768
+ ppCostModels <&> \ costModels ->
1769
+ base
1770
+ { protocolParamCostModels = costModels
1771
+ , protocolParamDecentralization = Just . Ledger. unboundRational $ pp ^. ppDG
1772
+ , protocolParamPrices = Just . fromAlonzoPrices $ pp ^. ppPricesL
1773
+ , protocolParamMaxTxExUnits = Just . fromAlonzoExUnits $ pp ^. ppMaxTxExUnitsL
1774
+ , protocolParamMaxBlockExUnits = Just . fromAlonzoExUnits $ pp ^. ppMaxBlockExUnitsL
1775
+ , protocolParamMaxValueSize = Just $ pp ^. ppMaxValSizeL
1776
+ , protocolParamCollateralPercent = Just $ pp ^. ppCollateralPercentageL
1777
+ , protocolParamMaxCollateralInputs = Just $ pp ^. ppMaxCollateralInputsL
1778
+ }
1779
+ where
1780
+ base = fromShelleyCommonPParams pp
1781
+ ppCostModels :: Either CostModelNotEnoughParametersError (Map AnyPlutusScriptVersion CostModel )
1782
+ ppCostModels = fromAlonzoCostModels $ pp ^. ppCostModelsL
1752
1783
1753
1784
{-# DEPRECATED
1754
1785
fromExactlyAlonzoPParams
@@ -1757,11 +1788,12 @@ fromAlonzoPParams pp =
1757
1788
fromExactlyAlonzoPParams
1758
1789
:: (AlonzoEraPParams ledgerera , Ledger. ExactEra Ledger. AlonzoEra ledgerera )
1759
1790
=> PParams ledgerera
1760
- -> ProtocolParameters
1791
+ -> Either CostModelNotEnoughParametersError ProtocolParameters
1761
1792
fromExactlyAlonzoPParams pp =
1762
- (fromAlonzoPParams pp)
1763
- { protocolParamUTxOCostPerByte = Just . unCoinPerWord $ pp ^. ppCoinsPerUTxOWordL
1764
- }
1793
+ (fromAlonzoPParams pp) <&> \ pp' ->
1794
+ pp'
1795
+ { protocolParamUTxOCostPerByte = Just . unCoinPerWord $ pp ^. ppCoinsPerUTxOWordL
1796
+ }
1765
1797
1766
1798
{-# DEPRECATED
1767
1799
fromBabbagePParams
@@ -1770,12 +1802,13 @@ fromExactlyAlonzoPParams pp =
1770
1802
fromBabbagePParams
1771
1803
:: BabbageEraPParams ledgerera
1772
1804
=> PParams ledgerera
1773
- -> ProtocolParameters
1805
+ -> Either CostModelNotEnoughParametersError ProtocolParameters
1774
1806
fromBabbagePParams pp =
1775
- (fromAlonzoPParams pp)
1776
- { protocolParamUTxOCostPerByte = Just . unCoinPerByte $ pp ^. ppCoinsPerUTxOByteL
1777
- , protocolParamDecentralization = Nothing
1778
- }
1807
+ (fromAlonzoPParams pp) <&> \ pp' ->
1808
+ pp'
1809
+ { protocolParamUTxOCostPerByte = Just . unCoinPerByte $ pp ^. ppCoinsPerUTxOByteL
1810
+ , protocolParamDecentralization = Nothing
1811
+ }
1779
1812
1780
1813
{-# DEPRECATED
1781
1814
fromConwayPParams
@@ -1784,7 +1817,7 @@ fromBabbagePParams pp =
1784
1817
fromConwayPParams
1785
1818
:: BabbageEraPParams ledgerera
1786
1819
=> PParams ledgerera
1787
- -> ProtocolParameters
1820
+ -> Either CostModelNotEnoughParametersError ProtocolParameters
1788
1821
fromConwayPParams = fromBabbagePParams
1789
1822
1790
1823
{-# DEPRECATED
0 commit comments