Skip to content

Commit

Permalink
Update ScriptErrorEvaluationFailed with DebugPlutusFailure
Browse files Browse the repository at this point in the history
  • Loading branch information
Jimbo4350 committed Nov 1, 2024
1 parent 5017812 commit 22d33ca
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 13 deletions.
17 changes: 6 additions & 11 deletions cardano-api/internal/Cardano/Api/Fees.hs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import qualified Cardano.Api.Experimental.Eras as Exp
import Cardano.Api.Experimental.Tx
import Cardano.Api.Feature
import qualified Cardano.Api.Ledger.Lens as A
import Cardano.Api.Plutus
import Cardano.Api.Pretty
import Cardano.Api.ProtocolParameters
import Cardano.Api.Query
Expand All @@ -84,7 +85,6 @@ import qualified Cardano.Ledger.Keys as Ledger
import qualified Cardano.Ledger.Plutus.Language as Plutus
import qualified Cardano.Ledger.Val as L
import qualified Ouroboros.Consensus.HardFork.History as Consensus
import qualified PlutusLedgerApi.V1 as Plutus

import Control.Monad
import Data.Bifunctor (bimap, first, second)
Expand All @@ -99,7 +99,6 @@ import Data.Ratio
import Data.Set (Set)
import qualified Data.Set as Set
import Data.Text (Text)
import qualified Data.Text as Text
import GHC.Exts (IsList (..))
import Lens.Micro ((.~), (^.))

Expand Down Expand Up @@ -540,7 +539,7 @@ data ScriptExecutionError
-- (which is not possible for 'evaluateTransactionExecutionUnits' since
-- the whole point of it is to discover how many execution units are
-- needed).
ScriptErrorEvaluationFailed Plutus.EvaluationError [Text.Text]
ScriptErrorEvaluationFailed DebugPlutusFailure
| -- | The execution units overflowed a 64bit word. Congratulations if
-- you encounter this error. With the current style of cost model this
-- would need a script to run for over 7 months, which is somewhat more
Expand Down Expand Up @@ -581,11 +580,8 @@ instance Error ScriptExecutionError where
[ "The Plutus script witness has the wrong datum (according to the UTxO). "
, "The expected datum value has hash " <> pshow dh
]
ScriptErrorEvaluationFailed evalErr logs ->
mconcat
[ "The Plutus script evaluation failed: " <> pretty evalErr
, "\nScript debugging logs: " <> mconcat (map (\t -> pretty $ t `Text.append` "\n") logs)
]
ScriptErrorEvaluationFailed plutusDebugFailure ->
pretty $ renderDebugPlutusFailure plutusDebugFailure
ScriptErrorExecutionUnitsOverflow ->
mconcat
[ "The execution units required by this Plutus script overflows a 64bit "
Expand Down Expand Up @@ -740,9 +736,8 @@ evaluateTransactionExecutionUnitsShelley sbe systemstart epochInfo (LedgerProtoc
where
txin' = fromShelleyTxIn txin
L.MissingDatum dh -> ScriptErrorWrongDatum (ScriptDataHash dh)
L.ValidationFailure _ evalErr logs _ ->
-- TODO: Include additional information from ValidationFailure
ScriptErrorEvaluationFailed evalErr logs
L.ValidationFailure execUnits evalErr logs scriptWithContext ->
ScriptErrorEvaluationFailed $ DebugPlutusFailure evalErr scriptWithContext execUnits logs
L.IncompatibleBudget _ -> ScriptErrorExecutionUnitsOverflow
L.RedeemerPointsToUnknownScriptHash rdmrPtr ->
ScriptErrorRedeemerPointsToUnknownScriptHash $ toScriptIndex aOnwards rdmrPtr
Expand Down
7 changes: 7 additions & 0 deletions cardano-api/internal/Cardano/Api/Plutus.hs
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE UndecidableInstances #-}

module Cardano.Api.Plutus
( DebugPlutusFailure (..)
, renderDebugPlutusFailure
Expand Down Expand Up @@ -50,5 +56,6 @@ renderDebugPlutusFailure dpf =
, "Protocol version: " <> Text.pack (show (Plutus.pwcProtocolVersion pwc))
, "Script arguments: " <> docToText scriptArgs
, "Script evaluation error: " <> docToText (pretty evalError)
, "Script execution logs: " <> Text.unlines (dpfExecutionLogs dpf)
, "Script base64 encoded bytes: " <> binaryScript
]
11 changes: 9 additions & 2 deletions cardano-api/test/cardano-api-golden/Test/Golden/ErrorsSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ module Test.Golden.ErrorsSpec
where

import Cardano.Api
import Cardano.Api.Plutus
import Cardano.Api.Shelley

import Cardano.Binary as CBOR
Expand All @@ -38,6 +39,7 @@ import qualified Cardano.Ledger.Alonzo.Plutus.TxInfo as Ledger
import qualified Cardano.Ledger.Api.Era as Ledger
import qualified Cardano.Ledger.Coin as L
import Cardano.Ledger.Crypto (StandardCrypto)
import qualified Cardano.Ledger.Plutus.ExUnits as Plutus
import qualified Cardano.Ledger.Plutus.Language as Plutus
import qualified PlutusCore.Evaluation.Machine.CostModelInterface as Plutus
import qualified PlutusLedgerApi.Common as Plutus hiding (PlutusV2)
Expand Down Expand Up @@ -271,8 +273,13 @@ test_ScriptExecutionError =
, ("ScriptErrorTxInWithoutDatum", ScriptErrorTxInWithoutDatum txin1)
, ("ScriptErrorWrongDatum", ScriptErrorWrongDatum hashScriptData1)
,
( "ScriptErrorEvaluationFailed"
, ScriptErrorEvaluationFailed Plutus.CostModelParameterMismatch (replicate 5 text)
( "ScriptErrorEvaluationFailed" -- InvalidReturnValue
, ScriptErrorEvaluationFailed $
DebugPlutusFailure
Plutus.CostModelParameterMismatch
undefined
(Plutus.ExUnits 1 1)
(replicate 5 text)
)
, ("ScriptErrorExecutionUnitsOverflow", ScriptErrorExecutionUnitsOverflow)
,
Expand Down

0 comments on commit 22d33ca

Please sign in to comment.