Skip to content

Commit 7bb61a6

Browse files
committed
Add nested failure for sub transactions
1 parent c921b7f commit 7bb61a6

4 files changed

Lines changed: 33 additions & 10 deletions

File tree

eras/dijkstra/impl/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## 0.3.0.0
44

5+
* Add `SubTxContextError`
56
* Add `DijkstraStAnnTx`
67
* Add `scriptsProvidedDijkstraStAnnTx`
78
* Remove `ToCBOR` and `FromCBOR` instances for `DijkstraGovPredFailure`

eras/dijkstra/impl/src/Cardano/Ledger/Dijkstra/TxInfo.hs

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ import Cardano.Ledger.Plutus.Data (Data)
7171
import Cardano.Ledger.Plutus.ToPlutusData (ToPlutusData (..))
7272
import Cardano.Ledger.State (StakePoolParams (..))
7373
import Cardano.Ledger.TxIn (TxId)
74+
import Control.Arrow (left)
7475
import Control.DeepSeq (NFData)
7576
import Control.Monad (forM, zipWithM)
7677
import Data.Aeson (KeyValue (..), ToJSON (..))
@@ -89,6 +90,8 @@ import qualified PlutusLedgerApi.V3 as PV3
8990

9091
data 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

104108
deriving instance
105109
( AlonzoEraScript era
106110
, EraTxCert era
107111
, EraTxOut era
112+
, Show (ContextError era)
108113
) =>
109114
Show (DijkstraContextError era)
110115

111116
instance
112117
( AlonzoEraScript era
113118
, EraTxCert era
114119
, EraTxOut era
120+
, NFData (ContextError era)
115121
) =>
116122
NFData (DijkstraContextError era)
117123

118124
instance
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

132145
instance
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

147162
instance
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

162179
instance 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

eras/dijkstra/impl/testlib/Test/Cardano/Ledger/Dijkstra/Arbitrary.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import Cardano.Ledger.Allegra.Scripts (
2020
pattern RequireTimeExpire,
2121
pattern RequireTimeStart,
2222
)
23+
import Cardano.Ledger.Alonzo.Plutus.Context (ContextError)
2324
import Cardano.Ledger.BaseTypes (StrictMaybe)
2425
import Cardano.Ledger.Conway.Rules (ConwayDelegPredFailure)
2526
import Cardano.Ledger.Dijkstra (ApplyTxError (DijkstraApplyTxError), DijkstraEra)
@@ -157,6 +158,7 @@ instance
157158
, Arbitrary (PParamsHKD StrictMaybe era)
158159
, Arbitrary (TxCert era)
159160
, Arbitrary (TxOut era)
161+
, Arbitrary (ContextError era)
160162
) =>
161163
Arbitrary (DijkstraContextError era)
162164
where

eras/dijkstra/impl/testlib/Test/Cardano/Ledger/Dijkstra/TreeDiff.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module Test.Cardano.Ledger.Dijkstra.TreeDiff (
1616
module Test.Cardano.Ledger.Conway.TreeDiff,
1717
) where
1818

19+
import Cardano.Ledger.Alonzo.Plutus.Context (ContextError)
1920
import Cardano.Ledger.BaseTypes (StrictMaybe)
2021
import Cardano.Ledger.Conway.Rules (ConwayGovEvent)
2122
import Cardano.Ledger.Dijkstra (DijkstraEra)
@@ -161,6 +162,7 @@ instance
161162
, ToExpr (PlutusPurpose AsItem era)
162163
, ToExpr (TxCert era)
163164
, ToExpr (TxOut era)
165+
, ToExpr (ContextError era)
164166
) =>
165167
ToExpr (DijkstraContextError era)
166168

0 commit comments

Comments
 (0)