{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Ledger.Dijkstra.Tx ( Tx (..), validateDijkstraNativeScript, ) where import Cardano.Ledger.Allegra.TxBody (AllegraEraTxBody (..)) import Cardano.Ledger.Alonzo.Tx ( AlonzoEraTx, AlonzoTx (..), alonzoTxEqRaw, auxDataAlonzoTxL, bodyAlonzoTxL, isValidAlonzoTxL, mkBasicAlonzoTx, sizeAlonzoTxF, witsAlonzoTxL, ) import Cardano.Ledger.Binary (Annotator, DecCBOR (..), EncCBOR, ToCBOR) 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 (..)) import Cardano.Ledger.Dijkstra.TxWits () import Cardano.Ledger.Keys.WitVKey (witVKeyHash) import Cardano.Ledger.MemoBytes (EqRaw (..)) import Control.DeepSeq (NFData) import qualified Data.Set as Set import GHC.Generics (Generic) import Lens.Micro (Lens', lens, (^.)) import NoThunks.Class (NoThunks) instance EraTx DijkstraEra where newtype Tx DijkstraEra = MkDijkstraTx {Tx DijkstraEra -> AlonzoTx DijkstraEra unDijkstraTx :: AlonzoTx DijkstraEra} deriving newtype (Tx DijkstraEra -> Tx DijkstraEra -> Bool (Tx DijkstraEra -> Tx DijkstraEra -> Bool) -> (Tx DijkstraEra -> Tx DijkstraEra -> Bool) -> Eq (Tx DijkstraEra) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Tx DijkstraEra -> Tx DijkstraEra -> Bool == :: Tx DijkstraEra -> Tx DijkstraEra -> Bool $c/= :: Tx DijkstraEra -> Tx DijkstraEra -> Bool /= :: Tx DijkstraEra -> Tx DijkstraEra -> Bool Eq, Int -> Tx DijkstraEra -> ShowS [Tx DijkstraEra] -> ShowS Tx DijkstraEra -> String (Int -> Tx DijkstraEra -> ShowS) -> (Tx DijkstraEra -> String) -> ([Tx DijkstraEra] -> ShowS) -> Show (Tx DijkstraEra) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> Tx DijkstraEra -> ShowS showsPrec :: Int -> Tx DijkstraEra -> ShowS $cshow :: Tx DijkstraEra -> String show :: Tx DijkstraEra -> String $cshowList :: [Tx DijkstraEra] -> ShowS showList :: [Tx DijkstraEra] -> ShowS Show, Tx DijkstraEra -> () (Tx DijkstraEra -> ()) -> NFData (Tx DijkstraEra) forall a. (a -> ()) -> NFData a $crnf :: Tx DijkstraEra -> () rnf :: Tx DijkstraEra -> () NFData, Context -> Tx DijkstraEra -> IO (Maybe ThunkInfo) Proxy (Tx DijkstraEra) -> String (Context -> Tx DijkstraEra -> IO (Maybe ThunkInfo)) -> (Context -> Tx DijkstraEra -> IO (Maybe ThunkInfo)) -> (Proxy (Tx DijkstraEra) -> String) -> NoThunks (Tx DijkstraEra) forall a. (Context -> a -> IO (Maybe ThunkInfo)) -> (Context -> a -> IO (Maybe ThunkInfo)) -> (Proxy a -> String) -> NoThunks a $cnoThunks :: Context -> Tx DijkstraEra -> IO (Maybe ThunkInfo) noThunks :: Context -> Tx DijkstraEra -> IO (Maybe ThunkInfo) $cwNoThunks :: Context -> Tx DijkstraEra -> IO (Maybe ThunkInfo) wNoThunks :: Context -> Tx DijkstraEra -> IO (Maybe ThunkInfo) $cshowTypeOf :: Proxy (Tx DijkstraEra) -> String showTypeOf :: Proxy (Tx DijkstraEra) -> String NoThunks, Typeable (Tx DijkstraEra) Typeable (Tx DijkstraEra) => (Tx DijkstraEra -> Encoding) -> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy (Tx DijkstraEra) -> Size) -> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy [Tx DijkstraEra] -> Size) -> ToCBOR (Tx DijkstraEra) Tx DijkstraEra -> Encoding (forall t. ToCBOR t => Proxy t -> Size) -> Proxy [Tx DijkstraEra] -> Size (forall t. ToCBOR t => Proxy t -> Size) -> Proxy (Tx 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 $ctoCBOR :: Tx DijkstraEra -> Encoding toCBOR :: Tx DijkstraEra -> Encoding $cencodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size) -> Proxy (Tx DijkstraEra) -> Size encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size) -> Proxy (Tx DijkstraEra) -> Size $cencodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size) -> Proxy [Tx DijkstraEra] -> Size encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size) -> Proxy [Tx DijkstraEra] -> Size ToCBOR, Typeable (Tx DijkstraEra) Typeable (Tx DijkstraEra) => (Tx DijkstraEra -> Encoding) -> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy (Tx DijkstraEra) -> Size) -> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy [Tx DijkstraEra] -> Size) -> EncCBOR (Tx DijkstraEra) Tx DijkstraEra -> Encoding (forall t. EncCBOR t => Proxy t -> Size) -> Proxy [Tx DijkstraEra] -> Size (forall t. EncCBOR t => Proxy t -> Size) -> Proxy (Tx DijkstraEra) -> Size forall a. Typeable a => (a -> Encoding) -> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy a -> Size) -> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy [a] -> Size) -> EncCBOR a $cencCBOR :: Tx DijkstraEra -> Encoding encCBOR :: Tx DijkstraEra -> Encoding $cencodedSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size) -> Proxy (Tx DijkstraEra) -> Size encodedSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size) -> Proxy (Tx DijkstraEra) -> Size $cencodedListSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size) -> Proxy [Tx DijkstraEra] -> Size encodedListSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size) -> Proxy [Tx DijkstraEra] -> Size EncCBOR) deriving ((forall x. Tx DijkstraEra -> Rep (Tx DijkstraEra) x) -> (forall x. Rep (Tx DijkstraEra) x -> Tx DijkstraEra) -> Generic (Tx DijkstraEra) forall x. Rep (Tx DijkstraEra) x -> Tx DijkstraEra forall x. Tx DijkstraEra -> Rep (Tx DijkstraEra) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. Tx DijkstraEra -> Rep (Tx DijkstraEra) x from :: forall x. Tx DijkstraEra -> Rep (Tx DijkstraEra) x $cto :: forall x. Rep (Tx DijkstraEra) x -> Tx DijkstraEra to :: forall x. Rep (Tx DijkstraEra) x -> Tx DijkstraEra Generic) mkBasicTx :: TxBody DijkstraEra -> Tx DijkstraEra mkBasicTx = AlonzoTx DijkstraEra -> Tx DijkstraEra MkDijkstraTx (AlonzoTx DijkstraEra -> Tx DijkstraEra) -> (TxBody DijkstraEra -> AlonzoTx DijkstraEra) -> TxBody DijkstraEra -> Tx DijkstraEra forall b c a. (b -> c) -> (a -> b) -> a -> c . TxBody DijkstraEra -> AlonzoTx DijkstraEra forall era. Monoid (TxWits era) => TxBody era -> AlonzoTx era mkBasicAlonzoTx bodyTxL :: Lens' (Tx DijkstraEra) (TxBody DijkstraEra) bodyTxL = (AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra) Lens' (Tx DijkstraEra) (AlonzoTx DijkstraEra) dijkstraTxL ((AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra)) -> ((TxBody DijkstraEra -> f (TxBody DijkstraEra)) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> (TxBody DijkstraEra -> f (TxBody DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (TxBody DijkstraEra -> f (TxBody DijkstraEra)) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra) forall era (f :: * -> *). Functor f => (TxBody era -> f (TxBody era)) -> AlonzoTx era -> f (AlonzoTx era) bodyAlonzoTxL {-# INLINE bodyTxL #-} witsTxL :: Lens' (Tx DijkstraEra) (TxWits DijkstraEra) witsTxL = (AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra) Lens' (Tx DijkstraEra) (AlonzoTx DijkstraEra) dijkstraTxL ((AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra)) -> ((AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra)) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> (AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (TxWits DijkstraEra -> f (TxWits DijkstraEra)) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra) (AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra)) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra) forall era (f :: * -> *). Functor f => (TxWits era -> f (TxWits era)) -> AlonzoTx era -> f (AlonzoTx era) witsAlonzoTxL {-# INLINE witsTxL #-} auxDataTxL :: Lens' (Tx DijkstraEra) (StrictMaybe (TxAuxData DijkstraEra)) auxDataTxL = (AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra) Lens' (Tx DijkstraEra) (AlonzoTx DijkstraEra) dijkstraTxL ((AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra)) -> ((StrictMaybe (AlonzoTxAuxData DijkstraEra) -> f (StrictMaybe (AlonzoTxAuxData DijkstraEra))) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> (StrictMaybe (AlonzoTxAuxData DijkstraEra) -> f (StrictMaybe (AlonzoTxAuxData DijkstraEra))) -> Tx DijkstraEra -> f (Tx DijkstraEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictMaybe (TxAuxData DijkstraEra) -> f (StrictMaybe (TxAuxData DijkstraEra))) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra) (StrictMaybe (AlonzoTxAuxData DijkstraEra) -> f (StrictMaybe (AlonzoTxAuxData DijkstraEra))) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra) forall era (f :: * -> *). Functor f => (StrictMaybe (TxAuxData era) -> f (StrictMaybe (TxAuxData era))) -> AlonzoTx era -> f (AlonzoTx era) auxDataAlonzoTxL {-# INLINE auxDataTxL #-} sizeTxF :: HasCallStack => SimpleGetter (Tx DijkstraEra) Word32 sizeTxF = (AlonzoTx DijkstraEra -> Const r (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> Const r (Tx DijkstraEra) Lens' (Tx DijkstraEra) (AlonzoTx DijkstraEra) dijkstraTxL ((AlonzoTx DijkstraEra -> Const r (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> Const r (Tx DijkstraEra)) -> ((Word32 -> Const r Word32) -> AlonzoTx DijkstraEra -> Const r (AlonzoTx DijkstraEra)) -> (Word32 -> Const r Word32) -> Tx DijkstraEra -> Const r (Tx DijkstraEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Word32 -> Const r Word32) -> AlonzoTx DijkstraEra -> Const r (AlonzoTx DijkstraEra) forall era. (HasCallStack, EraTx era) => SimpleGetter (AlonzoTx era) Word32 SimpleGetter (AlonzoTx DijkstraEra) Word32 sizeAlonzoTxF {-# INLINE sizeTxF #-} validateNativeScript :: Tx DijkstraEra -> NativeScript DijkstraEra -> Bool validateNativeScript = Tx DijkstraEra -> NativeScript DijkstraEra -> Bool forall era. (EraTx era, DijkstraEraTxBody era, DijkstraEraScript era, NativeScript era ~ DijkstraNativeScript era) => Tx era -> NativeScript era -> Bool validateDijkstraNativeScript {-# INLINE validateNativeScript #-} getMinFeeTx :: PParams DijkstraEra -> Tx DijkstraEra -> Int -> Coin getMinFeeTx = PParams DijkstraEra -> Tx DijkstraEra -> Int -> Coin forall era. (EraTx era, AlonzoEraTxWits era, ConwayEraPParams era) => PParams era -> Tx era -> Int -> Coin getConwayMinFeeTx instance EqRaw (Tx DijkstraEra) where eqRaw :: Tx DijkstraEra -> Tx DijkstraEra -> Bool eqRaw = Tx DijkstraEra -> Tx DijkstraEra -> Bool forall era. AlonzoEraTx era => Tx era -> Tx era -> Bool alonzoTxEqRaw dijkstraTxL :: Lens' (Tx DijkstraEra) (AlonzoTx DijkstraEra) dijkstraTxL :: Lens' (Tx DijkstraEra) (AlonzoTx DijkstraEra) dijkstraTxL = (Tx DijkstraEra -> AlonzoTx DijkstraEra) -> (Tx DijkstraEra -> AlonzoTx DijkstraEra -> Tx DijkstraEra) -> Lens' (Tx DijkstraEra) (AlonzoTx DijkstraEra) forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b lens Tx DijkstraEra -> AlonzoTx DijkstraEra unDijkstraTx (\Tx DijkstraEra x AlonzoTx DijkstraEra y -> Tx DijkstraEra x {unDijkstraTx = y}) instance AlonzoEraTx DijkstraEra where isValidTxL :: Lens' (Tx DijkstraEra) IsValid isValidTxL = (AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra) Lens' (Tx DijkstraEra) (AlonzoTx DijkstraEra) dijkstraTxL ((AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> Tx DijkstraEra -> f (Tx DijkstraEra)) -> ((IsValid -> f IsValid) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra)) -> (IsValid -> f IsValid) -> Tx DijkstraEra -> f (Tx DijkstraEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (IsValid -> f IsValid) -> AlonzoTx DijkstraEra -> f (AlonzoTx DijkstraEra) forall era (f :: * -> *). Functor f => (IsValid -> f IsValid) -> AlonzoTx era -> f (AlonzoTx era) isValidAlonzoTxL {-# INLINE isValidTxL #-} instance DecCBOR (Annotator (Tx DijkstraEra)) where decCBOR :: forall s. Decoder s (Annotator (Tx DijkstraEra)) decCBOR = (AlonzoTx DijkstraEra -> Tx DijkstraEra) -> Annotator (AlonzoTx DijkstraEra) -> Annotator (Tx DijkstraEra) forall a b. (a -> b) -> Annotator a -> Annotator b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap AlonzoTx DijkstraEra -> Tx DijkstraEra MkDijkstraTx (Annotator (AlonzoTx DijkstraEra) -> Annotator (Tx DijkstraEra)) -> Decoder s (Annotator (AlonzoTx DijkstraEra)) -> Decoder s (Annotator (Tx DijkstraEra)) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Decoder s (Annotator (AlonzoTx DijkstraEra)) forall s. Decoder s (Annotator (AlonzoTx DijkstraEra)) forall a s. DecCBOR a => Decoder s a decCBOR validateDijkstraNativeScript :: ( EraTx era , DijkstraEraTxBody era , DijkstraEraScript era , NativeScript era ~ DijkstraNativeScript era ) => Tx era -> NativeScript era -> Bool validateDijkstraNativeScript :: forall era. (EraTx era, DijkstraEraTxBody era, DijkstraEraScript era, NativeScript era ~ DijkstraNativeScript era) => Tx era -> NativeScript era -> Bool validateDijkstraNativeScript Tx 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 era tx Tx era -> Getting ValidityInterval (Tx era) ValidityInterval -> ValidityInterval forall s a. s -> Getting a s a -> a ^. (TxBody era -> Const ValidityInterval (TxBody era)) -> Tx era -> Const ValidityInterval (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Const ValidityInterval (TxBody era)) -> Tx era -> Const ValidityInterval (Tx era)) -> ((ValidityInterval -> Const ValidityInterval ValidityInterval) -> TxBody era -> Const ValidityInterval (TxBody era)) -> Getting ValidityInterval (Tx era) ValidityInterval forall b c a. (b -> c) -> (a -> b) -> a -> c . (ValidityInterval -> Const ValidityInterval ValidityInterval) -> TxBody era -> Const ValidityInterval (TxBody era) forall era. AllegraEraTxBody era => Lens' (TxBody era) ValidityInterval Lens' (TxBody era) ValidityInterval vldtTxBodyL) (Tx era tx Tx era -> Getting (OSet (Credential 'Guard)) (Tx era) (OSet (Credential 'Guard)) -> OSet (Credential 'Guard) forall s a. s -> Getting a s a -> a ^. (TxBody era -> Const (OSet (Credential 'Guard)) (TxBody era)) -> Tx era -> Const (OSet (Credential 'Guard)) (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Const (OSet (Credential 'Guard)) (TxBody era)) -> Tx era -> Const (OSet (Credential 'Guard)) (Tx era)) -> ((OSet (Credential 'Guard) -> Const (OSet (Credential 'Guard)) (OSet (Credential 'Guard))) -> TxBody era -> Const (OSet (Credential 'Guard)) (TxBody era)) -> Getting (OSet (Credential 'Guard)) (Tx 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 era -> Const (OSet (Credential 'Guard)) (TxBody era) forall era. DijkstraEraTxBody era => Lens' (TxBody era) (OSet (Credential 'Guard)) Lens' (TxBody 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 era tx Tx era -> Getting (Set (WitVKey 'Witness)) (Tx 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 era -> Const (Set (WitVKey 'Witness)) (Tx era) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx era) (TxWits era) witsTxL ((TxWits era -> Const (Set (WitVKey 'Witness)) (TxWits era)) -> Tx era -> Const (Set (WitVKey 'Witness)) (Tx era)) -> ((Set (WitVKey 'Witness) -> Const (Set (WitVKey 'Witness)) (Set (WitVKey 'Witness))) -> TxWits era -> Const (Set (WitVKey 'Witness)) (TxWits era)) -> Getting (Set (WitVKey 'Witness)) (Tx 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 #-}