From 03c0db768c9807ef24719bb595122caae452468e Mon Sep 17 00:00:00 2001 From: Alexey Kuleshevich Date: Tue, 16 Apr 2024 17:35:58 -0600 Subject: [PATCH] Implement POC of same number of argumetns for PlutusV3 --- .../impl/src/Cardano/Ledger/Alonzo/Plutus/Evaluate.hs | 6 ++++-- libs/cardano-ledger-core/src/Cardano/Ledger/Plutus/Data.hs | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/Plutus/Evaluate.hs b/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/Plutus/Evaluate.hs index 441e2e29bb8..bc358b102d8 100644 --- a/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/Plutus/Evaluate.hs +++ b/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/Plutus/Evaluate.hs @@ -31,7 +31,7 @@ import Cardano.Ledger.BaseTypes (ProtVer (pvMajor), kindObject, natVersion) import Cardano.Ledger.Binary (DecCBOR (..), EncCBOR (..)) import Cardano.Ledger.Binary.Coders import Cardano.Ledger.Plutus.CostModels (costModelsValid) -import Cardano.Ledger.Plutus.Data (getPlutusData) +import Cardano.Ledger.Plutus.Data (fromMaybeData, getPlutusData) import Cardano.Ledger.Plutus.Evaluate ( PlutusDatums (..), PlutusWithContext (..), @@ -187,7 +187,9 @@ collectPlutusScriptsWithContext epochInfo sysStart pp tx utxo = case mkPlutusScriptContext plutusScript plutusPurpose pp epochInfo sysStart utxo tx of Right scriptContext -> let spendingDatum = getSpendingDatum utxo tx $ hoistPlutusPurpose toAsItem plutusPurpose - datums = maybe id (:) spendingDatum [d, scriptContext] + datums + | protVerMajor < natVersion @9 = maybe id (:) spendingDatum [d, scriptContext] + | otherwise = [fromMaybeData spendingDatum, d, scriptContext] in Right $ withPlutusScript plutusScript $ \plutus -> PlutusWithContext diff --git a/libs/cardano-ledger-core/src/Cardano/Ledger/Plutus/Data.hs b/libs/cardano-ledger-core/src/Cardano/Ledger/Plutus/Data.hs index 694cc8ad6bc..b664037ffda 100644 --- a/libs/cardano-ledger-core/src/Cardano/Ledger/Plutus/Data.hs +++ b/libs/cardano-ledger-core/src/Cardano/Ledger/Plutus/Data.hs @@ -24,6 +24,7 @@ module Cardano.Ledger.Plutus.Data ( PlutusData (..), Data (Data), unData, + fromMaybeData, DataHash, upgradeData, hashData, @@ -104,6 +105,12 @@ newtype Data era = DataConstr (MemoBytes PlutusData era) deriving (Eq, Generic) deriving newtype (SafeToHash, ToCBOR, NFData) +-- | Convert Maybe data to a List +fromMaybeData :: Era era => Maybe (Data era) -> Data era +fromMaybeData = \case + Nothing -> Data (PV1.List []) + Just (Data d) -> Data (PV1.List [d]) + -- | Encodes memoized bytes created upon construction. instance Typeable era => EncCBOR (Data era)