{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Allegra.Tx (
  validateTimelock,
  Tx (..),
) where

import Cardano.Ledger.Allegra.Era (AllegraEra)
import Cardano.Ledger.Allegra.PParams ()
import Cardano.Ledger.Allegra.Scripts (AllegraEraScript (..), Timelock, evalTimelock)
import Cardano.Ledger.Allegra.TxAuxData ()
import Cardano.Ledger.Allegra.TxBody (AllegraEraTxBody (..))
import Cardano.Ledger.Allegra.TxWits ()
import Cardano.Ledger.Binary (Annotator, DecCBOR (..), EncCBOR, ToCBOR)
import Cardano.Ledger.Core (
  EraTx (..),
  EraTxWits (..),
  HasEraTxLevel (..),
  NativeScript,
  STxTopLevel (..),
 )
import Cardano.Ledger.Keys.WitVKey (witVKeyHash)
import Cardano.Ledger.MemoBytes (EqRaw (..))
import Cardano.Ledger.Shelley.Tx (
  ShelleyTx (..),
  Tx (..),
  auxDataShelleyTxL,
  bodyShelleyTxL,
  mkBasicShelleyTx,
  shelleyMinFeeTx,
  shelleyTxEqRaw,
  sizeShelleyTxF,
  witsShelleyTxL,
 )
import Control.DeepSeq (NFData)
import qualified Data.Set as Set (map)
import Data.Typeable (Typeable)
import GHC.Generics (Generic)
import Lens.Micro (Lens', lens, (^.))
import NoThunks.Class (NoThunks)

-- ========================================

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

  mkBasicTx :: forall (l :: TxLevel). TxBody l AllegraEra -> Tx l AllegraEra
mkBasicTx = ShelleyTx l AllegraEra -> Tx l AllegraEra
forall (t :: TxLevel). ShelleyTx t AllegraEra -> Tx t AllegraEra
MkAllegraTx (ShelleyTx l AllegraEra -> Tx l AllegraEra)
-> (TxBody l AllegraEra -> ShelleyTx l AllegraEra)
-> TxBody l AllegraEra
-> Tx l AllegraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxBody l AllegraEra -> ShelleyTx l AllegraEra
forall era (l :: TxLevel).
(EraTx era, STxLevel l era ~ STxTopLevel l era) =>
TxBody l era -> ShelleyTx l era
mkBasicShelleyTx

  bodyTxL :: forall (l :: TxLevel).
Lens' (Tx l AllegraEra) (TxBody l AllegraEra)
bodyTxL = (ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
-> Tx l AllegraEra -> f (Tx l AllegraEra)
forall (t :: TxLevel) (f :: * -> *).
Functor f =>
(ShelleyTx t AllegraEra -> f (ShelleyTx t AllegraEra))
-> Tx t AllegraEra -> f (Tx t AllegraEra)
allegraTxL ((ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
 -> Tx l AllegraEra -> f (Tx l AllegraEra))
-> ((TxBody l AllegraEra -> f (TxBody l AllegraEra))
    -> ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
-> (TxBody l AllegraEra -> f (TxBody l AllegraEra))
-> Tx l AllegraEra
-> f (Tx l AllegraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxBody l AllegraEra -> f (TxBody l AllegraEra))
-> ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra)
forall (l :: TxLevel) era (f :: * -> *).
Functor f =>
(TxBody l era -> f (TxBody l era))
-> ShelleyTx l era -> f (ShelleyTx l era)
bodyShelleyTxL
  {-# INLINE bodyTxL #-}

  witsTxL :: forall (l :: TxLevel). Lens' (Tx l AllegraEra) (TxWits AllegraEra)
witsTxL = (ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
-> Tx l AllegraEra -> f (Tx l AllegraEra)
forall (t :: TxLevel) (f :: * -> *).
Functor f =>
(ShelleyTx t AllegraEra -> f (ShelleyTx t AllegraEra))
-> Tx t AllegraEra -> f (Tx t AllegraEra)
allegraTxL ((ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
 -> Tx l AllegraEra -> f (Tx l AllegraEra))
-> ((ShelleyTxWits AllegraEra -> f (ShelleyTxWits AllegraEra))
    -> ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
-> (ShelleyTxWits AllegraEra -> f (ShelleyTxWits AllegraEra))
-> Tx l AllegraEra
-> f (Tx l AllegraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxWits AllegraEra -> f (TxWits AllegraEra))
-> ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra)
(ShelleyTxWits AllegraEra -> f (ShelleyTxWits AllegraEra))
-> ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra)
forall (l :: TxLevel) era (f :: * -> *).
Functor f =>
(TxWits era -> f (TxWits era))
-> ShelleyTx l era -> f (ShelleyTx l era)
witsShelleyTxL
  {-# INLINE witsTxL #-}

  auxDataTxL :: forall (l :: TxLevel).
Lens' (Tx l AllegraEra) (StrictMaybe (TxAuxData AllegraEra))
auxDataTxL = (ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
-> Tx l AllegraEra -> f (Tx l AllegraEra)
forall (t :: TxLevel) (f :: * -> *).
Functor f =>
(ShelleyTx t AllegraEra -> f (ShelleyTx t AllegraEra))
-> Tx t AllegraEra -> f (Tx t AllegraEra)
allegraTxL ((ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
 -> Tx l AllegraEra -> f (Tx l AllegraEra))
-> ((StrictMaybe (AllegraTxAuxData AllegraEra)
     -> f (StrictMaybe (AllegraTxAuxData AllegraEra)))
    -> ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra))
-> (StrictMaybe (AllegraTxAuxData AllegraEra)
    -> f (StrictMaybe (AllegraTxAuxData AllegraEra)))
-> Tx l AllegraEra
-> f (Tx l AllegraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe (TxAuxData AllegraEra)
 -> f (StrictMaybe (TxAuxData AllegraEra)))
-> ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra)
(StrictMaybe (AllegraTxAuxData AllegraEra)
 -> f (StrictMaybe (AllegraTxAuxData AllegraEra)))
-> ShelleyTx l AllegraEra -> f (ShelleyTx l AllegraEra)
forall (l :: TxLevel) era (f :: * -> *).
Functor f =>
(StrictMaybe (TxAuxData era) -> f (StrictMaybe (TxAuxData era)))
-> ShelleyTx l era -> f (ShelleyTx l era)
auxDataShelleyTxL
  {-# INLINE auxDataTxL #-}

  sizeTxF :: forall (l :: TxLevel).
HasCallStack =>
SimpleGetter (Tx l AllegraEra) Word32
sizeTxF = (ShelleyTx l AllegraEra -> Const r (ShelleyTx l AllegraEra))
-> Tx l AllegraEra -> Const r (Tx l AllegraEra)
forall (t :: TxLevel) (f :: * -> *).
Functor f =>
(ShelleyTx t AllegraEra -> f (ShelleyTx t AllegraEra))
-> Tx t AllegraEra -> f (Tx t AllegraEra)
allegraTxL ((ShelleyTx l AllegraEra -> Const r (ShelleyTx l AllegraEra))
 -> Tx l AllegraEra -> Const r (Tx l AllegraEra))
-> ((Word32 -> Const r Word32)
    -> ShelleyTx l AllegraEra -> Const r (ShelleyTx l AllegraEra))
-> (Word32 -> Const r Word32)
-> Tx l AllegraEra
-> Const r (Tx l AllegraEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Word32 -> Const r Word32)
-> ShelleyTx l AllegraEra -> Const r (ShelleyTx l AllegraEra)
SimpleGetter (ShelleyTx l AllegraEra) Word32
forall era (l :: TxLevel).
(HasCallStack, EraTx era) =>
SimpleGetter (ShelleyTx l era) Word32
sizeShelleyTxF
  {-# INLINE sizeTxF #-}

  validateNativeScript :: forall (l :: TxLevel).
Tx l AllegraEra -> NativeScript AllegraEra -> Bool
validateNativeScript = Tx l AllegraEra -> NativeScript AllegraEra -> Bool
forall era (t :: TxLevel).
(EraTx era, AllegraEraTxBody era, AllegraEraScript era,
 NativeScript era ~ Timelock era) =>
Tx t era -> NativeScript era -> Bool
validateTimelock
  {-# INLINE validateNativeScript #-}

  getMinFeeTx :: forall (l :: TxLevel).
PParams AllegraEra -> Tx l AllegraEra -> Int -> Coin
getMinFeeTx PParams AllegraEra
pp Tx l AllegraEra
tx Int
_ = PParams AllegraEra -> Tx l AllegraEra -> Coin
forall era (l :: TxLevel).
EraTx era =>
PParams era -> Tx l era -> Coin
shelleyMinFeeTx PParams AllegraEra
pp Tx l AllegraEra
tx

instance HasEraTxLevel Tx AllegraEra where
  toSTxLevel :: forall (l :: TxLevel). Tx l AllegraEra -> STxLevel l AllegraEra
toSTxLevel (MkAllegraTx ShelleyTx {}) = forall era. STxTopLevel TopTx era
STopTxOnly @AllegraEra

instance EqRaw (Tx t AllegraEra) where
  eqRaw :: Tx t AllegraEra -> Tx t AllegraEra -> Bool
eqRaw = Tx t AllegraEra -> Tx t AllegraEra -> Bool
forall era (l :: TxLevel).
EraTx era =>
Tx l era -> Tx l era -> Bool
shelleyTxEqRaw

instance Typeable t => DecCBOR (Annotator (Tx t AllegraEra)) where
  decCBOR :: forall s. Decoder s (Annotator (Tx t AllegraEra))
decCBOR = (ShelleyTx t AllegraEra -> Tx t AllegraEra)
-> Annotator (ShelleyTx t AllegraEra)
-> Annotator (Tx t AllegraEra)
forall a b. (a -> b) -> Annotator a -> Annotator b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ShelleyTx t AllegraEra -> Tx t AllegraEra
forall (t :: TxLevel). ShelleyTx t AllegraEra -> Tx t AllegraEra
MkAllegraTx (Annotator (ShelleyTx t AllegraEra) -> Annotator (Tx t AllegraEra))
-> Decoder s (Annotator (ShelleyTx t AllegraEra))
-> Decoder s (Annotator (Tx t AllegraEra))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (Annotator (ShelleyTx t AllegraEra))
forall s. Decoder s (Annotator (ShelleyTx t AllegraEra))
forall a s. DecCBOR a => Decoder s a
decCBOR

allegraTxL :: Lens' (Tx t AllegraEra) (ShelleyTx t AllegraEra)
allegraTxL :: forall (t :: TxLevel) (f :: * -> *).
Functor f =>
(ShelleyTx t AllegraEra -> f (ShelleyTx t AllegraEra))
-> Tx t AllegraEra -> f (Tx t AllegraEra)
allegraTxL = (Tx t AllegraEra -> ShelleyTx t AllegraEra)
-> (Tx t AllegraEra -> ShelleyTx t AllegraEra -> Tx t AllegraEra)
-> Lens
     (Tx t AllegraEra)
     (Tx t AllegraEra)
     (ShelleyTx t AllegraEra)
     (ShelleyTx t AllegraEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Tx t AllegraEra -> ShelleyTx t AllegraEra
forall (t :: TxLevel). Tx t AllegraEra -> ShelleyTx t AllegraEra
unAllegraTx (\Tx t AllegraEra
x ShelleyTx t AllegraEra
y -> Tx t AllegraEra
x {unAllegraTx = y})

-- =======================================================
-- Validating timelock scripts
-- We extract ValidityInterval from TxBody with vldtTxBodyL getter
-- We still need to correctly compute the witness set for TxBody as well.

validateTimelock ::
  (EraTx era, AllegraEraTxBody era, AllegraEraScript era, NativeScript era ~ Timelock era) =>
  Tx t era -> NativeScript era -> Bool
validateTimelock :: forall era (t :: TxLevel).
(EraTx era, AllegraEraTxBody era, AllegraEraScript era,
 NativeScript era ~ Timelock era) =>
Tx t era -> NativeScript era -> Bool
validateTimelock Tx t era
tx NativeScript era
timelock = Set (KeyHash Witness)
-> ValidityInterval -> NativeScript era -> Bool
forall era.
(AllegraEraScript era, NativeScript era ~ Timelock era) =>
Set (KeyHash Witness)
-> ValidityInterval -> NativeScript era -> Bool
evalTimelock Set (KeyHash Witness)
vhks (Tx t era
tx Tx t era
-> Getting ValidityInterval (Tx t era) ValidityInterval
-> ValidityInterval
forall s a. s -> Getting a s a -> a
^. (TxBody t era -> Const ValidityInterval (TxBody t era))
-> Tx t era -> Const ValidityInterval (Tx t 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 t era -> Const ValidityInterval (TxBody t era))
 -> Tx t era -> Const ValidityInterval (Tx t era))
-> ((ValidityInterval -> Const ValidityInterval ValidityInterval)
    -> TxBody t era -> Const ValidityInterval (TxBody t era))
-> Getting ValidityInterval (Tx t era) ValidityInterval
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ValidityInterval -> Const ValidityInterval ValidityInterval)
-> TxBody t era -> Const ValidityInterval (TxBody t era)
forall era (l :: TxLevel).
AllegraEraTxBody era =>
Lens' (TxBody l era) ValidityInterval
forall (l :: TxLevel). Lens' (TxBody l era) ValidityInterval
vldtTxBodyL) NativeScript era
timelock
  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 t era
tx Tx t era
-> Getting
     (Set (WitVKey Witness)) (Tx t 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 t era -> Const (Set (WitVKey Witness)) (Tx t 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 t era -> Const (Set (WitVKey Witness)) (Tx t era))
-> ((Set (WitVKey Witness)
     -> Const (Set (WitVKey Witness)) (Set (WitVKey Witness)))
    -> TxWits era -> Const (Set (WitVKey Witness)) (TxWits era))
-> Getting
     (Set (WitVKey Witness)) (Tx t 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 validateTimelock #-}