@@ -71,6 +71,7 @@ import Cardano.Ledger.Plutus.Data (Data)
7171import Cardano.Ledger.Plutus.ToPlutusData (ToPlutusData (.. ))
7272import Cardano.Ledger.State (StakePoolParams (.. ))
7373import Cardano.Ledger.TxIn (TxId )
74+ import Control.Arrow (left )
7475import Control.DeepSeq (NFData )
7576import Control.Monad (forM , zipWithM )
7677import Data.Aeson (KeyValue (.. ), ToJSON (.. ))
@@ -89,6 +90,8 @@ import qualified PlutusLedgerApi.V3 as PV3
8990
9091data DijkstraContextError era
9192 = ConwayContextError (ConwayContextError era )
93+ | -- | Failure translating sub-transactions for Guarding purpose at the top level
94+ SubTxContextError TxId (ContextError era )
9295 | PointerPresentInOutput (NonEmpty (TxOut era ))
9396 | -- | Attempt to use PlutusV1-V3 in a sub-transaction will result in this failure
9497 SubTxIsNotSupported TxId
@@ -98,56 +101,69 @@ deriving instance
98101 ( AlonzoEraScript era
99102 , EraTxCert era
100103 , EraTxOut era
104+ , Eq (ContextError era )
101105 ) =>
102106 Eq (DijkstraContextError era )
103107
104108deriving instance
105109 ( AlonzoEraScript era
106110 , EraTxCert era
107111 , EraTxOut era
112+ , Show (ContextError era )
108113 ) =>
109114 Show (DijkstraContextError era )
110115
111116instance
112117 ( AlonzoEraScript era
113118 , EraTxCert era
114119 , EraTxOut era
120+ , NFData (ContextError era )
115121 ) =>
116122 NFData (DijkstraContextError era )
117123
118124instance
119- ( ToJSON (TxCert era )
125+ ( ToJSON (TxOut era )
126+ , ToJSON (TxCert era )
127+ , ToJSON (ContextError era )
120128 , ToJSON (PlutusPurpose AsIx era )
121129 , ToJSON (PlutusPurpose AsItem era )
122- , ToJSON (TxOut era )
123130 , EraPParams era
124131 ) =>
125132 ToJSON (DijkstraContextError era )
126133 where
127134 toJSON = \ case
128135 ConwayContextError x -> toJSON x
136+ SubTxContextError txId subTxError ->
137+ kindObject
138+ " SubTxContextError"
139+ [ " txId" .= toJSON txId
140+ , " subTxError" .= toJSON subTxError
141+ ]
129142 PointerPresentInOutput x -> kindObject " PointerPresentInOutput" [" txOut" .= toJSON x]
130143 SubTxIsNotSupported txId -> kindObject " SubTxIsNotSupported" [" txId" .= toJSON txId]
131144
132145instance
133146 ( EraPParams era
134- , DecCBOR (TxCert era )
135147 , DecCBOR (TxOut era )
148+ , DecCBOR (TxCert era )
149+ , DecCBOR (ContextError era )
136150 , DecCBOR (PlutusPurpose AsIx era )
137151 , DecCBOR (PlutusPurpose AsItem era )
138152 ) =>
139153 DecCBOR (DijkstraContextError era )
140154 where
141155 decCBOR = decode $ Summands " ContextError" $ \ case
142156 16 -> SumD ConwayContextError <! From
143- 17 -> SumD PointerPresentInOutput <! From
144- 18 -> SumD SubTxIsNotSupported <! From
157+ 17 -> SumD SubTxContextError <! From <! From
158+ 18 -> SumD PointerPresentInOutput <! From
159+ 19 -> SumD SubTxIsNotSupported <! From
145160 k -> Invalid k
146161
147162instance
148163 ( EraPParams era
149- , EncCBOR (TxCert era )
150164 , EncCBOR (TxOut era )
165+ , EncCBOR (TxCert era )
166+ , EncCBOR (ContextError era )
151167 , EncCBOR (PlutusPurpose AsIx era )
152168 , EncCBOR (PlutusPurpose AsItem era )
153169 ) =>
@@ -156,8 +172,9 @@ instance
156172 encCBOR =
157173 encode . \ case
158174 ConwayContextError x -> Sum ConwayContextError 16 !> To x
159- PointerPresentInOutput x -> Sum PointerPresentInOutput 17 !> To x
160- SubTxIsNotSupported txId -> Sum SubTxIsNotSupported 18 !> To txId
175+ SubTxContextError txId subTxError -> Sum SubTxContextError 17 !> To txId !> To subTxError
176+ PointerPresentInOutput x -> Sum PointerPresentInOutput 18 !> To x
177+ SubTxIsNotSupported txId -> Sum SubTxIsNotSupported 19 !> To txId
161178
162179instance Inject (ConwayContextError era ) (DijkstraContextError era ) where
163180 inject = ConwayContextError
@@ -424,9 +441,10 @@ instance EraPlutusTxInfo 'PlutusV4 DijkstraEra where
424441 purpose@ (GuardingPurpose AsPurpose ) -> do
425442 _subTxInfosForGuards <-
426443 forM (OMap. elems (tx ^. bodyTxL . subTransactionsTxBodyL)) $ \ subTx -> do
444+ let txId = txIdTx subTx
427445 mkTxInfo <-
428446 unPlutusTxInfoResult $
429- case Map. lookup (txIdTx subTx) (ltiMemoizedSubTransactions lti) of
447+ case Map. lookup txId (ltiMemoizedSubTransactions lti) of
430448 Nothing ->
431449 toPlutusTxInfo proxy $
432450 lti
@@ -435,7 +453,7 @@ instance EraPlutusTxInfo 'PlutusV4 DijkstraEra where
435453 }
436454 Just txInfoResults ->
437455 lookupTxInfoResult (plutusSLanguage proxy) txInfoResults
438- mkTxInfo purpose
456+ left ( SubTxContextError txId) $ mkTxInfo purpose
439457 -- TODO: Add Sub transactions
440458 Right topTxInfo
441459 _ -> Right topTxInfo
0 commit comments