| 
1 | 1 | {-# LANGUAGE AllowAmbiguousTypes #-}  | 
2 | 2 | {-# LANGUAGE OverloadedStrings #-}  | 
 | 3 | +{-# LANGUAGE PatternSynonyms #-}  | 
3 | 4 | {-# LANGUAGE RankNTypes #-}  | 
4 | 5 | {-# LANGUAGE ScopedTypeVariables #-}  | 
5 | 6 | {-# LANGUAGE TypeApplications #-}  | 
6 | 7 | 
 
  | 
7 | 8 | module Test.Cardano.Ledger.Dijkstra.Binary.Golden (  | 
8 |  | -  goldenListRedeemersDisallowed,  | 
 | 9 | +  spec,  | 
9 | 10 | ) where  | 
10 | 11 | 
 
  | 
11 | 12 | import Cardano.Ledger.Alonzo.TxWits (Redeemers)  | 
12 |  | -import Cardano.Ledger.Binary (DecoderError (..), DeserialiseFailure (..))  | 
13 |  | -import Cardano.Ledger.Dijkstra.Core (eraProtVerLow)  | 
14 |  | -import Test.Cardano.Ledger.Common (Spec, it)  | 
15 |  | -import Test.Cardano.Ledger.Conway.Binary.Golden (expectDecoderFailure, listRedeemersEnc)  | 
 | 13 | +import Cardano.Ledger.BaseTypes (Version)  | 
 | 14 | +import Cardano.Ledger.Binary (DecoderError (..), DeserialiseFailure (..), Tokens (..))  | 
 | 15 | +import Cardano.Ledger.Coin (Coin (..))  | 
 | 16 | +import Cardano.Ledger.Conway.TxCert (Delegatee (..))  | 
 | 17 | +import Cardano.Ledger.Credential (Credential (..))  | 
 | 18 | +import Cardano.Ledger.Dijkstra.Core (  | 
 | 19 | +  EraTxBody (..),  | 
 | 20 | +  EraTxOut (..),  | 
 | 21 | +  TxLevel (..),  | 
 | 22 | +  eraProtVerLow,  | 
 | 23 | +  pattern DelegTxCert,  | 
 | 24 | + )  | 
 | 25 | +import Cardano.Ledger.TxIn (TxIn (..))  | 
 | 26 | +import qualified Data.Set as Set  | 
 | 27 | +import Test.Cardano.Ledger.Binary.Plain.Golden (Enc (..))  | 
 | 28 | +import Test.Cardano.Ledger.Common (Spec, describe, it)  | 
 | 29 | +import Test.Cardano.Ledger.Conway.Binary.Golden (expectDecoderFailureAnn, listRedeemersEnc)  | 
 | 30 | +import Test.Cardano.Ledger.Core.KeyPair (mkKeyHash)  | 
16 | 31 | import Test.Cardano.Ledger.Dijkstra.Era (DijkstraEraTest)  | 
17 | 32 | 
 
  | 
 | 33 | +spec :: forall era. DijkstraEraTest era => Spec  | 
 | 34 | +spec = describe "Golden" $ do  | 
 | 35 | +  goldenListRedeemersDisallowed @era  | 
 | 36 | +  goldenDuplicateCertsDisallowed @era  | 
 | 37 | + | 
18 | 38 | goldenListRedeemersDisallowed :: forall era. DijkstraEraTest era => Spec  | 
19 | 39 | goldenListRedeemersDisallowed =  | 
20 | 40 |   it "Decoding Redeemers encoded as a list fails" $  | 
21 |  | -    expectDecoderFailure @(Redeemers era)  | 
 | 41 | +    expectDecoderFailureAnn @(Redeemers era)  | 
22 | 42 |       (eraProtVerLow @era)  | 
23 | 43 |       listRedeemersEnc  | 
24 | 44 |       ( DecoderErrorDeserialiseFailure  | 
25 | 45 |           "Annotator (MemoBytes (RedeemersRaw DijkstraEra))"  | 
26 | 46 |           (DeserialiseFailure 0 "List encoding of redeemers not supported starting with PV 12")  | 
27 | 47 |       )  | 
 | 48 | + | 
 | 49 | +duplicateCertsTx :: forall era. DijkstraEraTest era => Version -> Enc  | 
 | 50 | +duplicateCertsTx v =  | 
 | 51 | +  mconcat  | 
 | 52 | +    [ E $ TkMapLen 4  | 
 | 53 | +    , Em [E @Int 0, Ev v $ Set.empty @TxIn]  | 
 | 54 | +    , Em [E @Int 1, Ev v $ [] @(TxOut era)]  | 
 | 55 | +    , Em [E @Int 2, E $ Coin 0]  | 
 | 56 | +    , Em  | 
 | 57 | +        [ E @Int 4  | 
 | 58 | +        , Em  | 
 | 59 | +            [ E $ TkTag 258  | 
 | 60 | +            , E $ TkListLen 2  | 
 | 61 | +            , Ev v cert  | 
 | 62 | +            , Ev v cert  | 
 | 63 | +            ]  | 
 | 64 | +        ]  | 
 | 65 | +    ]  | 
 | 66 | +  where  | 
 | 67 | +    cert = DelegTxCert @era (KeyHashObj (mkKeyHash 0)) (DelegStake (mkKeyHash 1))  | 
 | 68 | + | 
 | 69 | +goldenDuplicateCertsDisallowed :: forall era. DijkstraEraTest era => Spec  | 
 | 70 | +goldenDuplicateCertsDisallowed =  | 
 | 71 | +  it "Decoding a transaction body with duplicate certificates fails" $  | 
 | 72 | +    expectDecoderFailureAnn @(TxBody TopTx era)  | 
 | 73 | +      version  | 
 | 74 | +      (duplicateCertsTx @era version)  | 
 | 75 | +      ( DecoderErrorDeserialiseFailure  | 
 | 76 | +          "Annotator (MemoBytes (DijkstraTxBodyRaw TopTx DijkstraEra))"  | 
 | 77 | +          ( DeserialiseFailure  | 
 | 78 | +              143  | 
 | 79 | +              "Final number of elements: 1 does not match the total count that was decoded: 2"  | 
 | 80 | +          )  | 
 | 81 | +      )  | 
 | 82 | +  where  | 
 | 83 | +    version = eraProtVerLow @era  | 
0 commit comments