{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.Tx (
  DijkstraTx (..),
  DijkstraTopTx (..),
  DijkstraTopTxRaw (..),
  Tx (..),
  DijkstraStAnnTx (..),
  validateDijkstraNativeScript,
  decodeDijkstraTopTxInMempool,
  decodeDijkstraTopTxInBlock,
  toCBORForBlockInclusion,
) where

import Cardano.Ledger.Allegra.TxBody (AllegraEraTxBody (..), StrictMaybe)
import Cardano.Ledger.Alonzo.Plutus.Context (
  CollectError,
  SupportedPlutusRunnable,
  TxInfoResult,
 )
import Cardano.Ledger.Alonzo.Tx (
  AlonzoEraTx,
  IsPhase2Valid (..),
 )
import Cardano.Ledger.Alonzo.TxWits (AlonzoEraTxWits (..), unRedeemersL)
import Cardano.Ledger.BaseTypes (StrictMaybe (..), ToKeyValuePairs (..), integralToBounded)
import Cardano.Ledger.Binary (
  Annotator,
  DecCBOR (..),
  Decoder,
  EncCBOR (..),
  Encoding,
  ToCBOR (..),
  TokenType (..),
  decodeNullStrictMaybe,
  decodeRecordNamed,
  encodeListLen,
  encodeNullStrictMaybe,
  encodePreEncoded,
  peekTokenType,
  serialize,
 )
import Cardano.Ledger.Binary.Coders (Encode (..), encode, (!>))
import Cardano.Ledger.Conway.Tx (AlonzoEraTx (..), Tx (..), getConwayMinFeeTx)
import Cardano.Ledger.Core
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
import Cardano.Ledger.Dijkstra.Scripts (
  DijkstraEraScript,
  DijkstraNativeScript,
  evalDijkstraNativeScript,
 )
import Cardano.Ledger.Dijkstra.TxAuxData ()
import Cardano.Ledger.Dijkstra.TxBody (DijkstraEraTxBody (..), dijkstraAllInputsTxBodyF)
import Cardano.Ledger.Dijkstra.TxWits ()
import Cardano.Ledger.Keys.WitVKey (witVKeyHash)
import Cardano.Ledger.MemoBytes (
  EqRaw (..),
  Mem,
  MemoBytes,
  MemoHashIndex,
  Memoized (..),
  getMemoRawType,
  getMemoSafeHash,
  lensMemoRawType,
  mkMemoizedEra,
 )
import Cardano.Ledger.Plutus (Language, PlutusWithContext)
import Cardano.Ledger.Shelley.Tx (shelleyTxEqRaw)
import Cardano.Ledger.State
import Control.DeepSeq (NFData (..), deepseq)
import Control.Monad.Trans.Fail.String (errorFail)
import Data.Aeson (FromJSON (..), ToJSON (..), withObject, (.:), (.=))
import qualified Data.Aeson as Aeson
import qualified Data.ByteString.Lazy as LBS
import Data.Int (Int64)
import Data.List.NonEmpty (NonEmpty)
import qualified Data.Map.Strict as Map
import Data.Set (Set)
import qualified Data.Set as Set
import Data.Typeable (Typeable)
import Data.Word (Word32)
import GHC.Generics (Generic)
import Lens.Micro (Lens', SimpleGetter, lens, to, (&), (.~), (^.))
import NoThunks.Class (InspectHeap (..), NoThunks)

data DijkstraTopTxRaw era = DijkstraTopTxRaw
  { forall era. DijkstraTopTxRaw era -> TxBody TopTx era
dttrBody :: !(TxBody TopTx era)
  , forall era. DijkstraTopTxRaw era -> TxWits era
dttrWits :: !(TxWits era)
  , forall era. DijkstraTopTxRaw era -> IsPhase2Valid
dttrIsPhase2Valid :: !IsPhase2Valid
  , forall era. DijkstraTopTxRaw era -> StrictMaybe (TxAuxData era)
dttrAuxData :: !(StrictMaybe (TxAuxData era))
  }
  deriving ((forall x. DijkstraTopTxRaw era -> Rep (DijkstraTopTxRaw era) x)
-> (forall x. Rep (DijkstraTopTxRaw era) x -> DijkstraTopTxRaw era)
-> Generic (DijkstraTopTxRaw era)
forall x. Rep (DijkstraTopTxRaw era) x -> DijkstraTopTxRaw era
forall x. DijkstraTopTxRaw era -> Rep (DijkstraTopTxRaw era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x. Rep (DijkstraTopTxRaw era) x -> DijkstraTopTxRaw era
forall era x. DijkstraTopTxRaw era -> Rep (DijkstraTopTxRaw era) x
$cfrom :: forall era x. DijkstraTopTxRaw era -> Rep (DijkstraTopTxRaw era) x
from :: forall x. DijkstraTopTxRaw era -> Rep (DijkstraTopTxRaw era) x
$cto :: forall era x. Rep (DijkstraTopTxRaw era) x -> DijkstraTopTxRaw era
to :: forall x. Rep (DijkstraTopTxRaw era) x -> DijkstraTopTxRaw era
Generic)

deriving instance EraTx era => Eq (DijkstraTopTxRaw era)

deriving instance EraTx era => Show (DijkstraTopTxRaw era)

instance EraTx era => NFData (DijkstraTopTxRaw era)

type instance MemoHashIndex (DijkstraTopTxRaw era) = EraIndependentTx

-- | Encode in the format used inside a block body:
-- @[transaction_body, transaction_witness_set, auxiliary_data\/ nil, is_valid]@.
--
-- The `IsPhase2Valid` flag is placed after the fields supplied by the
-- transaction author, since it is set by the block producer.
instance EraTx era => EncCBOR (DijkstraTopTxRaw era) where
  encCBOR :: DijkstraTopTxRaw era -> Encoding
encCBOR DijkstraTopTxRaw {TxBody TopTx era
dttrBody :: forall era. DijkstraTopTxRaw era -> TxBody TopTx era
dttrBody :: TxBody TopTx era
dttrBody, TxWits era
dttrWits :: forall era. DijkstraTopTxRaw era -> TxWits era
dttrWits :: TxWits era
dttrWits, IsPhase2Valid
dttrIsPhase2Valid :: forall era. DijkstraTopTxRaw era -> IsPhase2Valid
dttrIsPhase2Valid :: IsPhase2Valid
dttrIsPhase2Valid, StrictMaybe (TxAuxData era)
dttrAuxData :: forall era. DijkstraTopTxRaw era -> StrictMaybe (TxAuxData era)
dttrAuxData :: StrictMaybe (TxAuxData era)
dttrAuxData} =
    Word -> Encoding
encodeListLen Word
4
      Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> TxBody TopTx era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR TxBody TopTx era
dttrBody
      Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> TxWits era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR TxWits era
dttrWits
      Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> (TxAuxData era -> Encoding)
-> StrictMaybe (TxAuxData era) -> Encoding
forall a. (a -> Encoding) -> StrictMaybe a -> Encoding
encodeNullStrictMaybe TxAuxData era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR StrictMaybe (TxAuxData era)
dttrAuxData
      Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> IsPhase2Valid -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR IsPhase2Valid
dttrIsPhase2Valid

instance EraTx era => DecCBOR (Annotator (DijkstraTopTxRaw era)) where
  decCBOR :: forall s. Decoder s (Annotator (DijkstraTopTxRaw era))
decCBOR =
    Text
-> (Annotator (DijkstraTopTxRaw era) -> Int)
-> Decoder s (Annotator (DijkstraTopTxRaw era))
-> Decoder s (Annotator (DijkstraTopTxRaw era))
forall a s. Text -> (a -> Int) -> Decoder s a -> Decoder s a
decodeRecordNamed Text
"DijkstraTx" (Int -> Annotator (DijkstraTopTxRaw era) -> Int
forall a b. a -> b -> a
const Int
4) (Decoder s (Annotator (DijkstraTopTxRaw era))
 -> Decoder s (Annotator (DijkstraTopTxRaw era)))
-> Decoder s (Annotator (DijkstraTopTxRaw era))
-> Decoder s (Annotator (DijkstraTopTxRaw era))
forall a b. (a -> b) -> a -> b
$ do
      bodyAnn <- Decoder s (Annotator (TxBody TopTx era))
forall s. Decoder s (Annotator (TxBody TopTx era))
forall a s. DecCBOR a => Decoder s a
decCBOR
      witsAnn <- decCBOR
      auxAnn <- decodeNullStrictMaybe decCBOR
      isPhase2Valid <- decCBOR
      pure $ DijkstraTopTxRaw <$> bodyAnn <*> witsAnn <*> pure isPhase2Valid <*> sequence auxAnn

-- Note: 'EncCBOR' for 'DijkstraTopTx' emits the stored block-format bytes,
-- while 'EncCBOR' for a top-level 'DijkstraTx' and 'Tx' produces the mempool
-- format (see 'toCBORForMempoolSubmission')
newtype DijkstraTopTx era = MkDijkstraTopTx (MemoBytes (DijkstraTopTxRaw era))
  deriving newtype (DijkstraTopTx era -> Int
DijkstraTopTx era -> ByteString
(DijkstraTopTx era -> ByteString)
-> (DijkstraTopTx era -> Int)
-> (forall i. Proxy i -> DijkstraTopTx era -> SafeHash i)
-> SafeToHash (DijkstraTopTx era)
forall i. Proxy i -> DijkstraTopTx era -> SafeHash i
forall era. DijkstraTopTx era -> Int
forall era. DijkstraTopTx era -> ByteString
forall t.
(t -> ByteString)
-> (t -> Int)
-> (forall i. Proxy i -> t -> SafeHash i)
-> SafeToHash t
forall era i. Proxy i -> DijkstraTopTx era -> SafeHash i
$coriginalBytes :: forall era. DijkstraTopTx era -> ByteString
originalBytes :: DijkstraTopTx era -> ByteString
$coriginalBytesSize :: forall era. DijkstraTopTx era -> Int
originalBytesSize :: DijkstraTopTx era -> Int
$cmakeHashWithExplicitProxys :: forall era i. Proxy i -> DijkstraTopTx era -> SafeHash i
makeHashWithExplicitProxys :: forall i. Proxy i -> DijkstraTopTx era -> SafeHash i
SafeToHash, DijkstraTopTx era -> Encoding
(DijkstraTopTx era -> Encoding) -> EncCBOR (DijkstraTopTx era)
forall era. DijkstraTopTx era -> Encoding
forall a. (a -> Encoding) -> EncCBOR a
$cencCBOR :: forall era. DijkstraTopTx era -> Encoding
encCBOR :: DijkstraTopTx era -> Encoding
EncCBOR)
  deriving ((forall x. DijkstraTopTx era -> Rep (DijkstraTopTx era) x)
-> (forall x. Rep (DijkstraTopTx era) x -> DijkstraTopTx era)
-> Generic (DijkstraTopTx era)
forall x. Rep (DijkstraTopTx era) x -> DijkstraTopTx era
forall x. DijkstraTopTx era -> Rep (DijkstraTopTx era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x. Rep (DijkstraTopTx era) x -> DijkstraTopTx era
forall era x. DijkstraTopTx era -> Rep (DijkstraTopTx era) x
$cfrom :: forall era x. DijkstraTopTx era -> Rep (DijkstraTopTx era) x
from :: forall x. DijkstraTopTx era -> Rep (DijkstraTopTx era) x
$cto :: forall era x. Rep (DijkstraTopTx era) x -> DijkstraTopTx era
to :: forall x. Rep (DijkstraTopTx era) x -> DijkstraTopTx era
Generic)

deriving newtype instance EraTx era => Eq (DijkstraTopTx era)

deriving newtype instance EraTx era => Show (DijkstraTopTx era)

deriving newtype instance EraTx era => NFData (DijkstraTopTx era)

instance Memoized (DijkstraTopTx era) where
  type RawType (DijkstraTopTx era) = DijkstraTopTxRaw era

instance HashAnnotated (DijkstraTopTx era) EraIndependentTx where
  hashAnnotated :: DijkstraTopTx era -> SafeHash EraIndependentTx
hashAnnotated = DijkstraTopTx era -> SafeHash EraIndependentTx
DijkstraTopTx era
-> SafeHash (MemoHashIndex (RawType (DijkstraTopTx era)))
forall t. Memoized t => t -> SafeHash (MemoHashIndex (RawType t))
getMemoSafeHash

deriving via
  Mem (DijkstraTopTxRaw era)
  instance
    EraTx era => DecCBOR (Annotator (DijkstraTopTx era))

bodyDijkstraTopTxL :: forall era. EraTx era => Lens' (DijkstraTopTx era) (TxBody TopTx era)
bodyDijkstraTopTxL :: forall era.
EraTx era =>
Lens' (DijkstraTopTx era) (TxBody TopTx era)
bodyDijkstraTopTxL = forall era t a b.
(Era era, EncCBOR (RawType t), Memoized t) =>
(RawType t -> a) -> (RawType t -> b -> RawType t) -> Lens t t a b
lensMemoRawType @era RawType (DijkstraTopTx era) -> TxBody TopTx era
DijkstraTopTxRaw era -> TxBody TopTx era
forall era. DijkstraTopTxRaw era -> TxBody TopTx era
dttrBody ((RawType (DijkstraTopTx era)
  -> TxBody TopTx era -> RawType (DijkstraTopTx era))
 -> Lens
      (DijkstraTopTx era)
      (DijkstraTopTx era)
      (TxBody TopTx era)
      (TxBody TopTx era))
-> (RawType (DijkstraTopTx era)
    -> TxBody TopTx era -> RawType (DijkstraTopTx era))
-> Lens
     (DijkstraTopTx era)
     (DijkstraTopTx era)
     (TxBody TopTx era)
     (TxBody TopTx era)
forall a b. (a -> b) -> a -> b
$ \RawType (DijkstraTopTx era)
r TxBody TopTx era
x -> RawType (DijkstraTopTx era)
r {dttrBody = x}

witsDijkstraTopTxL :: forall era. EraTx era => Lens' (DijkstraTopTx era) (TxWits era)
witsDijkstraTopTxL :: forall era. EraTx era => Lens' (DijkstraTopTx era) (TxWits era)
witsDijkstraTopTxL = forall era t a b.
(Era era, EncCBOR (RawType t), Memoized t) =>
(RawType t -> a) -> (RawType t -> b -> RawType t) -> Lens t t a b
lensMemoRawType @era RawType (DijkstraTopTx era) -> TxWits era
DijkstraTopTxRaw era -> TxWits era
forall era. DijkstraTopTxRaw era -> TxWits era
dttrWits ((RawType (DijkstraTopTx era)
  -> TxWits era -> RawType (DijkstraTopTx era))
 -> Lens
      (DijkstraTopTx era) (DijkstraTopTx era) (TxWits era) (TxWits era))
-> (RawType (DijkstraTopTx era)
    -> TxWits era -> RawType (DijkstraTopTx era))
-> Lens
     (DijkstraTopTx era) (DijkstraTopTx era) (TxWits era) (TxWits era)
forall a b. (a -> b) -> a -> b
$ \RawType (DijkstraTopTx era)
r TxWits era
x -> RawType (DijkstraTopTx era)
r {dttrWits = x}

isPhase2ValidDijkstraTopTxL :: forall era. EraTx era => Lens' (DijkstraTopTx era) IsPhase2Valid
isPhase2ValidDijkstraTopTxL :: forall era. EraTx era => Lens' (DijkstraTopTx era) IsPhase2Valid
isPhase2ValidDijkstraTopTxL =
  forall era t a b.
(Era era, EncCBOR (RawType t), Memoized t) =>
(RawType t -> a) -> (RawType t -> b -> RawType t) -> Lens t t a b
lensMemoRawType @era RawType (DijkstraTopTx era) -> IsPhase2Valid
DijkstraTopTxRaw era -> IsPhase2Valid
forall era. DijkstraTopTxRaw era -> IsPhase2Valid
dttrIsPhase2Valid ((RawType (DijkstraTopTx era)
  -> IsPhase2Valid -> RawType (DijkstraTopTx era))
 -> Lens
      (DijkstraTopTx era)
      (DijkstraTopTx era)
      IsPhase2Valid
      IsPhase2Valid)
-> (RawType (DijkstraTopTx era)
    -> IsPhase2Valid -> RawType (DijkstraTopTx era))
-> Lens
     (DijkstraTopTx era) (DijkstraTopTx era) IsPhase2Valid IsPhase2Valid
forall a b. (a -> b) -> a -> b
$ \RawType (DijkstraTopTx era)
r IsPhase2Valid
x -> RawType (DijkstraTopTx era)
r {dttrIsPhase2Valid = x}

auxDataDijkstraTopTxL ::
  forall era. EraTx era => Lens' (DijkstraTopTx era) (StrictMaybe (TxAuxData era))
auxDataDijkstraTopTxL :: forall era.
EraTx era =>
Lens' (DijkstraTopTx era) (StrictMaybe (TxAuxData era))
auxDataDijkstraTopTxL = forall era t a b.
(Era era, EncCBOR (RawType t), Memoized t) =>
(RawType t -> a) -> (RawType t -> b -> RawType t) -> Lens t t a b
lensMemoRawType @era RawType (DijkstraTopTx era) -> StrictMaybe (TxAuxData era)
DijkstraTopTxRaw era -> StrictMaybe (TxAuxData era)
forall era. DijkstraTopTxRaw era -> StrictMaybe (TxAuxData era)
dttrAuxData ((RawType (DijkstraTopTx era)
  -> StrictMaybe (TxAuxData era) -> RawType (DijkstraTopTx era))
 -> Lens
      (DijkstraTopTx era)
      (DijkstraTopTx era)
      (StrictMaybe (TxAuxData era))
      (StrictMaybe (TxAuxData era)))
-> (RawType (DijkstraTopTx era)
    -> StrictMaybe (TxAuxData era) -> RawType (DijkstraTopTx era))
-> Lens
     (DijkstraTopTx era)
     (DijkstraTopTx era)
     (StrictMaybe (TxAuxData era))
     (StrictMaybe (TxAuxData era))
forall a b. (a -> b) -> a -> b
$ \RawType (DijkstraTopTx era)
r StrictMaybe (TxAuxData era)
x -> RawType (DijkstraTopTx era)
r {dttrAuxData = x}

data DijkstraTx l era where
  DijkstraTopTx :: !(DijkstraTopTx era) -> DijkstraTx TopTx era
  DijkstraSubTx ::
    { forall era. DijkstraTx SubTx era -> TxBody SubTx era
dstBody :: !(TxBody SubTx era)
    , forall era. DijkstraTx SubTx era -> TxWits era
dstWits :: !(TxWits era)
    , forall era. DijkstraTx SubTx era -> StrictMaybe (TxAuxData era)
dstAuxData :: !(StrictMaybe (TxAuxData era))
    } ->
    DijkstraTx SubTx era

deriving instance EraTx era => Eq (DijkstraTx l era)

deriving instance EraTx era => Show (DijkstraTx l era)

instance
  ( EraTx era
  , NFData (TxWits era)
  , NFData (TxAuxData era)
  ) =>
  NFData (DijkstraTx l era)
  where
  rnf :: DijkstraTx l era -> ()
rnf (DijkstraTopTx DijkstraTopTx era
t) = DijkstraTopTx era -> ()
forall a. NFData a => a -> ()
rnf DijkstraTopTx era
t
  rnf DijkstraSubTx {StrictMaybe (TxAuxData era)
TxBody SubTx era
TxWits era
dstBody :: forall era. DijkstraTx SubTx era -> TxBody SubTx era
dstWits :: forall era. DijkstraTx SubTx era -> TxWits era
dstAuxData :: forall era. DijkstraTx SubTx era -> StrictMaybe (TxAuxData era)
dstBody :: TxBody SubTx era
dstWits :: TxWits era
dstAuxData :: StrictMaybe (TxAuxData era)
..} =
    TxBody SubTx era
dstBody TxBody SubTx era -> () -> ()
forall a b. NFData a => a -> b -> b
`deepseq`
      TxWits era
dstWits TxWits era -> () -> ()
forall a b. NFData a => a -> b -> b
`deepseq`
        StrictMaybe (TxAuxData era) -> ()
forall a. NFData a => a -> ()
rnf StrictMaybe (TxAuxData era)
dstAuxData

deriving via
  InspectHeap (DijkstraTx l era)
  instance
    ( Era era
    , Typeable l
    ) =>
    NoThunks (DijkstraTx l era)

instance (EraTx era, Typeable l) => ToCBOR (DijkstraTx l era) where
  toCBOR :: DijkstraTx l era -> Encoding
toCBOR = forall era t. (Era era, EncCBOR t) => t -> Encoding
toEraCBOR @era

instance EraTx era => EncCBOR (DijkstraTx l era) where
  encCBOR :: DijkstraTx l era -> Encoding
encCBOR = DijkstraTx l era -> Encoding
forall (l :: TxLevel) era.
(EncCBOR (TxBody l era), EncCBOR (TxWits era),
 EncCBOR (TxAuxData era)) =>
DijkstraTx l era -> Encoding
toCBORForMempoolSubmission

instance SafeToHash (DijkstraTx TopTx era) where
  originalBytes :: DijkstraTx TopTx era -> ByteString
originalBytes (DijkstraTopTx DijkstraTopTx era
t) = DijkstraTopTx era -> ByteString
forall t. SafeToHash t => t -> ByteString
originalBytes DijkstraTopTx era
t
  originalBytesSize :: DijkstraTx TopTx era -> Int
originalBytesSize (DijkstraTopTx DijkstraTopTx era
t) = DijkstraTopTx era -> Int
forall t. SafeToHash t => t -> Int
originalBytesSize DijkstraTopTx era
t

instance HashAnnotated (DijkstraTx TopTx era) EraIndependentTx where
  hashAnnotated :: DijkstraTx TopTx era -> SafeHash EraIndependentTx
hashAnnotated (DijkstraTopTx DijkstraTopTx era
t) = DijkstraTopTx era
-> SafeHash (MemoHashIndex (RawType (DijkstraTopTx era)))
forall t. Memoized t => t -> SafeHash (MemoHashIndex (RawType t))
getMemoSafeHash DijkstraTopTx era
t

-- | Decode a top-level transaction in the mempool format:
-- @[transaction_body, transaction_witness_set, auxiliary_data\/ nil]@. For
-- backwards compatibility the legacy
-- @[transaction_body, transaction_witness_set, true, auxiliary_data\/ nil]@
-- format is also accepted, but only with the `IsPhase2Valid` flag set to `True`.
decodeDijkstraTopTxInMempool ::
  forall era s. EraTx era => Decoder s (Annotator (DijkstraTx TopTx era))
decodeDijkstraTopTxInMempool :: forall era s.
EraTx era =>
Decoder s (Annotator (DijkstraTx TopTx era))
decodeDijkstraTopTxInMempool =
  ((Int, Annotator (DijkstraTx TopTx era))
 -> Annotator (DijkstraTx TopTx era))
-> Decoder s (Int, Annotator (DijkstraTx TopTx era))
-> Decoder s (Annotator (DijkstraTx TopTx era))
forall a b. (a -> b) -> Decoder s a -> Decoder s b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int, Annotator (DijkstraTx TopTx era))
-> Annotator (DijkstraTx TopTx era)
forall a b. (a, b) -> b
snd (Decoder s (Int, Annotator (DijkstraTx TopTx era))
 -> Decoder s (Annotator (DijkstraTx TopTx era)))
-> Decoder s (Int, Annotator (DijkstraTx TopTx era))
-> Decoder s (Annotator (DijkstraTx TopTx era))
forall a b. (a -> b) -> a -> b
$ Text
-> ((Int, Annotator (DijkstraTx TopTx era)) -> Int)
-> Decoder s (Int, Annotator (DijkstraTx TopTx era))
-> Decoder s (Int, Annotator (DijkstraTx TopTx era))
forall a s. Text -> (a -> Int) -> Decoder s a -> Decoder s a
decodeRecordNamed Text
"DijkstraTx" (Int, Annotator (DijkstraTx TopTx era)) -> Int
forall a b. (a, b) -> a
fst (Decoder s (Int, Annotator (DijkstraTx TopTx era))
 -> Decoder s (Int, Annotator (DijkstraTx TopTx era)))
-> Decoder s (Int, Annotator (DijkstraTx TopTx era))
-> Decoder s (Int, Annotator (DijkstraTx TopTx era))
forall a b. (a -> b) -> a -> b
$ do
    bodyAnn <- Decoder s (Annotator (TxBody TopTx era))
forall s. Decoder s (Annotator (TxBody TopTx era))
forall a s. DecCBOR a => Decoder s a
decCBOR
    witsAnn <- decCBOR
    isValidFlagSupplied <-
      peekTokenType >>= \case
        TokenType
TypeBool ->
          Decoder s Bool
forall s. Decoder s Bool
forall a s. DecCBOR a => Decoder s a
decCBOR Decoder s Bool -> (Bool -> Decoder s Bool) -> Decoder s Bool
forall a b. Decoder s a -> (a -> Decoder s b) -> Decoder s b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
            Bool
True -> Bool -> Decoder s Bool
forall a. a -> Decoder s a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
            Bool
False -> String -> Decoder s Bool
forall a. String -> Decoder s a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Value `false` not allowed for `isPhase2Valid`"
        TokenType
_ -> Bool -> Decoder s Bool
forall a. a -> Decoder s a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
    auxAnn <- decodeNullStrictMaybe decCBOR
    let
      -- `isValid == False` can no longer be supplied in an encoded transaction.
      dijkstraTopTx =
        DijkstraTopTx era -> DijkstraTx TopTx era
forall era. DijkstraTopTx era -> DijkstraTx TopTx era
DijkstraTopTx (DijkstraTopTx era -> DijkstraTx TopTx era)
-> (DijkstraTopTxRaw era -> DijkstraTopTx era)
-> DijkstraTopTxRaw era
-> DijkstraTx TopTx era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era
          (DijkstraTopTxRaw era -> DijkstraTx TopTx era)
-> Annotator (DijkstraTopTxRaw era)
-> Annotator (DijkstraTx TopTx era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (TxBody TopTx era
-> TxWits era
-> IsPhase2Valid
-> StrictMaybe (TxAuxData era)
-> DijkstraTopTxRaw era
forall era.
TxBody TopTx era
-> TxWits era
-> IsPhase2Valid
-> StrictMaybe (TxAuxData era)
-> DijkstraTopTxRaw era
DijkstraTopTxRaw (TxBody TopTx era
 -> TxWits era
 -> IsPhase2Valid
 -> StrictMaybe (TxAuxData era)
 -> DijkstraTopTxRaw era)
-> Annotator (TxBody TopTx era)
-> Annotator
     (TxWits era
      -> IsPhase2Valid
      -> StrictMaybe (TxAuxData era)
      -> DijkstraTopTxRaw era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Annotator (TxBody TopTx era)
bodyAnn Annotator
  (TxWits era
   -> IsPhase2Valid
   -> StrictMaybe (TxAuxData era)
   -> DijkstraTopTxRaw era)
-> Annotator (TxWits era)
-> Annotator
     (IsPhase2Valid
      -> StrictMaybe (TxAuxData era) -> DijkstraTopTxRaw era)
forall a b. Annotator (a -> b) -> Annotator a -> Annotator b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Annotator (TxWits era)
witsAnn Annotator
  (IsPhase2Valid
   -> StrictMaybe (TxAuxData era) -> DijkstraTopTxRaw era)
-> Annotator IsPhase2Valid
-> Annotator (StrictMaybe (TxAuxData era) -> DijkstraTopTxRaw era)
forall a b. Annotator (a -> b) -> Annotator a -> Annotator b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IsPhase2Valid -> Annotator IsPhase2Valid
forall a. a -> Annotator a
forall (f :: * -> *) a. Applicative f => a -> f a
pure IsPhase2Valid
Phase2Valid Annotator (StrictMaybe (TxAuxData era) -> DijkstraTopTxRaw era)
-> Annotator (StrictMaybe (TxAuxData era))
-> Annotator (DijkstraTopTxRaw era)
forall a b. Annotator (a -> b) -> Annotator a -> Annotator b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> StrictMaybe (Annotator (TxAuxData era))
-> Annotator (StrictMaybe (TxAuxData era))
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a.
Monad m =>
StrictMaybe (m a) -> m (StrictMaybe a)
sequence StrictMaybe (Annotator (TxAuxData era))
auxAnn)
    pure (if isValidFlagSupplied then 4 else 3, dijkstraTopTx)

-- | Decode a top-level transaction in the format used inside a block body:
-- @[transaction_body, transaction_witness_set, auxiliary_data\/ nil, is_valid]@.
-- Unlike in the mempool format, the trailing `IsPhase2Valid` flag is mandatory
-- and can be `False`, since it is set by the block producer.
decodeDijkstraTopTxInBlock :: EraTx era => Decoder s (Annotator (DijkstraTx TopTx era))
decodeDijkstraTopTxInBlock :: forall era s.
EraTx era =>
Decoder s (Annotator (DijkstraTx TopTx era))
decodeDijkstraTopTxInBlock = (DijkstraTopTx era -> DijkstraTx TopTx era)
-> Annotator (DijkstraTopTx era)
-> Annotator (DijkstraTx TopTx era)
forall a b. (a -> b) -> Annotator a -> Annotator b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap DijkstraTopTx era -> DijkstraTx TopTx era
forall era. DijkstraTopTx era -> DijkstraTx TopTx era
DijkstraTopTx (Annotator (DijkstraTopTx era) -> Annotator (DijkstraTx TopTx era))
-> Decoder s (Annotator (DijkstraTopTx era))
-> Decoder s (Annotator (DijkstraTx TopTx era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (Annotator (DijkstraTopTx era))
forall s. Decoder s (Annotator (DijkstraTopTx era))
forall a s. DecCBOR a => Decoder s a
decCBOR

instance (EraTx era, Typeable l) => DecCBOR (Annotator (DijkstraTx l era)) where
  decCBOR :: forall s. Decoder s (Annotator (DijkstraTx l era))
decCBOR = forall (l :: TxLevel) era a.
(Typeable l, HasCallStack) =>
(STxBothLevels l era -> a) -> a
withSTxBothLevels @l ((STxBothLevels l (ZonkAny 1)
  -> Decoder s (Annotator (DijkstraTx l era)))
 -> Decoder s (Annotator (DijkstraTx l era)))
-> (STxBothLevels l (ZonkAny 1)
    -> Decoder s (Annotator (DijkstraTx l era)))
-> Decoder s (Annotator (DijkstraTx l era))
forall a b. (a -> b) -> a -> b
$ \case
    STxBothLevels l (ZonkAny 1)
STopTx -> Decoder s (Annotator (DijkstraTx l era))
Decoder s (Annotator (DijkstraTx TopTx era))
forall era s.
EraTx era =>
Decoder s (Annotator (DijkstraTx TopTx era))
decodeDijkstraTopTxInMempool
    STxBothLevels l (ZonkAny 1)
SSubTx ->
      Text
-> (Annotator (DijkstraTx l era) -> Int)
-> Decoder s (Annotator (DijkstraTx l era))
-> Decoder s (Annotator (DijkstraTx l era))
forall a s. Text -> (a -> Int) -> Decoder s a -> Decoder s a
decodeRecordNamed Text
"DijkstraSubTx" (Int -> Annotator (DijkstraTx l era) -> Int
forall a b. a -> b -> a
const Int
3) (Decoder s (Annotator (DijkstraTx l era))
 -> Decoder s (Annotator (DijkstraTx l era)))
-> Decoder s (Annotator (DijkstraTx l era))
-> Decoder s (Annotator (DijkstraTx l era))
forall a b. (a -> b) -> a -> b
$ do
        body <- Decoder s (Annotator (TxBody SubTx era))
forall s. Decoder s (Annotator (TxBody SubTx era))
forall a s. DecCBOR a => Decoder s a
decCBOR
        wits <- decCBOR
        aux <- sequence <$> decodeNullStrictMaybe decCBOR
        pure $ DijkstraSubTx <$> body <*> wits <*> aux

instance HasEraTxLevel DijkstraTx DijkstraEra where
  toSTxLevel :: forall (l :: TxLevel).
DijkstraTx l DijkstraEra -> STxLevel l DijkstraEra
toSTxLevel DijkstraTopTx {} = STxLevel l DijkstraEra
STxBothLevels TopTx DijkstraEra
forall era. STxBothLevels TopTx era
STopTx
  toSTxLevel DijkstraSubTx {} = STxLevel l DijkstraEra
STxBothLevels SubTx DijkstraEra
forall era. STxBothLevels SubTx era
SSubTx

instance HasEraTxLevel Tx DijkstraEra where
  toSTxLevel :: forall (l :: TxLevel). Tx l DijkstraEra -> STxLevel l DijkstraEra
toSTxLevel = DijkstraTx l DijkstraEra -> STxLevel l DijkstraEra
DijkstraTx l DijkstraEra -> STxBothLevels l DijkstraEra
forall (l :: TxLevel).
DijkstraTx l DijkstraEra -> STxLevel l DijkstraEra
forall (t :: TxLevel -> * -> *) era (l :: TxLevel).
HasEraTxLevel t era =>
t l era -> STxLevel l era
toSTxLevel (DijkstraTx l DijkstraEra -> STxBothLevels l DijkstraEra)
-> (Tx l DijkstraEra -> DijkstraTx l DijkstraEra)
-> Tx l DijkstraEra
-> STxBothLevels l DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tx l DijkstraEra -> DijkstraTx l DijkstraEra
forall (l :: TxLevel). Tx l DijkstraEra -> DijkstraTx l DijkstraEra
unDijkstraTx

mkBasicDijkstraTx :: TxBody l DijkstraEra -> DijkstraTx l DijkstraEra
mkBasicDijkstraTx :: forall (l :: TxLevel).
TxBody l DijkstraEra -> DijkstraTx l DijkstraEra
mkBasicDijkstraTx TxBody l DijkstraEra
txBody =
  case TxBody l DijkstraEra -> STxLevel l DijkstraEra
forall (l :: TxLevel).
TxBody l DijkstraEra -> STxLevel l DijkstraEra
forall (t :: TxLevel -> * -> *) era (l :: TxLevel).
HasEraTxLevel t era =>
t l era -> STxLevel l era
toSTxLevel TxBody l DijkstraEra
txBody of
    STxLevel l DijkstraEra
STxBothLevels l DijkstraEra
STopTx ->
      DijkstraTopTx DijkstraEra -> DijkstraTx l DijkstraEra
DijkstraTopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra
forall era. DijkstraTopTx era -> DijkstraTx TopTx era
DijkstraTopTx (DijkstraTopTx DijkstraEra -> DijkstraTx l DijkstraEra)
-> (DijkstraTopTxRaw DijkstraEra -> DijkstraTopTx DijkstraEra)
-> DijkstraTopTxRaw DijkstraEra
-> DijkstraTx l DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @DijkstraEra (DijkstraTopTxRaw DijkstraEra -> DijkstraTx l DijkstraEra)
-> DijkstraTopTxRaw DijkstraEra -> DijkstraTx l DijkstraEra
forall a b. (a -> b) -> a -> b
$
        TxBody TopTx DijkstraEra
-> TxWits DijkstraEra
-> IsPhase2Valid
-> StrictMaybe (TxAuxData DijkstraEra)
-> DijkstraTopTxRaw DijkstraEra
forall era.
TxBody TopTx era
-> TxWits era
-> IsPhase2Valid
-> StrictMaybe (TxAuxData era)
-> DijkstraTopTxRaw era
DijkstraTopTxRaw
          TxBody l DijkstraEra
TxBody TopTx DijkstraEra
txBody
          TxWits DijkstraEra
AlonzoTxWits DijkstraEra
forall a. Monoid a => a
mempty
          IsPhase2Valid
Phase2Valid
          StrictMaybe (TxAuxData DijkstraEra)
StrictMaybe (AlonzoTxAuxData DijkstraEra)
forall a. StrictMaybe a
SNothing
    STxLevel l DijkstraEra
STxBothLevels l DijkstraEra
SSubTx ->
      TxBody SubTx DijkstraEra
-> TxWits DijkstraEra
-> StrictMaybe (TxAuxData DijkstraEra)
-> DijkstraTx SubTx DijkstraEra
forall era.
TxBody SubTx era
-> TxWits era
-> StrictMaybe (TxAuxData era)
-> DijkstraTx SubTx era
DijkstraSubTx
        TxBody l DijkstraEra
TxBody SubTx DijkstraEra
txBody
        TxWits DijkstraEra
AlonzoTxWits DijkstraEra
forall a. Monoid a => a
mempty
        StrictMaybe (TxAuxData DijkstraEra)
StrictMaybe (AlonzoTxAuxData DijkstraEra)
forall a. StrictMaybe a
SNothing

instance EraTx DijkstraEra where
  newtype Tx l DijkstraEra = MkDijkstraTx {forall (l :: TxLevel). Tx l DijkstraEra -> DijkstraTx l DijkstraEra
unDijkstraTx :: DijkstraTx l DijkstraEra}
    deriving newtype (Tx l DijkstraEra -> Tx l DijkstraEra -> Bool
(Tx l DijkstraEra -> Tx l DijkstraEra -> Bool)
-> (Tx l DijkstraEra -> Tx l DijkstraEra -> Bool)
-> Eq (Tx l DijkstraEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall (l :: TxLevel). Tx l DijkstraEra -> Tx l DijkstraEra -> Bool
$c== :: forall (l :: TxLevel). Tx l DijkstraEra -> Tx l DijkstraEra -> Bool
== :: Tx l DijkstraEra -> Tx l DijkstraEra -> Bool
$c/= :: forall (l :: TxLevel). Tx l DijkstraEra -> Tx l DijkstraEra -> Bool
/= :: Tx l DijkstraEra -> Tx l DijkstraEra -> Bool
Eq, Int -> Tx l DijkstraEra -> ShowS
[Tx l DijkstraEra] -> ShowS
Tx l DijkstraEra -> String
(Int -> Tx l DijkstraEra -> ShowS)
-> (Tx l DijkstraEra -> String)
-> ([Tx l DijkstraEra] -> ShowS)
-> Show (Tx l DijkstraEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (l :: TxLevel). Int -> Tx l DijkstraEra -> ShowS
forall (l :: TxLevel). [Tx l DijkstraEra] -> ShowS
forall (l :: TxLevel). Tx l DijkstraEra -> String
$cshowsPrec :: forall (l :: TxLevel). Int -> Tx l DijkstraEra -> ShowS
showsPrec :: Int -> Tx l DijkstraEra -> ShowS
$cshow :: forall (l :: TxLevel). Tx l DijkstraEra -> String
show :: Tx l DijkstraEra -> String
$cshowList :: forall (l :: TxLevel). [Tx l DijkstraEra] -> ShowS
showList :: [Tx l DijkstraEra] -> ShowS
Show, Tx l DijkstraEra -> ()
(Tx l DijkstraEra -> ()) -> NFData (Tx l DijkstraEra)
forall a. (a -> ()) -> NFData a
forall (l :: TxLevel). Tx l DijkstraEra -> ()
$crnf :: forall (l :: TxLevel). Tx l DijkstraEra -> ()
rnf :: Tx l DijkstraEra -> ()
NFData, Context -> Tx l DijkstraEra -> IO (Maybe ThunkInfo)
Proxy (Tx l DijkstraEra) -> String
(Context -> Tx l DijkstraEra -> IO (Maybe ThunkInfo))
-> (Context -> Tx l DijkstraEra -> IO (Maybe ThunkInfo))
-> (Proxy (Tx l DijkstraEra) -> String)
-> NoThunks (Tx l DijkstraEra)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
forall (l :: TxLevel).
Typeable l =>
Context -> Tx l DijkstraEra -> IO (Maybe ThunkInfo)
forall (l :: TxLevel).
Typeable l =>
Proxy (Tx l DijkstraEra) -> String
$cnoThunks :: forall (l :: TxLevel).
Typeable l =>
Context -> Tx l DijkstraEra -> IO (Maybe ThunkInfo)
noThunks :: Context -> Tx l DijkstraEra -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall (l :: TxLevel).
Typeable l =>
Context -> Tx l DijkstraEra -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> Tx l DijkstraEra -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall (l :: TxLevel).
Typeable l =>
Proxy (Tx l DijkstraEra) -> String
showTypeOf :: Proxy (Tx l DijkstraEra) -> String
NoThunks, Typeable (Tx l DijkstraEra)
Typeable (Tx l DijkstraEra) =>
(Tx l DijkstraEra -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy (Tx l DijkstraEra) -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy [Tx l DijkstraEra] -> Size)
-> ToCBOR (Tx l DijkstraEra)
Tx l DijkstraEra -> Encoding
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [Tx l DijkstraEra] -> Size
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (Tx l DijkstraEra) -> Size
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> ToCBOR a
forall (l :: TxLevel). Typeable l => Typeable (Tx l DijkstraEra)
forall (l :: TxLevel). Typeable l => Tx l DijkstraEra -> Encoding
forall (l :: TxLevel).
Typeable l =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [Tx l DijkstraEra] -> Size
forall (l :: TxLevel).
Typeable l =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (Tx l DijkstraEra) -> Size
$ctoCBOR :: forall (l :: TxLevel). Typeable l => Tx l DijkstraEra -> Encoding
toCBOR :: Tx l DijkstraEra -> Encoding
$cencodedSizeExpr :: forall (l :: TxLevel).
Typeable l =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (Tx l DijkstraEra) -> Size
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (Tx l DijkstraEra) -> Size
$cencodedListSizeExpr :: forall (l :: TxLevel).
Typeable l =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [Tx l DijkstraEra] -> Size
encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [Tx l DijkstraEra] -> Size
ToCBOR, Tx l DijkstraEra -> Encoding
(Tx l DijkstraEra -> Encoding) -> EncCBOR (Tx l DijkstraEra)
forall a. (a -> Encoding) -> EncCBOR a
forall (l :: TxLevel). Tx l DijkstraEra -> Encoding
$cencCBOR :: forall (l :: TxLevel). Tx l DijkstraEra -> Encoding
encCBOR :: Tx l DijkstraEra -> Encoding
EncCBOR)
    deriving ((forall x. Tx l DijkstraEra -> Rep (Tx l DijkstraEra) x)
-> (forall x. Rep (Tx l DijkstraEra) x -> Tx l DijkstraEra)
-> Generic (Tx l DijkstraEra)
forall x. Rep (Tx l DijkstraEra) x -> Tx l DijkstraEra
forall x. Tx l DijkstraEra -> Rep (Tx l DijkstraEra) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (l :: TxLevel) x.
Rep (Tx l DijkstraEra) x -> Tx l DijkstraEra
forall (l :: TxLevel) x.
Tx l DijkstraEra -> Rep (Tx l DijkstraEra) x
$cfrom :: forall (l :: TxLevel) x.
Tx l DijkstraEra -> Rep (Tx l DijkstraEra) x
from :: forall x. Tx l DijkstraEra -> Rep (Tx l DijkstraEra) x
$cto :: forall (l :: TxLevel) x.
Rep (Tx l DijkstraEra) x -> Tx l DijkstraEra
to :: forall x. Rep (Tx l DijkstraEra) x -> Tx l DijkstraEra
Generic)

  type StAnnTx l DijkstraEra = DijkstraStAnnTx l DijkstraEra

  type StAnnTxCache DijkstraEra = Map.Map ScriptHash (SupportedPlutusRunnable DijkstraEra)

  txStAnnTxG :: forall (l :: TxLevel).
SimpleGetter (StAnnTx l DijkstraEra) (Tx l DijkstraEra)
txStAnnTxG = (StAnnTx l DijkstraEra -> Tx l DijkstraEra)
-> SimpleGetter (StAnnTx l DijkstraEra) (Tx l DijkstraEra)
forall s a. (s -> a) -> SimpleGetter s a
to ((StAnnTx l DijkstraEra -> Tx l DijkstraEra)
 -> SimpleGetter (StAnnTx l DijkstraEra) (Tx l DijkstraEra))
-> (StAnnTx l DijkstraEra -> Tx l DijkstraEra)
-> SimpleGetter (StAnnTx l DijkstraEra) (Tx l DijkstraEra)
forall a b. (a -> b) -> a -> b
$ \case
    DijkstraStAnnTopTx {Tx TopTx DijkstraEra
dsattTx :: Tx TopTx DijkstraEra
dsattTx :: forall era. DijkstraStAnnTx TopTx era -> Tx TopTx era
dsattTx} -> Tx l DijkstraEra
Tx TopTx DijkstraEra
dsattTx
    DijkstraStAnnSubTx {Tx SubTx DijkstraEra
dsastTx :: Tx SubTx DijkstraEra
dsastTx :: forall era. DijkstraStAnnTx SubTx era -> Tx SubTx era
dsastTx} -> Tx l DijkstraEra
Tx SubTx DijkstraEra
dsastTx

  cacheStAnnTxG :: forall (l :: TxLevel).
SimpleGetter (StAnnTx l DijkstraEra) (StAnnTxCache DijkstraEra)
cacheStAnnTxG = (StAnnTx l DijkstraEra -> StAnnTxCache DijkstraEra)
-> SimpleGetter (StAnnTx l DijkstraEra) (StAnnTxCache DijkstraEra)
forall s a. (s -> a) -> SimpleGetter s a
to ((StAnnTx l DijkstraEra -> StAnnTxCache DijkstraEra)
 -> SimpleGetter (StAnnTx l DijkstraEra) (StAnnTxCache DijkstraEra))
-> (StAnnTx l DijkstraEra -> StAnnTxCache DijkstraEra)
-> SimpleGetter (StAnnTx l DijkstraEra) (StAnnTxCache DijkstraEra)
forall a b. (a -> b) -> a -> b
$ \case
    DijkstraStAnnTopTx {Map ScriptHash (SupportedPlutusRunnable DijkstraEra)
dsattPlutusRunnableCache :: Map ScriptHash (SupportedPlutusRunnable DijkstraEra)
dsattPlutusRunnableCache :: forall era.
DijkstraStAnnTx TopTx era
-> Map ScriptHash (SupportedPlutusRunnable era)
dsattPlutusRunnableCache} -> Map ScriptHash (SupportedPlutusRunnable DijkstraEra)
StAnnTxCache DijkstraEra
dsattPlutusRunnableCache
    DijkstraStAnnSubTx {Map ScriptHash (SupportedPlutusRunnable DijkstraEra)
dsastPlutusRunnableCache :: Map ScriptHash (SupportedPlutusRunnable DijkstraEra)
dsastPlutusRunnableCache :: forall era.
DijkstraStAnnTx SubTx era
-> Map ScriptHash (SupportedPlutusRunnable era)
dsastPlutusRunnableCache} -> Map ScriptHash (SupportedPlutusRunnable DijkstraEra)
StAnnTxCache DijkstraEra
dsastPlutusRunnableCache

  mkBasicTx :: forall (l :: TxLevel). TxBody l DijkstraEra -> Tx l DijkstraEra
mkBasicTx = DijkstraTx l DijkstraEra -> Tx l DijkstraEra
forall (l :: TxLevel). DijkstraTx l DijkstraEra -> Tx l DijkstraEra
MkDijkstraTx (DijkstraTx l DijkstraEra -> Tx l DijkstraEra)
-> (TxBody l DijkstraEra -> DijkstraTx l DijkstraEra)
-> TxBody l DijkstraEra
-> Tx l DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxBody l DijkstraEra -> DijkstraTx l DijkstraEra
forall (l :: TxLevel).
TxBody l DijkstraEra -> DijkstraTx l DijkstraEra
mkBasicDijkstraTx

  bodyTxL :: forall (l :: TxLevel).
Lens' (Tx l DijkstraEra) (TxBody l DijkstraEra)
bodyTxL = (DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
forall (l :: TxLevel) (f :: * -> *).
Functor f =>
(DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
dijkstraTxL ((DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
 -> Tx l DijkstraEra -> f (Tx l DijkstraEra))
-> ((TxBody l DijkstraEra -> f (TxBody l DijkstraEra))
    -> DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> (TxBody l DijkstraEra -> f (TxBody l DijkstraEra))
-> Tx l DijkstraEra
-> f (Tx l DijkstraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxBody l DijkstraEra -> f (TxBody l DijkstraEra))
-> DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra)
forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (TxBody l era)
Lens' (DijkstraTx l DijkstraEra) (TxBody l DijkstraEra)
bodyDijkstraTxL
  {-# INLINE bodyTxL #-}

  witsTxL :: forall (l :: TxLevel).
Lens' (Tx l DijkstraEra) (TxWits DijkstraEra)
witsTxL = (DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
forall (l :: TxLevel) (f :: * -> *).
Functor f =>
(DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
dijkstraTxL ((DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
 -> Tx l DijkstraEra -> f (Tx l DijkstraEra))
-> ((AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra))
    -> DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> (AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra))
-> Tx l DijkstraEra
-> f (Tx l DijkstraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxWits DijkstraEra -> f (TxWits DijkstraEra))
-> DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra)
(AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra))
-> DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra)
forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (TxWits era)
Lens' (DijkstraTx l DijkstraEra) (TxWits DijkstraEra)
witsDijkstraTxL
  {-# INLINE witsTxL #-}

  auxDataTxL :: forall (l :: TxLevel).
Lens' (Tx l DijkstraEra) (StrictMaybe (TxAuxData DijkstraEra))
auxDataTxL = (DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
forall (l :: TxLevel) (f :: * -> *).
Functor f =>
(DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
dijkstraTxL ((DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
 -> Tx l DijkstraEra -> f (Tx l DijkstraEra))
-> ((StrictMaybe (AlonzoTxAuxData DijkstraEra)
     -> f (StrictMaybe (AlonzoTxAuxData DijkstraEra)))
    -> DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> (StrictMaybe (AlonzoTxAuxData DijkstraEra)
    -> f (StrictMaybe (AlonzoTxAuxData DijkstraEra)))
-> Tx l DijkstraEra
-> f (Tx l DijkstraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe (TxAuxData DijkstraEra)
 -> f (StrictMaybe (TxAuxData DijkstraEra)))
-> DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra)
(StrictMaybe (AlonzoTxAuxData DijkstraEra)
 -> f (StrictMaybe (AlonzoTxAuxData DijkstraEra)))
-> DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra)
forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (StrictMaybe (TxAuxData era))
Lens'
  (DijkstraTx l DijkstraEra) (StrictMaybe (TxAuxData DijkstraEra))
auxDataDijkstraTxL
  {-# INLINE auxDataTxL #-}

  sizeTxF :: forall (l :: TxLevel).
HasCallStack =>
SimpleGetter (Tx l DijkstraEra) Word32
sizeTxF = (DijkstraTx l DijkstraEra -> Const r (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> Const r (Tx l DijkstraEra)
forall (l :: TxLevel) (f :: * -> *).
Functor f =>
(DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
dijkstraTxL ((DijkstraTx l DijkstraEra -> Const r (DijkstraTx l DijkstraEra))
 -> Tx l DijkstraEra -> Const r (Tx l DijkstraEra))
-> ((Word32 -> Const r Word32)
    -> DijkstraTx l DijkstraEra -> Const r (DijkstraTx l DijkstraEra))
-> (Word32 -> Const r Word32)
-> Tx l DijkstraEra
-> Const r (Tx l DijkstraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Word32 -> Const r Word32)
-> DijkstraTx l DijkstraEra -> Const r (DijkstraTx l DijkstraEra)
SimpleGetter (DijkstraTx l DijkstraEra) Word32
forall era (l :: TxLevel).
EraTx era =>
SimpleGetter (DijkstraTx l era) Word32
sizeDijkstraTxF
  {-# INLINE sizeTxF #-}

  validateNativeScript :: forall (l :: TxLevel).
Tx l DijkstraEra -> NativeScript DijkstraEra -> Bool
validateNativeScript = Tx l DijkstraEra -> NativeScript DijkstraEra -> Bool
forall era (l :: TxLevel).
(EraTx era, DijkstraEraTxBody era, DijkstraEraScript era,
 NativeScript era ~ DijkstraNativeScript era) =>
Tx l era -> NativeScript era -> Bool
validateDijkstraNativeScript
  {-# INLINE validateNativeScript #-}

  getMinFeeTx :: forall (l :: TxLevel).
PParams DijkstraEra -> Tx l DijkstraEra -> Int -> Coin
getMinFeeTx = PParams DijkstraEra -> Tx l DijkstraEra -> Int -> Coin
forall era (l :: TxLevel).
(AlonzoEraTx era, ConwayEraPParams era) =>
PParams era -> Tx l era -> Int -> Coin
getConwayMinFeeTx

  allInputsTxBodyF :: SimpleGetter (TxBody TopTx DijkstraEra) (Set TxIn)
allInputsTxBodyF = Getting r (TxBody TopTx DijkstraEra) (Set TxIn)
forall era.
(EraTx era, DijkstraEraTxBody era) =>
SimpleGetter (TxBody TopTx era) (Set TxIn)
SimpleGetter (TxBody TopTx DijkstraEra) (Set TxIn)
dijkstraAllInputsTxBodyF
  {-# INLINE allInputsTxBodyF #-}

bodyDijkstraTxL :: EraTx era => Lens' (DijkstraTx l era) (TxBody l era)
bodyDijkstraTxL :: forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (TxBody l era)
bodyDijkstraTxL =
  (DijkstraTx l era -> TxBody l era)
-> (DijkstraTx l era -> TxBody l era -> DijkstraTx l era)
-> Lens
     (DijkstraTx l era) (DijkstraTx l era) (TxBody l era) (TxBody l era)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens
    ( \case
        DijkstraTopTx DijkstraTopTx era
t -> DijkstraTopTx era
t DijkstraTopTx era
-> Getting (TxBody l era) (DijkstraTopTx era) (TxBody l era)
-> TxBody l era
forall s a. s -> Getting a s a -> a
^. Getting (TxBody l era) (DijkstraTopTx era) (TxBody l era)
(TxBody TopTx era -> Const (TxBody l era) (TxBody TopTx era))
-> DijkstraTopTx era -> Const (TxBody l era) (DijkstraTopTx era)
forall era.
EraTx era =>
Lens' (DijkstraTopTx era) (TxBody TopTx era)
Lens' (DijkstraTopTx era) (TxBody TopTx era)
bodyDijkstraTopTxL
        DijkstraSubTx {TxBody SubTx era
dstBody :: forall era. DijkstraTx SubTx era -> TxBody SubTx era
dstBody :: TxBody SubTx era
dstBody} -> TxBody l era
TxBody SubTx era
dstBody
    )
    ( \case
        DijkstraTopTx DijkstraTopTx era
t -> \TxBody l era
x -> DijkstraTopTx era -> DijkstraTx TopTx era
forall era. DijkstraTopTx era -> DijkstraTx TopTx era
DijkstraTopTx (DijkstraTopTx era
t DijkstraTopTx era
-> (DijkstraTopTx era -> DijkstraTopTx era) -> DijkstraTopTx era
forall a b. a -> (a -> b) -> b
& (TxBody TopTx era -> Identity (TxBody TopTx era))
-> DijkstraTopTx era -> Identity (DijkstraTopTx era)
forall era.
EraTx era =>
Lens' (DijkstraTopTx era) (TxBody TopTx era)
Lens' (DijkstraTopTx era) (TxBody TopTx era)
bodyDijkstraTopTxL ((TxBody TopTx era -> Identity (TxBody TopTx era))
 -> DijkstraTopTx era -> Identity (DijkstraTopTx era))
-> TxBody TopTx era -> DijkstraTopTx era -> DijkstraTopTx era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxBody l era
TxBody TopTx era
x)
        tx :: DijkstraTx l era
tx@DijkstraSubTx {} -> \TxBody l era
x -> DijkstraTx l era
tx {dstBody = x}
    )

witsDijkstraTxL :: EraTx era => Lens' (DijkstraTx l era) (TxWits era)
witsDijkstraTxL :: forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (TxWits era)
witsDijkstraTxL =
  (DijkstraTx l era -> TxWits era)
-> (DijkstraTx l era -> TxWits era -> DijkstraTx l era)
-> Lens
     (DijkstraTx l era) (DijkstraTx l era) (TxWits era) (TxWits era)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens
    ( \case
        DijkstraTopTx DijkstraTopTx era
t -> DijkstraTopTx era
t DijkstraTopTx era
-> Getting (TxWits era) (DijkstraTopTx era) (TxWits era)
-> TxWits era
forall s a. s -> Getting a s a -> a
^. Getting (TxWits era) (DijkstraTopTx era) (TxWits era)
forall era. EraTx era => Lens' (DijkstraTopTx era) (TxWits era)
Lens' (DijkstraTopTx era) (TxWits era)
witsDijkstraTopTxL
        DijkstraSubTx {TxWits era
dstWits :: forall era. DijkstraTx SubTx era -> TxWits era
dstWits :: TxWits era
dstWits} -> TxWits era
dstWits
    )
    ( \case
        DijkstraTopTx DijkstraTopTx era
t -> \TxWits era
x -> DijkstraTopTx era -> DijkstraTx TopTx era
forall era. DijkstraTopTx era -> DijkstraTx TopTx era
DijkstraTopTx (DijkstraTopTx era
t DijkstraTopTx era
-> (DijkstraTopTx era -> DijkstraTopTx era) -> DijkstraTopTx era
forall a b. a -> (a -> b) -> b
& (TxWits era -> Identity (TxWits era))
-> DijkstraTopTx era -> Identity (DijkstraTopTx era)
forall era. EraTx era => Lens' (DijkstraTopTx era) (TxWits era)
Lens' (DijkstraTopTx era) (TxWits era)
witsDijkstraTopTxL ((TxWits era -> Identity (TxWits era))
 -> DijkstraTopTx era -> Identity (DijkstraTopTx era))
-> TxWits era -> DijkstraTopTx era -> DijkstraTopTx era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxWits era
x)
        tx :: DijkstraTx l era
tx@DijkstraSubTx {} -> \TxWits era
x -> DijkstraTx l era
tx {dstWits = x}
    )

isPhase2ValidDijkstraTxL :: EraTx era => Lens' (DijkstraTx TopTx era) IsPhase2Valid
isPhase2ValidDijkstraTxL :: forall era. EraTx era => Lens' (DijkstraTx TopTx era) IsPhase2Valid
isPhase2ValidDijkstraTxL =
  (DijkstraTx TopTx era -> IsPhase2Valid)
-> (DijkstraTx TopTx era -> IsPhase2Valid -> DijkstraTx TopTx era)
-> Lens
     (DijkstraTx TopTx era)
     (DijkstraTx TopTx era)
     IsPhase2Valid
     IsPhase2Valid
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (\(DijkstraTopTx DijkstraTopTx era
t) -> DijkstraTopTx era
t DijkstraTopTx era
-> Getting IsPhase2Valid (DijkstraTopTx era) IsPhase2Valid
-> IsPhase2Valid
forall s a. s -> Getting a s a -> a
^. Getting IsPhase2Valid (DijkstraTopTx era) IsPhase2Valid
forall era. EraTx era => Lens' (DijkstraTopTx era) IsPhase2Valid
Lens' (DijkstraTopTx era) IsPhase2Valid
isPhase2ValidDijkstraTopTxL) ((DijkstraTx TopTx era -> IsPhase2Valid -> DijkstraTx TopTx era)
 -> Lens
      (DijkstraTx TopTx era)
      (DijkstraTx TopTx era)
      IsPhase2Valid
      IsPhase2Valid)
-> (DijkstraTx TopTx era -> IsPhase2Valid -> DijkstraTx TopTx era)
-> Lens
     (DijkstraTx TopTx era)
     (DijkstraTx TopTx era)
     IsPhase2Valid
     IsPhase2Valid
forall a b. (a -> b) -> a -> b
$ \(DijkstraTopTx DijkstraTopTx era
t) IsPhase2Valid
x ->
    DijkstraTopTx era -> DijkstraTx TopTx era
forall era. DijkstraTopTx era -> DijkstraTx TopTx era
DijkstraTopTx (DijkstraTopTx era
t DijkstraTopTx era
-> (DijkstraTopTx era -> DijkstraTopTx era) -> DijkstraTopTx era
forall a b. a -> (a -> b) -> b
& (IsPhase2Valid -> Identity IsPhase2Valid)
-> DijkstraTopTx era -> Identity (DijkstraTopTx era)
forall era. EraTx era => Lens' (DijkstraTopTx era) IsPhase2Valid
Lens' (DijkstraTopTx era) IsPhase2Valid
isPhase2ValidDijkstraTopTxL ((IsPhase2Valid -> Identity IsPhase2Valid)
 -> DijkstraTopTx era -> Identity (DijkstraTopTx era))
-> IsPhase2Valid -> DijkstraTopTx era -> DijkstraTopTx era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ IsPhase2Valid
x)

auxDataDijkstraTxL :: EraTx era => Lens' (DijkstraTx l era) (StrictMaybe (TxAuxData era))
auxDataDijkstraTxL :: forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (StrictMaybe (TxAuxData era))
auxDataDijkstraTxL =
  (DijkstraTx l era -> StrictMaybe (TxAuxData era))
-> (DijkstraTx l era
    -> StrictMaybe (TxAuxData era) -> DijkstraTx l era)
-> Lens
     (DijkstraTx l era)
     (DijkstraTx l era)
     (StrictMaybe (TxAuxData era))
     (StrictMaybe (TxAuxData era))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens
    ( \case
        DijkstraTopTx DijkstraTopTx era
t -> DijkstraTopTx era
t DijkstraTopTx era
-> Getting
     (StrictMaybe (TxAuxData era))
     (DijkstraTopTx era)
     (StrictMaybe (TxAuxData era))
-> StrictMaybe (TxAuxData era)
forall s a. s -> Getting a s a -> a
^. Getting
  (StrictMaybe (TxAuxData era))
  (DijkstraTopTx era)
  (StrictMaybe (TxAuxData era))
forall era.
EraTx era =>
Lens' (DijkstraTopTx era) (StrictMaybe (TxAuxData era))
Lens' (DijkstraTopTx era) (StrictMaybe (TxAuxData era))
auxDataDijkstraTopTxL
        DijkstraSubTx {StrictMaybe (TxAuxData era)
dstAuxData :: forall era. DijkstraTx SubTx era -> StrictMaybe (TxAuxData era)
dstAuxData :: StrictMaybe (TxAuxData era)
dstAuxData} -> StrictMaybe (TxAuxData era)
dstAuxData
    )
    ( \case
        DijkstraTopTx DijkstraTopTx era
t -> \StrictMaybe (TxAuxData era)
x -> DijkstraTopTx era -> DijkstraTx TopTx era
forall era. DijkstraTopTx era -> DijkstraTx TopTx era
DijkstraTopTx (DijkstraTopTx era
t DijkstraTopTx era
-> (DijkstraTopTx era -> DijkstraTopTx era) -> DijkstraTopTx era
forall a b. a -> (a -> b) -> b
& (StrictMaybe (TxAuxData era)
 -> Identity (StrictMaybe (TxAuxData era)))
-> DijkstraTopTx era -> Identity (DijkstraTopTx era)
forall era.
EraTx era =>
Lens' (DijkstraTopTx era) (StrictMaybe (TxAuxData era))
Lens' (DijkstraTopTx era) (StrictMaybe (TxAuxData era))
auxDataDijkstraTopTxL ((StrictMaybe (TxAuxData era)
  -> Identity (StrictMaybe (TxAuxData era)))
 -> DijkstraTopTx era -> Identity (DijkstraTopTx era))
-> StrictMaybe (TxAuxData era)
-> DijkstraTopTx era
-> DijkstraTopTx era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictMaybe (TxAuxData era)
x)
        tx :: DijkstraTx l era
tx@DijkstraSubTx {} -> \StrictMaybe (TxAuxData era)
x -> DijkstraTx l era
tx {dstAuxData = x}
    )

toCBORForSizeComputation :: EraTx era => DijkstraTx l era -> Encoding
toCBORForSizeComputation :: forall era (l :: TxLevel).
EraTx era =>
DijkstraTx l era -> Encoding
toCBORForSizeComputation DijkstraTx l era
tx =
  Word -> Encoding
encodeListLen Word
3
    Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> TxBody l era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR (DijkstraTx l era
tx DijkstraTx l era
-> Getting (TxBody l era) (DijkstraTx l era) (TxBody l era)
-> TxBody l era
forall s a. s -> Getting a s a -> a
^. Getting (TxBody l era) (DijkstraTx l era) (TxBody l era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (TxBody l era)
Lens' (DijkstraTx l era) (TxBody l era)
bodyDijkstraTxL)
    Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> TxWits era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR (DijkstraTx l era
tx DijkstraTx l era
-> Getting (TxWits era) (DijkstraTx l era) (TxWits era)
-> TxWits era
forall s a. s -> Getting a s a -> a
^. Getting (TxWits era) (DijkstraTx l era) (TxWits era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (TxWits era)
Lens' (DijkstraTx l era) (TxWits era)
witsDijkstraTxL)
    Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> (TxAuxData era -> Encoding)
-> StrictMaybe (TxAuxData era) -> Encoding
forall a. (a -> Encoding) -> StrictMaybe a -> Encoding
encodeNullStrictMaybe TxAuxData era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR (DijkstraTx l era
tx DijkstraTx l era
-> Getting
     (StrictMaybe (TxAuxData era))
     (DijkstraTx l era)
     (StrictMaybe (TxAuxData era))
-> StrictMaybe (TxAuxData era)
forall s a. s -> Getting a s a -> a
^. Getting
  (StrictMaybe (TxAuxData era))
  (DijkstraTx l era)
  (StrictMaybe (TxAuxData era))
forall era (l :: TxLevel).
EraTx era =>
Lens' (DijkstraTx l era) (StrictMaybe (TxAuxData era))
Lens' (DijkstraTx l era) (StrictMaybe (TxAuxData era))
auxDataDijkstraTxL)

sizeDijkstraTxF ::
  forall era l.
  EraTx era =>
  SimpleGetter (DijkstraTx l era) Word32
sizeDijkstraTxF :: forall era (l :: TxLevel).
EraTx era =>
SimpleGetter (DijkstraTx l era) Word32
sizeDijkstraTxF =
  (DijkstraTx l era -> Word32)
-> SimpleGetter (DijkstraTx l era) Word32
forall s a. (s -> a) -> SimpleGetter s a
to ((DijkstraTx l era -> Word32)
 -> SimpleGetter (DijkstraTx l era) Word32)
-> (DijkstraTx l era -> Word32)
-> SimpleGetter (DijkstraTx l era) Word32
forall a b. (a -> b) -> a -> b
$
    Fail Word32 -> Word32
forall a. HasCallStack => Fail a -> a
errorFail
      (Fail Word32 -> Word32)
-> (DijkstraTx l era -> Fail Word32) -> DijkstraTx l era -> Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i b (m :: * -> *).
(Integral i, Integral b, Bounded b, MonadFail m) =>
i -> m b
integralToBounded @Int64 @Word32
      (Int64 -> Fail Word32)
-> (DijkstraTx l era -> Int64) -> DijkstraTx l era -> Fail Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Int64
LBS.length
      (ByteString -> Int64)
-> (DijkstraTx l era -> ByteString) -> DijkstraTx l era -> Int64
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> Encoding -> ByteString
forall a. EncCBOR a => Version -> a -> ByteString
serialize (forall era. Era era => Version
eraProtVerLow @era)
      (Encoding -> ByteString)
-> (DijkstraTx l era -> Encoding) -> DijkstraTx l era -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraTx l era -> Encoding
forall era (l :: TxLevel).
EraTx era =>
DijkstraTx l era -> Encoding
toCBORForSizeComputation

dijkstraTxEqRaw ::
  ( STxLevel l era ~ STxBothLevels l era
  , AlonzoEraTx era
  ) =>
  Tx l era ->
  Tx l era ->
  Bool
dijkstraTxEqRaw :: forall (l :: TxLevel) era.
(STxLevel l era ~ STxBothLevels l era, AlonzoEraTx era) =>
Tx l era -> Tx l era -> Bool
dijkstraTxEqRaw Tx l era
tx1 Tx l era
tx2 =
  Tx l era -> Tx l era -> Bool
forall era (l :: TxLevel).
EraTx era =>
Tx l era -> Tx l era -> Bool
shelleyTxEqRaw Tx l era
tx1 Tx l era
tx2
    Bool -> Bool -> Bool
&& Tx l era
-> (Tx TopTx era -> Bool) -> (Tx SubTx era -> Bool) -> Bool
forall (l :: TxLevel) era (t :: TxLevel -> * -> *) a.
(HasEraTxLevel t era, STxLevel l era ~ STxBothLevels l era) =>
t l era -> (t TopTx era -> a) -> (t SubTx era -> a) -> a
withBothTxLevels
      Tx l era
tx1
      ( \Tx TopTx era
tx1' ->
          Tx l era
-> (Tx TopTx era -> Bool) -> (Tx SubTx era -> Bool) -> Bool
forall (l :: TxLevel) era (t :: TxLevel -> * -> *) a.
(HasEraTxLevel t era, STxLevel l era ~ STxBothLevels l era) =>
t l era -> (t TopTx era -> a) -> (t SubTx era -> a) -> a
withBothTxLevels
            Tx l era
tx2
            (\Tx TopTx era
tx2' -> Tx TopTx era
tx1' Tx TopTx era
-> Getting IsPhase2Valid (Tx TopTx era) IsPhase2Valid
-> IsPhase2Valid
forall s a. s -> Getting a s a -> a
^. Getting IsPhase2Valid (Tx TopTx era) IsPhase2Valid
forall era. AlonzoEraTx era => Lens' (Tx TopTx era) IsPhase2Valid
Lens' (Tx TopTx era) IsPhase2Valid
isPhase2ValidTxL IsPhase2Valid -> IsPhase2Valid -> Bool
forall a. Eq a => a -> a -> Bool
== Tx TopTx era
tx2' Tx TopTx era
-> Getting IsPhase2Valid (Tx TopTx era) IsPhase2Valid
-> IsPhase2Valid
forall s a. s -> Getting a s a -> a
^. Getting IsPhase2Valid (Tx TopTx era) IsPhase2Valid
forall era. AlonzoEraTx era => Lens' (Tx TopTx era) IsPhase2Valid
Lens' (Tx TopTx era) IsPhase2Valid
isPhase2ValidTxL)
            (Bool -> Tx SubTx era -> Bool
forall a b. a -> b -> a
const Bool
True)
      )
      (Bool -> Tx SubTx era -> Bool
forall a b. a -> b -> a
const Bool
True)

instance EqRaw (Tx l DijkstraEra) where
  eqRaw :: Tx l DijkstraEra -> Tx l DijkstraEra -> Bool
eqRaw = Tx l DijkstraEra -> Tx l DijkstraEra -> Bool
forall (l :: TxLevel) era.
(STxLevel l era ~ STxBothLevels l era, AlonzoEraTx era) =>
Tx l era -> Tx l era -> Bool
dijkstraTxEqRaw

instance
  ( ToJSON (TxBody TopTx DijkstraEra)
  , ToJSON (TxWits DijkstraEra)
  , ToJSON (TxAuxData DijkstraEra)
  ) =>
  ToKeyValuePairs (DijkstraTx TopTx DijkstraEra)
  where
  toKeyValuePairs :: forall e kv. KeyValue e kv => DijkstraTx TopTx DijkstraEra -> [kv]
toKeyValuePairs
    ( DijkstraTopTx
        (DijkstraTopTx DijkstraEra -> RawType (DijkstraTopTx DijkstraEra)
forall t. Memoized t => t -> RawType t
getMemoRawType -> DijkstraTopTxRaw {TxBody TopTx DijkstraEra
dttrBody :: forall era. DijkstraTopTxRaw era -> TxBody TopTx era
dttrBody :: TxBody TopTx DijkstraEra
dttrBody, TxWits DijkstraEra
dttrWits :: forall era. DijkstraTopTxRaw era -> TxWits era
dttrWits :: TxWits DijkstraEra
dttrWits, IsPhase2Valid
dttrIsPhase2Valid :: forall era. DijkstraTopTxRaw era -> IsPhase2Valid
dttrIsPhase2Valid :: IsPhase2Valid
dttrIsPhase2Valid, StrictMaybe (TxAuxData DijkstraEra)
dttrAuxData :: forall era. DijkstraTopTxRaw era -> StrictMaybe (TxAuxData era)
dttrAuxData :: StrictMaybe (TxAuxData DijkstraEra)
dttrAuxData})
      ) =
      [ Key
"body" Key -> TxBody TopTx DijkstraEra -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TxBody TopTx DijkstraEra
dttrBody
      , Key
"wits" Key -> AlonzoTxWits DijkstraEra -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TxWits DijkstraEra
AlonzoTxWits DijkstraEra
dttrWits
      , Key
"isPhase2Valid" Key -> IsPhase2Valid -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= IsPhase2Valid
dttrIsPhase2Valid
      , Key
"auxData" Key -> StrictMaybe (AlonzoTxAuxData DijkstraEra) -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= StrictMaybe (TxAuxData DijkstraEra)
StrictMaybe (AlonzoTxAuxData DijkstraEra)
dttrAuxData
      ]

instance
  ( ToJSON (TxBody TopTx DijkstraEra)
  , ToJSON (TxWits DijkstraEra)
  , ToJSON (TxAuxData DijkstraEra)
  ) =>
  ToJSON (Tx TopTx DijkstraEra)
  where
  toJSON :: Tx TopTx DijkstraEra -> Value
toJSON (MkDijkstraTx DijkstraTx TopTx DijkstraEra
tx) = [Pair] -> Value
Aeson.object (DijkstraTx TopTx DijkstraEra -> [Pair]
forall a e kv. (ToKeyValuePairs a, KeyValue e kv) => a -> [kv]
forall e kv. KeyValue e kv => DijkstraTx TopTx DijkstraEra -> [kv]
toKeyValuePairs DijkstraTx TopTx DijkstraEra
tx)

instance
  ( FromJSON (TxBody TopTx DijkstraEra)
  , FromJSON (TxWits DijkstraEra)
  , FromJSON (TxAuxData DijkstraEra)
  ) =>
  FromJSON (Tx TopTx DijkstraEra)
  where
  parseJSON :: Value -> Parser (Tx TopTx DijkstraEra)
parseJSON = String
-> (Object -> Parser (Tx TopTx DijkstraEra))
-> Value
-> Parser (Tx TopTx DijkstraEra)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Tx TopTx DijkstraEra" ((Object -> Parser (Tx TopTx DijkstraEra))
 -> Value -> Parser (Tx TopTx DijkstraEra))
-> (Object -> Parser (Tx TopTx DijkstraEra))
-> Value
-> Parser (Tx TopTx DijkstraEra)
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    (DijkstraTopTxRaw DijkstraEra -> Tx TopTx DijkstraEra)
-> Parser (DijkstraTopTxRaw DijkstraEra)
-> Parser (Tx TopTx DijkstraEra)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DijkstraTx TopTx DijkstraEra -> Tx TopTx DijkstraEra
forall (l :: TxLevel). DijkstraTx l DijkstraEra -> Tx l DijkstraEra
MkDijkstraTx (DijkstraTx TopTx DijkstraEra -> Tx TopTx DijkstraEra)
-> (DijkstraTopTxRaw DijkstraEra -> DijkstraTx TopTx DijkstraEra)
-> DijkstraTopTxRaw DijkstraEra
-> Tx TopTx DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraTopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra
forall era. DijkstraTopTx era -> DijkstraTx TopTx era
DijkstraTopTx (DijkstraTopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra)
-> (DijkstraTopTxRaw DijkstraEra -> DijkstraTopTx DijkstraEra)
-> DijkstraTopTxRaw DijkstraEra
-> DijkstraTx TopTx DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @DijkstraEra) (Parser (DijkstraTopTxRaw DijkstraEra)
 -> Parser (Tx TopTx DijkstraEra))
-> Parser (DijkstraTopTxRaw DijkstraEra)
-> Parser (Tx TopTx DijkstraEra)
forall a b. (a -> b) -> a -> b
$
      TxBody TopTx DijkstraEra
-> TxWits DijkstraEra
-> IsPhase2Valid
-> StrictMaybe (TxAuxData DijkstraEra)
-> DijkstraTopTxRaw DijkstraEra
TxBody TopTx DijkstraEra
-> AlonzoTxWits DijkstraEra
-> IsPhase2Valid
-> StrictMaybe (AlonzoTxAuxData DijkstraEra)
-> DijkstraTopTxRaw DijkstraEra
forall era.
TxBody TopTx era
-> TxWits era
-> IsPhase2Valid
-> StrictMaybe (TxAuxData era)
-> DijkstraTopTxRaw era
DijkstraTopTxRaw
        (TxBody TopTx DijkstraEra
 -> AlonzoTxWits DijkstraEra
 -> IsPhase2Valid
 -> StrictMaybe (AlonzoTxAuxData DijkstraEra)
 -> DijkstraTopTxRaw DijkstraEra)
-> Parser (TxBody TopTx DijkstraEra)
-> Parser
     (AlonzoTxWits DijkstraEra
      -> IsPhase2Valid
      -> StrictMaybe (AlonzoTxAuxData DijkstraEra)
      -> DijkstraTopTxRaw DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (TxBody TopTx DijkstraEra)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"body"
        Parser
  (AlonzoTxWits DijkstraEra
   -> IsPhase2Valid
   -> StrictMaybe (AlonzoTxAuxData DijkstraEra)
   -> DijkstraTopTxRaw DijkstraEra)
-> Parser (AlonzoTxWits DijkstraEra)
-> Parser
     (IsPhase2Valid
      -> StrictMaybe (AlonzoTxAuxData DijkstraEra)
      -> DijkstraTopTxRaw DijkstraEra)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (AlonzoTxWits DijkstraEra)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"wits"
        Parser
  (IsPhase2Valid
   -> StrictMaybe (AlonzoTxAuxData DijkstraEra)
   -> DijkstraTopTxRaw DijkstraEra)
-> Parser IsPhase2Valid
-> Parser
     (StrictMaybe (AlonzoTxAuxData DijkstraEra)
      -> DijkstraTopTxRaw DijkstraEra)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser IsPhase2Valid
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"isPhase2Valid"
        Parser
  (StrictMaybe (AlonzoTxAuxData DijkstraEra)
   -> DijkstraTopTxRaw DijkstraEra)
-> Parser (StrictMaybe (AlonzoTxAuxData DijkstraEra))
-> Parser (DijkstraTopTxRaw DijkstraEra)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (StrictMaybe (AlonzoTxAuxData DijkstraEra))
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"auxData"

instance
  ( ToJSON (TxBody SubTx DijkstraEra)
  , ToJSON (TxWits DijkstraEra)
  , ToJSON (TxAuxData DijkstraEra)
  ) =>
  ToJSON (Tx SubTx DijkstraEra)
  where
  toJSON :: Tx SubTx DijkstraEra -> Value
toJSON (MkDijkstraTx (DijkstraSubTx {TxBody SubTx DijkstraEra
dstBody :: forall era. DijkstraTx SubTx era -> TxBody SubTx era
dstBody :: TxBody SubTx DijkstraEra
dstBody, TxWits DijkstraEra
dstWits :: forall era. DijkstraTx SubTx era -> TxWits era
dstWits :: TxWits DijkstraEra
dstWits, StrictMaybe (TxAuxData DijkstraEra)
dstAuxData :: forall era. DijkstraTx SubTx era -> StrictMaybe (TxAuxData era)
dstAuxData :: StrictMaybe (TxAuxData DijkstraEra)
dstAuxData})) =
    [Pair] -> Value
Aeson.object
      [ Key
"dstBody" Key -> TxBody SubTx DijkstraEra -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TxBody SubTx DijkstraEra
dstBody
      , Key
"dstWits" Key -> AlonzoTxWits DijkstraEra -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TxWits DijkstraEra
AlonzoTxWits DijkstraEra
dstWits
      , Key
"dstAuxData" Key -> StrictMaybe (AlonzoTxAuxData DijkstraEra) -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= StrictMaybe (TxAuxData DijkstraEra)
StrictMaybe (AlonzoTxAuxData DijkstraEra)
dstAuxData
      ]

instance
  ( FromJSON (TxBody SubTx DijkstraEra)
  , FromJSON (TxWits DijkstraEra)
  , FromJSON (TxAuxData DijkstraEra)
  ) =>
  FromJSON (Tx SubTx DijkstraEra)
  where
  parseJSON :: Value -> Parser (Tx SubTx DijkstraEra)
parseJSON = String
-> (Object -> Parser (Tx SubTx DijkstraEra))
-> Value
-> Parser (Tx SubTx DijkstraEra)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Tx SubTx DijkstraEra" ((Object -> Parser (Tx SubTx DijkstraEra))
 -> Value -> Parser (Tx SubTx DijkstraEra))
-> (Object -> Parser (Tx SubTx DijkstraEra))
-> Value
-> Parser (Tx SubTx DijkstraEra)
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    (DijkstraTx SubTx DijkstraEra -> Tx SubTx DijkstraEra)
-> Parser (DijkstraTx SubTx DijkstraEra)
-> Parser (Tx SubTx DijkstraEra)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap DijkstraTx SubTx DijkstraEra -> Tx SubTx DijkstraEra
forall (l :: TxLevel). DijkstraTx l DijkstraEra -> Tx l DijkstraEra
MkDijkstraTx (Parser (DijkstraTx SubTx DijkstraEra)
 -> Parser (Tx SubTx DijkstraEra))
-> Parser (DijkstraTx SubTx DijkstraEra)
-> Parser (Tx SubTx DijkstraEra)
forall a b. (a -> b) -> a -> b
$
      TxBody SubTx DijkstraEra
-> TxWits DijkstraEra
-> StrictMaybe (TxAuxData DijkstraEra)
-> DijkstraTx SubTx DijkstraEra
TxBody SubTx DijkstraEra
-> AlonzoTxWits DijkstraEra
-> StrictMaybe (AlonzoTxAuxData DijkstraEra)
-> DijkstraTx SubTx DijkstraEra
forall era.
TxBody SubTx era
-> TxWits era
-> StrictMaybe (TxAuxData era)
-> DijkstraTx SubTx era
DijkstraSubTx
        (TxBody SubTx DijkstraEra
 -> AlonzoTxWits DijkstraEra
 -> StrictMaybe (AlonzoTxAuxData DijkstraEra)
 -> DijkstraTx SubTx DijkstraEra)
-> Parser (TxBody SubTx DijkstraEra)
-> Parser
     (AlonzoTxWits DijkstraEra
      -> StrictMaybe (AlonzoTxAuxData DijkstraEra)
      -> DijkstraTx SubTx DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (TxBody SubTx DijkstraEra)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"dstBody"
        Parser
  (AlonzoTxWits DijkstraEra
   -> StrictMaybe (AlonzoTxAuxData DijkstraEra)
   -> DijkstraTx SubTx DijkstraEra)
-> Parser (AlonzoTxWits DijkstraEra)
-> Parser
     (StrictMaybe (AlonzoTxAuxData DijkstraEra)
      -> DijkstraTx SubTx DijkstraEra)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (AlonzoTxWits DijkstraEra)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"dstWits"
        Parser
  (StrictMaybe (AlonzoTxAuxData DijkstraEra)
   -> DijkstraTx SubTx DijkstraEra)
-> Parser (StrictMaybe (AlonzoTxAuxData DijkstraEra))
-> Parser (DijkstraTx SubTx DijkstraEra)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (StrictMaybe (AlonzoTxAuxData DijkstraEra))
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"dstAuxData"

dijkstraTxL :: Lens' (Tx l DijkstraEra) (DijkstraTx l DijkstraEra)
dijkstraTxL :: forall (l :: TxLevel) (f :: * -> *).
Functor f =>
(DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
dijkstraTxL = (Tx l DijkstraEra -> DijkstraTx l DijkstraEra)
-> (Tx l DijkstraEra
    -> DijkstraTx l DijkstraEra -> Tx l DijkstraEra)
-> Lens
     (Tx l DijkstraEra)
     (Tx l DijkstraEra)
     (DijkstraTx l DijkstraEra)
     (DijkstraTx l DijkstraEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Tx l DijkstraEra -> DijkstraTx l DijkstraEra
forall (l :: TxLevel). Tx l DijkstraEra -> DijkstraTx l DijkstraEra
unDijkstraTx (\Tx l DijkstraEra
x DijkstraTx l DijkstraEra
y -> Tx l DijkstraEra
x {unDijkstraTx = y})

instance AlonzoEraTx DijkstraEra where
  isPhase2ValidTxL :: Lens' (Tx TopTx DijkstraEra) IsPhase2Valid
isPhase2ValidTxL = (DijkstraTx TopTx DijkstraEra -> f (DijkstraTx TopTx DijkstraEra))
-> Tx TopTx DijkstraEra -> f (Tx TopTx DijkstraEra)
forall (l :: TxLevel) (f :: * -> *).
Functor f =>
(DijkstraTx l DijkstraEra -> f (DijkstraTx l DijkstraEra))
-> Tx l DijkstraEra -> f (Tx l DijkstraEra)
dijkstraTxL ((DijkstraTx TopTx DijkstraEra -> f (DijkstraTx TopTx DijkstraEra))
 -> Tx TopTx DijkstraEra -> f (Tx TopTx DijkstraEra))
-> ((IsPhase2Valid -> f IsPhase2Valid)
    -> DijkstraTx TopTx DijkstraEra
    -> f (DijkstraTx TopTx DijkstraEra))
-> (IsPhase2Valid -> f IsPhase2Valid)
-> Tx TopTx DijkstraEra
-> f (Tx TopTx DijkstraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (IsPhase2Valid -> f IsPhase2Valid)
-> DijkstraTx TopTx DijkstraEra -> f (DijkstraTx TopTx DijkstraEra)
forall era. EraTx era => Lens' (DijkstraTx TopTx era) IsPhase2Valid
Lens' (DijkstraTx TopTx DijkstraEra) IsPhase2Valid
isPhase2ValidDijkstraTxL
  {-# INLINE isPhase2ValidTxL #-}

  getTotalExUnits :: forall (l :: TxLevel). Tx l DijkstraEra -> ExUnits
getTotalExUnits Tx l DijkstraEra
tx =
    ((Data DijkstraEra, ExUnits) -> ExUnits)
-> Map
     (DijkstraPlutusPurpose AsIx DijkstraEra)
     (Data DijkstraEra, ExUnits)
-> ExUnits
forall m a.
Monoid m =>
(a -> m) -> Map (DijkstraPlutusPurpose AsIx DijkstraEra) a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Data DijkstraEra, ExUnits) -> ExUnits
forall a b. (a, b) -> b
snd (Tx l DijkstraEra
tx Tx l DijkstraEra
-> Getting
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (Tx l DijkstraEra)
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
-> Map
     (DijkstraPlutusPurpose AsIx DijkstraEra)
     (Data DijkstraEra, ExUnits)
forall s a. s -> Getting a s a -> a
^. (TxWits DijkstraEra
 -> Const
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits))
      (TxWits DijkstraEra))
-> Tx l DijkstraEra
-> Const
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (Tx l DijkstraEra)
(AlonzoTxWits DijkstraEra
 -> Const
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits))
      (AlonzoTxWits DijkstraEra))
-> Tx l DijkstraEra
-> Const
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (Tx l DijkstraEra)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxWits era)
forall (l :: TxLevel).
Lens' (Tx l DijkstraEra) (TxWits DijkstraEra)
witsTxL ((AlonzoTxWits DijkstraEra
  -> Const
       (Map
          (DijkstraPlutusPurpose AsIx DijkstraEra)
          (Data DijkstraEra, ExUnits))
       (AlonzoTxWits DijkstraEra))
 -> Tx l DijkstraEra
 -> Const
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits))
      (Tx l DijkstraEra))
-> ((Map
       (DijkstraPlutusPurpose AsIx DijkstraEra)
       (Data DijkstraEra, ExUnits)
     -> Const
          (Map
             (DijkstraPlutusPurpose AsIx DijkstraEra)
             (Data DijkstraEra, ExUnits))
          (Map
             (DijkstraPlutusPurpose AsIx DijkstraEra)
             (Data DijkstraEra, ExUnits)))
    -> AlonzoTxWits DijkstraEra
    -> Const
         (Map
            (DijkstraPlutusPurpose AsIx DijkstraEra)
            (Data DijkstraEra, ExUnits))
         (AlonzoTxWits DijkstraEra))
-> Getting
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (Tx l DijkstraEra)
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Redeemers DijkstraEra
 -> Const
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits))
      (Redeemers DijkstraEra))
-> TxWits DijkstraEra
-> Const
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (TxWits DijkstraEra)
(Redeemers DijkstraEra
 -> Const
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits))
      (Redeemers DijkstraEra))
-> AlonzoTxWits DijkstraEra
-> Const
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (AlonzoTxWits DijkstraEra)
forall era.
AlonzoEraTxWits era =>
Lens' (TxWits era) (Redeemers era)
Lens' (TxWits DijkstraEra) (Redeemers DijkstraEra)
rdmrsTxWitsL ((Redeemers DijkstraEra
  -> Const
       (Map
          (DijkstraPlutusPurpose AsIx DijkstraEra)
          (Data DijkstraEra, ExUnits))
       (Redeemers DijkstraEra))
 -> AlonzoTxWits DijkstraEra
 -> Const
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits))
      (AlonzoTxWits DijkstraEra))
-> ((Map
       (DijkstraPlutusPurpose AsIx DijkstraEra)
       (Data DijkstraEra, ExUnits)
     -> Const
          (Map
             (DijkstraPlutusPurpose AsIx DijkstraEra)
             (Data DijkstraEra, ExUnits))
          (Map
             (DijkstraPlutusPurpose AsIx DijkstraEra)
             (Data DijkstraEra, ExUnits)))
    -> Redeemers DijkstraEra
    -> Const
         (Map
            (DijkstraPlutusPurpose AsIx DijkstraEra)
            (Data DijkstraEra, ExUnits))
         (Redeemers DijkstraEra))
-> (Map
      (DijkstraPlutusPurpose AsIx DijkstraEra)
      (Data DijkstraEra, ExUnits)
    -> Const
         (Map
            (DijkstraPlutusPurpose AsIx DijkstraEra)
            (Data DijkstraEra, ExUnits))
         (Map
            (DijkstraPlutusPurpose AsIx DijkstraEra)
            (Data DijkstraEra, ExUnits)))
-> AlonzoTxWits DijkstraEra
-> Const
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (AlonzoTxWits DijkstraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (PlutusPurpose AsIx DijkstraEra) (Data DijkstraEra, ExUnits)
 -> Const
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits))
      (Map (PlutusPurpose AsIx DijkstraEra) (Data DijkstraEra, ExUnits)))
-> Redeemers DijkstraEra
-> Const
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (Redeemers DijkstraEra)
(Map
   (DijkstraPlutusPurpose AsIx DijkstraEra)
   (Data DijkstraEra, ExUnits)
 -> Const
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits))
      (Map
         (DijkstraPlutusPurpose AsIx DijkstraEra)
         (Data DijkstraEra, ExUnits)))
-> Redeemers DijkstraEra
-> Const
     (Map
        (DijkstraPlutusPurpose AsIx DijkstraEra)
        (Data DijkstraEra, ExUnits))
     (Redeemers DijkstraEra)
forall era.
AlonzoEraScript era =>
Lens'
  (Redeemers era) (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
Lens'
  (Redeemers DijkstraEra)
  (Map (PlutusPurpose AsIx DijkstraEra) (Data DijkstraEra, ExUnits))
unRedeemersL)
      ExUnits -> ExUnits -> ExUnits
forall a. Semigroup a => a -> a -> a
<> Tx l DijkstraEra
-> (Tx TopTx DijkstraEra -> ExUnits)
-> (Tx SubTx DijkstraEra -> ExUnits)
-> ExUnits
forall (l :: TxLevel) era (t :: TxLevel -> * -> *) a.
(HasEraTxLevel t era, STxLevel l era ~ STxBothLevels l era) =>
t l era -> (t TopTx era -> a) -> (t SubTx era -> a) -> a
withBothTxLevels
        Tx l DijkstraEra
tx
        (\Tx TopTx DijkstraEra
topTx -> (Tx SubTx DijkstraEra -> ExUnits)
-> OMap TxId (Tx SubTx DijkstraEra) -> ExUnits
forall m a. Monoid m => (a -> m) -> OMap TxId a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap Tx SubTx DijkstraEra -> ExUnits
forall era (l :: TxLevel). AlonzoEraTx era => Tx l era -> ExUnits
forall (l :: TxLevel). Tx l DijkstraEra -> ExUnits
getTotalExUnits (Tx TopTx DijkstraEra
topTx Tx TopTx DijkstraEra
-> Getting
     (OMap TxId (Tx SubTx DijkstraEra))
     (Tx TopTx DijkstraEra)
     (OMap TxId (Tx SubTx DijkstraEra))
-> OMap TxId (Tx SubTx DijkstraEra)
forall s a. s -> Getting a s a -> a
^. (TxBody TopTx DijkstraEra
 -> Const
      (OMap TxId (Tx SubTx DijkstraEra)) (TxBody TopTx DijkstraEra))
-> Tx TopTx DijkstraEra
-> Const (OMap TxId (Tx SubTx DijkstraEra)) (Tx TopTx DijkstraEra)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel).
Lens' (Tx l DijkstraEra) (TxBody l DijkstraEra)
bodyTxL ((TxBody TopTx DijkstraEra
  -> Const
       (OMap TxId (Tx SubTx DijkstraEra)) (TxBody TopTx DijkstraEra))
 -> Tx TopTx DijkstraEra
 -> Const (OMap TxId (Tx SubTx DijkstraEra)) (Tx TopTx DijkstraEra))
-> ((OMap TxId (Tx SubTx DijkstraEra)
     -> Const
          (OMap TxId (Tx SubTx DijkstraEra))
          (OMap TxId (Tx SubTx DijkstraEra)))
    -> TxBody TopTx DijkstraEra
    -> Const
         (OMap TxId (Tx SubTx DijkstraEra)) (TxBody TopTx DijkstraEra))
-> Getting
     (OMap TxId (Tx SubTx DijkstraEra))
     (Tx TopTx DijkstraEra)
     (OMap TxId (Tx SubTx DijkstraEra))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (OMap TxId (Tx SubTx DijkstraEra)
 -> Const
      (OMap TxId (Tx SubTx DijkstraEra))
      (OMap TxId (Tx SubTx DijkstraEra)))
-> TxBody TopTx DijkstraEra
-> Const
     (OMap TxId (Tx SubTx DijkstraEra)) (TxBody TopTx DijkstraEra)
forall era.
DijkstraEraTxBody era =>
Lens' (TxBody TopTx era) (OMap TxId (Tx SubTx era))
Lens' (TxBody TopTx DijkstraEra) (OMap TxId (Tx SubTx DijkstraEra))
subTransactionsTxBodyL))
        (ExUnits -> Tx SubTx DijkstraEra -> ExUnits
forall a b. a -> b -> a
const ExUnits
forall a. Monoid a => a
mempty)

instance Typeable l => DecCBOR (Annotator (Tx l DijkstraEra)) where
  decCBOR :: forall s. Decoder s (Annotator (Tx l DijkstraEra))
decCBOR = (DijkstraTx l DijkstraEra -> Tx l DijkstraEra)
-> Annotator (DijkstraTx l DijkstraEra)
-> Annotator (Tx l DijkstraEra)
forall a b. (a -> b) -> Annotator a -> Annotator b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap DijkstraTx l DijkstraEra -> Tx l DijkstraEra
forall (l :: TxLevel). DijkstraTx l DijkstraEra -> Tx l DijkstraEra
MkDijkstraTx (Annotator (DijkstraTx l DijkstraEra)
 -> Annotator (Tx l DijkstraEra))
-> Decoder s (Annotator (DijkstraTx l DijkstraEra))
-> Decoder s (Annotator (Tx l DijkstraEra))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (Annotator (DijkstraTx l DijkstraEra))
forall s. Decoder s (Annotator (DijkstraTx l DijkstraEra))
forall a s. DecCBOR a => Decoder s a
decCBOR

validateDijkstraNativeScript ::
  ( EraTx era
  , DijkstraEraTxBody era
  , DijkstraEraScript era
  , NativeScript era ~ DijkstraNativeScript era
  ) =>
  Tx l era -> NativeScript era -> Bool
validateDijkstraNativeScript :: forall era (l :: TxLevel).
(EraTx era, DijkstraEraTxBody era, DijkstraEraScript era,
 NativeScript era ~ DijkstraNativeScript era) =>
Tx l era -> NativeScript era -> Bool
validateDijkstraNativeScript Tx l era
tx =
  Set (KeyHash Witness)
-> ValidityInterval
-> OSet (Credential Guard)
-> NativeScript era
-> Bool
forall era.
(DijkstraEraScript era,
 NativeScript era ~ DijkstraNativeScript era) =>
Set (KeyHash Witness)
-> ValidityInterval
-> OSet (Credential Guard)
-> NativeScript era
-> Bool
evalDijkstraNativeScript Set (KeyHash Witness)
vhks (Tx l era
tx Tx l era
-> Getting ValidityInterval (Tx l era) ValidityInterval
-> ValidityInterval
forall s a. s -> Getting a s a -> a
^. (TxBody l era -> Const ValidityInterval (TxBody l era))
-> Tx l era -> Const ValidityInterval (Tx l era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era)
bodyTxL ((TxBody l era -> Const ValidityInterval (TxBody l era))
 -> Tx l era -> Const ValidityInterval (Tx l era))
-> ((ValidityInterval -> Const ValidityInterval ValidityInterval)
    -> TxBody l era -> Const ValidityInterval (TxBody l era))
-> Getting ValidityInterval (Tx l era) ValidityInterval
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ValidityInterval -> Const ValidityInterval ValidityInterval)
-> TxBody l era -> Const ValidityInterval (TxBody l era)
forall era (l :: TxLevel).
AllegraEraTxBody era =>
Lens' (TxBody l era) ValidityInterval
forall (l :: TxLevel). Lens' (TxBody l era) ValidityInterval
vldtTxBodyL) (Tx l era
tx Tx l era
-> Getting
     (OSet (Credential Guard)) (Tx l era) (OSet (Credential Guard))
-> OSet (Credential Guard)
forall s a. s -> Getting a s a -> a
^. (TxBody l era -> Const (OSet (Credential Guard)) (TxBody l era))
-> Tx l era -> Const (OSet (Credential Guard)) (Tx l era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era)
bodyTxL ((TxBody l era -> Const (OSet (Credential Guard)) (TxBody l era))
 -> Tx l era -> Const (OSet (Credential Guard)) (Tx l era))
-> ((OSet (Credential Guard)
     -> Const (OSet (Credential Guard)) (OSet (Credential Guard)))
    -> TxBody l era -> Const (OSet (Credential Guard)) (TxBody l era))
-> Getting
     (OSet (Credential Guard)) (Tx l era) (OSet (Credential Guard))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (OSet (Credential Guard)
 -> Const (OSet (Credential Guard)) (OSet (Credential Guard)))
-> TxBody l era -> Const (OSet (Credential Guard)) (TxBody l era)
forall era (l :: TxLevel).
DijkstraEraTxBody era =>
Lens' (TxBody l era) (OSet (Credential Guard))
forall (l :: TxLevel).
Lens' (TxBody l era) (OSet (Credential Guard))
guardsTxBodyL)
  where
    vhks :: Set (KeyHash Witness)
vhks = (WitVKey Witness -> KeyHash Witness)
-> Set (WitVKey Witness) -> Set (KeyHash Witness)
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map WitVKey Witness -> KeyHash Witness
forall (kr :: KeyRole). WitVKey kr -> KeyHash Witness
witVKeyHash (Tx l era
tx Tx l era
-> Getting
     (Set (WitVKey Witness)) (Tx l era) (Set (WitVKey Witness))
-> Set (WitVKey Witness)
forall s a. s -> Getting a s a -> a
^. (TxWits era -> Const (Set (WitVKey Witness)) (TxWits era))
-> Tx l era -> Const (Set (WitVKey Witness)) (Tx l era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxWits era)
forall (l :: TxLevel). Lens' (Tx l era) (TxWits era)
witsTxL ((TxWits era -> Const (Set (WitVKey Witness)) (TxWits era))
 -> Tx l era -> Const (Set (WitVKey Witness)) (Tx l era))
-> ((Set (WitVKey Witness)
     -> Const (Set (WitVKey Witness)) (Set (WitVKey Witness)))
    -> TxWits era -> Const (Set (WitVKey Witness)) (TxWits era))
-> Getting
     (Set (WitVKey Witness)) (Tx l era) (Set (WitVKey Witness))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set (WitVKey Witness)
 -> Const (Set (WitVKey Witness)) (Set (WitVKey Witness)))
-> TxWits era -> Const (Set (WitVKey Witness)) (TxWits era)
forall era.
EraTxWits era =>
Lens' (TxWits era) (Set (WitVKey Witness))
Lens' (TxWits era) (Set (WitVKey Witness))
addrTxWitsL)
{-# INLINEABLE validateDijkstraNativeScript #-}

--------------------------------------------------------------------------------
-- Serialisation and hashing
--
-- A top-level transaction has two wire formats:
-- - the mempool format @[body, wits, aux_data/ nil]@, used for transmission
--   from node to node or from wallet to node, which omits the `IsPhase2Valid`
--   flag ('toCBORForMempoolSubmission'), and
-- - the block format @[body, wits, aux_data/ nil, is_valid]@, used for
--   transactions inside a block body, where the trailing `IsPhase2Valid` flag
--   is set by the block producer ('toCBORForBlockInclusion').
--
-- A top-level transaction stores its bytes in the block format (see
-- 'DijkstraTopTx'), because they are hashed: endorser blocks refer to
-- transactions by their 'hashAnnotated', which can be checked against the raw
-- bytes without decoding them.
--
-- The mempool format is not stored. It is assembled from the components, which
-- already store their own bytes. Sub-transactions do not store their bytes
-- either, since they are part of the body of a top-level transaction.
--------------------------------------------------------------------------------

instance SafeToHash (Tx TopTx DijkstraEra) where
  originalBytes :: Tx TopTx DijkstraEra -> ByteString
originalBytes = DijkstraTx TopTx DijkstraEra -> ByteString
forall t. SafeToHash t => t -> ByteString
originalBytes (DijkstraTx TopTx DijkstraEra -> ByteString)
-> (Tx TopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra)
-> Tx TopTx DijkstraEra
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tx TopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra
forall (l :: TxLevel). Tx l DijkstraEra -> DijkstraTx l DijkstraEra
unDijkstraTx
  originalBytesSize :: Tx TopTx DijkstraEra -> Int
originalBytesSize = DijkstraTx TopTx DijkstraEra -> Int
forall t. SafeToHash t => t -> Int
originalBytesSize (DijkstraTx TopTx DijkstraEra -> Int)
-> (Tx TopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra)
-> Tx TopTx DijkstraEra
-> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tx TopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra
forall (l :: TxLevel). Tx l DijkstraEra -> DijkstraTx l DijkstraEra
unDijkstraTx

instance HashAnnotated (Tx TopTx DijkstraEra) EraIndependentTx where
  hashAnnotated :: Tx TopTx DijkstraEra -> SafeHash EraIndependentTx
hashAnnotated = DijkstraTx TopTx DijkstraEra -> SafeHash EraIndependentTx
forall x i. HashAnnotated x i => x -> SafeHash i
hashAnnotated (DijkstraTx TopTx DijkstraEra -> SafeHash EraIndependentTx)
-> (Tx TopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra)
-> Tx TopTx DijkstraEra
-> SafeHash EraIndependentTx
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tx TopTx DijkstraEra -> DijkstraTx TopTx DijkstraEra
forall (l :: TxLevel). Tx l DijkstraEra -> DijkstraTx l DijkstraEra
unDijkstraTx

-- | Encode to CBOR for the purposes of transmission from node to node, or from
-- wallet to node.
--
-- Note that this serialisation is neither the serialisation used on-chain
-- (which includes the `IsPhase2Valid` flag as the last element - see
-- 'toCBORForBlockInclusion'), nor the serialisation used for computing the
-- transaction size (which omits the `IsPhase2Valid` field for compatibility
-- with Mary - see 'toCBORForSizeComputation').
toCBORForMempoolSubmission ::
  ( EncCBOR (TxBody l era)
  , EncCBOR (TxWits era)
  , EncCBOR (TxAuxData era)
  ) =>
  DijkstraTx l era ->
  Encoding
toCBORForMempoolSubmission :: forall (l :: TxLevel) era.
(EncCBOR (TxBody l era), EncCBOR (TxWits era),
 EncCBOR (TxAuxData era)) =>
DijkstraTx l era -> Encoding
toCBORForMempoolSubmission = \case
  DijkstraTopTx
    (DijkstraTopTx era -> RawType (DijkstraTopTx era)
forall t. Memoized t => t -> RawType t
getMemoRawType -> DijkstraTopTxRaw {TxBody TopTx era
dttrBody :: forall era. DijkstraTopTxRaw era -> TxBody TopTx era
dttrBody :: TxBody TopTx era
dttrBody, TxWits era
dttrWits :: forall era. DijkstraTopTxRaw era -> TxWits era
dttrWits :: TxWits era
dttrWits, IsPhase2Valid
dttrIsPhase2Valid :: forall era. DijkstraTopTxRaw era -> IsPhase2Valid
dttrIsPhase2Valid :: IsPhase2Valid
dttrIsPhase2Valid, StrictMaybe (TxAuxData era)
dttrAuxData :: forall era. DijkstraTopTxRaw era -> StrictMaybe (TxAuxData era)
dttrAuxData :: StrictMaybe (TxAuxData era)
dttrAuxData}) ->
      Encode (Closed Dense) (DijkstraTopTxRaw era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode (Closed Dense) (DijkstraTopTxRaw era) -> Encoding)
-> Encode (Closed Dense) (DijkstraTopTxRaw era) -> Encoding
forall a b. (a -> b) -> a -> b
$
        (TxBody TopTx era
 -> TxWits era
 -> IsPhase2Valid
 -> StrictMaybe (TxAuxData era)
 -> DijkstraTopTxRaw era)
-> Encode
     (Closed Dense)
     (TxBody TopTx era
      -> TxWits era
      -> IsPhase2Valid
      -> StrictMaybe (TxAuxData era)
      -> DijkstraTopTxRaw era)
forall t. t -> Encode (Closed Dense) t
Rec TxBody TopTx era
-> TxWits era
-> IsPhase2Valid
-> StrictMaybe (TxAuxData era)
-> DijkstraTopTxRaw era
forall era.
TxBody TopTx era
-> TxWits era
-> IsPhase2Valid
-> StrictMaybe (TxAuxData era)
-> DijkstraTopTxRaw era
DijkstraTopTxRaw
          Encode
  (Closed Dense)
  (TxBody TopTx era
   -> TxWits era
   -> IsPhase2Valid
   -> StrictMaybe (TxAuxData era)
   -> DijkstraTopTxRaw era)
-> Encode (Closed Dense) (TxBody TopTx era)
-> Encode
     (Closed Dense)
     (TxWits era
      -> IsPhase2Valid
      -> StrictMaybe (TxAuxData era)
      -> DijkstraTopTxRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> TxBody TopTx era -> Encode (Closed Dense) (TxBody TopTx era)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To TxBody TopTx era
dttrBody
          Encode
  (Closed Dense)
  (TxWits era
   -> IsPhase2Valid
   -> StrictMaybe (TxAuxData era)
   -> DijkstraTopTxRaw era)
-> Encode (Closed Dense) (TxWits era)
-> Encode
     (Closed Dense)
     (IsPhase2Valid
      -> StrictMaybe (TxAuxData era) -> DijkstraTopTxRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> TxWits era -> Encode (Closed Dense) (TxWits era)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To TxWits era
dttrWits
          Encode
  (Closed Dense)
  (IsPhase2Valid
   -> StrictMaybe (TxAuxData era) -> DijkstraTopTxRaw era)
-> Encode (Closed (ZonkAny 0)) IsPhase2Valid
-> Encode
     (Closed Dense)
     (StrictMaybe (TxAuxData era) -> DijkstraTopTxRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> IsPhase2Valid -> Encode (Closed (ZonkAny 0)) IsPhase2Valid
forall t (w :: Wrapped). t -> Encode w t
OmitC IsPhase2Valid
dttrIsPhase2Valid
          Encode
  (Closed Dense)
  (StrictMaybe (TxAuxData era) -> DijkstraTopTxRaw era)
-> Encode (Closed Dense) (StrictMaybe (TxAuxData era))
-> Encode (Closed Dense) (DijkstraTopTxRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> (StrictMaybe (TxAuxData era) -> Encoding)
-> StrictMaybe (TxAuxData era)
-> Encode (Closed Dense) (StrictMaybe (TxAuxData era))
forall t. (t -> Encoding) -> t -> Encode (Closed Dense) t
E ((TxAuxData era -> Encoding)
-> StrictMaybe (TxAuxData era) -> Encoding
forall a. (a -> Encoding) -> StrictMaybe a -> Encoding
encodeNullStrictMaybe TxAuxData era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR) StrictMaybe (TxAuxData era)
dttrAuxData
  DijkstraSubTx {TxBody SubTx era
dstBody :: forall era. DijkstraTx SubTx era -> TxBody SubTx era
dstBody :: TxBody SubTx era
dstBody, TxWits era
dstWits :: forall era. DijkstraTx SubTx era -> TxWits era
dstWits :: TxWits era
dstWits, StrictMaybe (TxAuxData era)
dstAuxData :: forall era. DijkstraTx SubTx era -> StrictMaybe (TxAuxData era)
dstAuxData :: StrictMaybe (TxAuxData era)
dstAuxData} ->
    Encode (Closed Dense) (DijkstraTx SubTx era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode (Closed Dense) (DijkstraTx SubTx era) -> Encoding)
-> Encode (Closed Dense) (DijkstraTx SubTx era) -> Encoding
forall a b. (a -> b) -> a -> b
$
      (TxBody SubTx era
 -> TxWits era
 -> StrictMaybe (TxAuxData era)
 -> DijkstraTx SubTx era)
-> Encode
     (Closed Dense)
     (TxBody SubTx era
      -> TxWits era
      -> StrictMaybe (TxAuxData era)
      -> DijkstraTx SubTx era)
forall t. t -> Encode (Closed Dense) t
Rec TxBody SubTx era
-> TxWits era
-> StrictMaybe (TxAuxData era)
-> DijkstraTx SubTx era
forall era.
TxBody SubTx era
-> TxWits era
-> StrictMaybe (TxAuxData era)
-> DijkstraTx SubTx era
DijkstraSubTx
        Encode
  (Closed Dense)
  (TxBody SubTx era
   -> TxWits era
   -> StrictMaybe (TxAuxData era)
   -> DijkstraTx SubTx era)
-> Encode (Closed Dense) (TxBody SubTx era)
-> Encode
     (Closed Dense)
     (TxWits era -> StrictMaybe (TxAuxData era) -> DijkstraTx SubTx era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> TxBody SubTx era -> Encode (Closed Dense) (TxBody SubTx era)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To TxBody SubTx era
dstBody
        Encode
  (Closed Dense)
  (TxWits era -> StrictMaybe (TxAuxData era) -> DijkstraTx SubTx era)
-> Encode (Closed Dense) (TxWits era)
-> Encode
     (Closed Dense)
     (StrictMaybe (TxAuxData era) -> DijkstraTx SubTx era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> TxWits era -> Encode (Closed Dense) (TxWits era)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To TxWits era
dstWits
        Encode
  (Closed Dense)
  (StrictMaybe (TxAuxData era) -> DijkstraTx SubTx era)
-> Encode (Closed Dense) (StrictMaybe (TxAuxData era))
-> Encode (Closed Dense) (DijkstraTx SubTx era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> (StrictMaybe (TxAuxData era) -> Encoding)
-> StrictMaybe (TxAuxData era)
-> Encode (Closed Dense) (StrictMaybe (TxAuxData era))
forall t. (t -> Encoding) -> t -> Encode (Closed Dense) t
E ((TxAuxData era -> Encoding)
-> StrictMaybe (TxAuxData era) -> Encoding
forall a. (a -> Encoding) -> StrictMaybe a -> Encoding
encodeNullStrictMaybe TxAuxData era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR) StrictMaybe (TxAuxData era)
dstAuxData

toCBORForBlockInclusion :: SafeToHash (Tx TopTx era) => Tx TopTx era -> Encoding
toCBORForBlockInclusion :: forall era. SafeToHash (Tx TopTx era) => Tx TopTx era -> Encoding
toCBORForBlockInclusion = ByteString -> Encoding
encodePreEncoded (ByteString -> Encoding)
-> (Tx TopTx era -> ByteString) -> Tx TopTx era -> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tx TopTx era -> ByteString
forall t. SafeToHash t => t -> ByteString
originalBytes

data DijkstraStAnnTx l era where
  DijkstraStAnnTopTx ::
    { forall era. DijkstraStAnnTx TopTx era -> Tx TopTx era
dsattTx :: !(Tx TopTx era)
    , forall era. DijkstraStAnnTx TopTx era -> ScriptsNeeded era
dsattScriptsNeeded :: ScriptsNeeded era
    , forall era. DijkstraStAnnTx TopTx era -> ScriptsProvided era
dsattScriptsProvided :: ScriptsProvided era
    , forall era. DijkstraStAnnTx TopTx era -> Bool
dsattPlutusLegacyMode :: Bool
    , forall era. DijkstraStAnnTx TopTx era -> Set Language
dsattPlutusLanguagesUsed :: Set Language
    , forall era.
DijkstraStAnnTx TopTx era
-> Map ScriptHash (SupportedPlutusRunnable era)
dsattPlutusRunnableCache :: Map.Map ScriptHash (SupportedPlutusRunnable era)
    , forall era.
DijkstraStAnnTx TopTx era
-> Either (NonEmpty (CollectError era)) [PlutusWithContext]
dsattPlutusScriptsWithContext :: Either (NonEmpty (CollectError era)) [PlutusWithContext]
    , forall era.
DijkstraStAnnTx TopTx era -> [DijkstraStAnnTx SubTx era]
dsattSubTransactions :: [DijkstraStAnnTx SubTx era]
    } ->
    DijkstraStAnnTx TopTx era
  DijkstraStAnnSubTx ::
    { forall era. DijkstraStAnnTx SubTx era -> Tx SubTx era
dsastTx :: !(Tx SubTx era)
    , forall era. DijkstraStAnnTx SubTx era -> ScriptsNeeded era
dsastScriptsNeeded :: ScriptsNeeded era
    , forall era. DijkstraStAnnTx SubTx era -> Set ScriptHash
dsastScriptsHashesNeeded :: Set ScriptHash
    , forall era. DijkstraStAnnTx SubTx era -> ScriptsProvided era
dsastScriptsProvided :: ScriptsProvided era
    , forall era. DijkstraStAnnTx SubTx era -> TxInfoResult era
dsastTxInfoResult :: TxInfoResult era
    , forall era. DijkstraStAnnTx SubTx era -> Set Language
dsastPlutusLanguagesUsed :: Set Language
    , forall era.
DijkstraStAnnTx SubTx era
-> Map ScriptHash (SupportedPlutusRunnable era)
dsastPlutusRunnableCache :: Map.Map ScriptHash (SupportedPlutusRunnable era)
    , forall era.
DijkstraStAnnTx SubTx era
-> Either (NonEmpty (CollectError era)) [PlutusWithContext]
dsastPlutusScriptsWithContext :: Either (NonEmpty (CollectError era)) [PlutusWithContext]
    } ->
    DijkstraStAnnTx SubTx era

deriving instance
  ( DijkstraEraScript era
  , Eq (Tx TopTx era)
  , Eq (Tx SubTx era)
  , Eq (ScriptsNeeded era)
  , Eq (ScriptsProvided era)
  , Eq (CollectError era)
  , Eq (TxInfoResult era)
  ) =>
  Eq (DijkstraStAnnTx l era)

deriving instance
  ( DijkstraEraScript era
  , Show (Tx TopTx era)
  , Show (Tx SubTx era)
  , Show (ScriptsNeeded era)
  , Show (ScriptsProvided era)
  , Show (CollectError era)
  , Show (TxInfoResult era)
  ) =>
  Show (DijkstraStAnnTx l era)

instance
  ( EraTxLevel era
  , STxLevel SubTx era ~ STxBothLevels SubTx era
  , STxLevel TopTx era ~ STxBothLevels TopTx era
  ) =>
  HasEraTxLevel DijkstraStAnnTx era
  where
  toSTxLevel :: forall (l :: TxLevel). DijkstraStAnnTx l era -> STxLevel l era
toSTxLevel DijkstraStAnnTopTx {} = forall era. STxBothLevels TopTx era
STopTx @era
  toSTxLevel DijkstraStAnnSubTx {} = forall era. STxBothLevels SubTx era
SSubTx @era