{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}

module Cardano.Api.Experimental.Tx.Internal.SubTransaction
  ( UnsignedSubTx (..)
  , SignedSubTx (..)
  , makeUnsignedSubTx
  , makeSubTxKeyWitness
  , signSubTx
  , makeSignedSubTx
  , getUnsignedSubTxId
  , getSignedSubTxId
  , setTxSignedSubTransactions

    -- * Data family instances
  , AsType (..)
  )
where

import Cardano.Api.Experimental.Era
import Cardano.Api.Experimental.Tx.Internal.BodyContent
  ( MakeUnsignedTxError (..)
  , SubTxBodyContent
  , TxBodyContent
  , TxOut (..)
  , bodyGuardCredentials
  , collectTxBodyScriptWitnessRequirements
  , convCertificates
  , convMintValue
  , convPParamsToScriptIntegrityHash
  , convProposalProcedures
  , convReferenceInputs
  , convTxIns
  , convVotingProcedures
  , convWithdrawals
  , setTxSubTransactions
  , subTxAccountBalanceIntervals
  , subTxAuxScripts
  , subTxCertificates
  , subTxCurrentTreasuryValue
  , subTxDirectDeposits
  , subTxIns
  , subTxInsReference
  , subTxMetadata
  , subTxMintValue
  , subTxOuts
  , subTxProposalProcedures
  , subTxProtocolParams
  , subTxRequiredTopLevelGuards
  , subTxTreasuryDonation
  , subTxValidityLowerBound
  , subTxValidityUpperBound
  , subTxVotingProcedures
  , subTxWithdrawals
  , toAuxiliaryData
  )
import Cardano.Api.Experimental.Tx.Internal.TxScriptWitnessRequirements
  ( TxScriptWitnessRequirements (..)
  )
import Cardano.Api.HasTypeProxy (HasTypeProxy (..))
import Cardano.Api.Ledger.Internal.Reexport qualified as L
import Cardano.Api.Serialise.Cbor (SerialiseAsCBOR (..))
import Cardano.Api.Serialise.TextEnvelope.Internal
  ( HasTextEnvelope (..)
  , TextEnvelopeType (..)
  )
import Cardano.Api.Tx.Internal.Sign
import Cardano.Api.Tx.Internal.TxIn (TxId, fromShelleyTxId)

import Cardano.Ledger.Api qualified as L
import Cardano.Ledger.Binary qualified as Ledger
import Cardano.Ledger.Core qualified as L (TxLevel (..))
import Cardano.Ledger.Dijkstra.TxBody qualified as L
  ( DijkstraEraTxBody (accountBalanceIntervalsTxBodyL, requiredTopLevelGuardsL)
  )

import Data.ByteString.Lazy qualified as LBS
import Data.Maybe (fromMaybe)
import GHC.Exts (IsList (..))
import Lens.Micro

-- Sub-transactions exist from the Dijkstra era onwards, and Dijkstra is the
-- only such era, so the types below are fixed to it rather than indexed by the
-- era. Once a second era has sub-transactions, adding the index back is
-- mechanical.

-- | A sub-transaction with script witnesses but no key witnesses.
newtype UnsignedSubTx = UnsignedSubTx (L.Tx L.SubTx (LedgerEra DijkstraEra))
  deriving (UnsignedSubTx -> UnsignedSubTx -> Bool
(UnsignedSubTx -> UnsignedSubTx -> Bool)
-> (UnsignedSubTx -> UnsignedSubTx -> Bool) -> Eq UnsignedSubTx
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UnsignedSubTx -> UnsignedSubTx -> Bool
== :: UnsignedSubTx -> UnsignedSubTx -> Bool
$c/= :: UnsignedSubTx -> UnsignedSubTx -> Bool
/= :: UnsignedSubTx -> UnsignedSubTx -> Bool
Eq, Int -> UnsignedSubTx -> ShowS
[UnsignedSubTx] -> ShowS
UnsignedSubTx -> String
(Int -> UnsignedSubTx -> ShowS)
-> (UnsignedSubTx -> String)
-> ([UnsignedSubTx] -> ShowS)
-> Show UnsignedSubTx
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UnsignedSubTx -> ShowS
showsPrec :: Int -> UnsignedSubTx -> ShowS
$cshow :: UnsignedSubTx -> String
show :: UnsignedSubTx -> String
$cshowList :: [UnsignedSubTx] -> ShowS
showList :: [UnsignedSubTx] -> ShowS
Show)

-- | A sub-transaction with its key witnesses, see 'setTxSignedSubTransactions'.
newtype SignedSubTx = SignedSubTx (L.Tx L.SubTx (LedgerEra DijkstraEra))
  deriving (SignedSubTx -> SignedSubTx -> Bool
(SignedSubTx -> SignedSubTx -> Bool)
-> (SignedSubTx -> SignedSubTx -> Bool) -> Eq SignedSubTx
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SignedSubTx -> SignedSubTx -> Bool
== :: SignedSubTx -> SignedSubTx -> Bool
$c/= :: SignedSubTx -> SignedSubTx -> Bool
/= :: SignedSubTx -> SignedSubTx -> Bool
Eq, Int -> SignedSubTx -> ShowS
[SignedSubTx] -> ShowS
SignedSubTx -> String
(Int -> SignedSubTx -> ShowS)
-> (SignedSubTx -> String)
-> ([SignedSubTx] -> ShowS)
-> Show SignedSubTx
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SignedSubTx -> ShowS
showsPrec :: Int -> SignedSubTx -> ShowS
$cshow :: SignedSubTx -> String
show :: SignedSubTx -> String
$cshowList :: [SignedSubTx] -> ShowS
showList :: [SignedSubTx] -> ShowS
Show)

instance HasTypeProxy UnsignedSubTx where
  data AsType UnsignedSubTx = AsUnsignedSubTx
  proxyToAsType :: Proxy UnsignedSubTx -> AsType UnsignedSubTx
proxyToAsType Proxy UnsignedSubTx
_ = AsType UnsignedSubTx
AsUnsignedSubTx

instance HasTypeProxy SignedSubTx where
  data AsType SignedSubTx = AsSignedSubTx
  proxyToAsType :: Proxy SignedSubTx -> AsType SignedSubTx
proxyToAsType Proxy SignedSubTx
_ = AsType SignedSubTx
AsSignedSubTx

instance SerialiseAsCBOR UnsignedSubTx where
  serialiseToCBOR :: UnsignedSubTx -> ByteString
serialiseToCBOR (UnsignedSubTx Tx SubTx (LedgerEra DijkstraEra)
tx) = Version -> Tx SubTx DijkstraEra -> ByteString
forall a. EncCBOR a => Version -> a -> ByteString
Ledger.serialize' Version
subTxProtVer Tx SubTx DijkstraEra
Tx SubTx (LedgerEra DijkstraEra)
tx
  deserialiseFromCBOR :: AsType UnsignedSubTx
-> ByteString -> Either DecoderError UnsignedSubTx
deserialiseFromCBOR AsType UnsignedSubTx
_ ByteString
bs =
    Tx SubTx DijkstraEra -> UnsignedSubTx
Tx SubTx (LedgerEra DijkstraEra) -> UnsignedSubTx
UnsignedSubTx
      (Tx SubTx DijkstraEra -> UnsignedSubTx)
-> Either DecoderError (Tx SubTx DijkstraEra)
-> Either DecoderError UnsignedSubTx
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Version
-> Text
-> (forall s. Decoder s (Annotator (Tx SubTx DijkstraEra)))
-> ByteString
-> Either DecoderError (Tx SubTx DijkstraEra)
forall a.
Version
-> Text
-> (forall s. Decoder s (Annotator a))
-> ByteString
-> Either DecoderError a
Ledger.decodeFullAnnotator Version
subTxProtVer Text
"UnsignedSubTx" Decoder s (Annotator (Tx SubTx DijkstraEra))
forall s. Decoder s (Annotator (Tx SubTx DijkstraEra))
forall a s. DecCBOR a => Decoder s a
Ledger.decCBOR (ByteString -> ByteString
LBS.fromStrict ByteString
bs)

instance SerialiseAsCBOR SignedSubTx where
  serialiseToCBOR :: SignedSubTx -> ByteString
serialiseToCBOR (SignedSubTx Tx SubTx (LedgerEra DijkstraEra)
tx) = Version -> Tx SubTx DijkstraEra -> ByteString
forall a. EncCBOR a => Version -> a -> ByteString
Ledger.serialize' Version
subTxProtVer Tx SubTx DijkstraEra
Tx SubTx (LedgerEra DijkstraEra)
tx
  deserialiseFromCBOR :: AsType SignedSubTx -> ByteString -> Either DecoderError SignedSubTx
deserialiseFromCBOR AsType SignedSubTx
_ ByteString
bs =
    Tx SubTx DijkstraEra -> SignedSubTx
Tx SubTx (LedgerEra DijkstraEra) -> SignedSubTx
SignedSubTx
      (Tx SubTx DijkstraEra -> SignedSubTx)
-> Either DecoderError (Tx SubTx DijkstraEra)
-> Either DecoderError SignedSubTx
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Version
-> Text
-> (forall s. Decoder s (Annotator (Tx SubTx DijkstraEra)))
-> ByteString
-> Either DecoderError (Tx SubTx DijkstraEra)
forall a.
Version
-> Text
-> (forall s. Decoder s (Annotator a))
-> ByteString
-> Either DecoderError a
Ledger.decodeFullAnnotator Version
subTxProtVer Text
"SignedSubTx" Decoder s (Annotator (Tx SubTx DijkstraEra))
forall s. Decoder s (Annotator (Tx SubTx DijkstraEra))
forall a s. DecCBOR a => Decoder s a
Ledger.decCBOR (ByteString -> ByteString
LBS.fromStrict ByteString
bs)

subTxProtVer :: L.Version
subTxProtVer :: Version
subTxProtVer = forall era. Era era => Version
L.eraProtVerHigh @(LedgerEra DijkstraEra)

-- The envelope types follow the @"Tx DijkstraEra"@ naming of top-level transactions.

instance HasTextEnvelope UnsignedSubTx where
  textEnvelopeTypes :: AsType UnsignedSubTx -> NonEmpty TextEnvelopeType
textEnvelopeTypes AsType UnsignedSubTx
_ = TextEnvelopeType -> NonEmpty TextEnvelopeType
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TextEnvelopeType -> NonEmpty TextEnvelopeType)
-> TextEnvelopeType -> NonEmpty TextEnvelopeType
forall a b. (a -> b) -> a -> b
$ String -> TextEnvelopeType
TextEnvelopeType String
"Unwitnessed SubTx DijkstraEra"
  textEnvelopeDefaultDescr :: UnsignedSubTx -> TextEnvelopeDescr
textEnvelopeDefaultDescr UnsignedSubTx
_ = TextEnvelopeDescr
"Ledger Cddl Format"

instance HasTextEnvelope SignedSubTx where
  textEnvelopeTypes :: AsType SignedSubTx -> NonEmpty TextEnvelopeType
textEnvelopeTypes AsType SignedSubTx
_ = TextEnvelopeType -> NonEmpty TextEnvelopeType
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TextEnvelopeType -> NonEmpty TextEnvelopeType)
-> TextEnvelopeType -> NonEmpty TextEnvelopeType
forall a b. (a -> b) -> a -> b
$ String -> TextEnvelopeType
TextEnvelopeType String
"Witnessed SubTx DijkstraEra"
  textEnvelopeDefaultDescr :: SignedSubTx -> TextEnvelopeDescr
textEnvelopeDefaultDescr SignedSubTx
_ = TextEnvelopeDescr
"Ledger Cddl Format"

-- | The hash of the sub-transaction body. Unchanged by signing.
getUnsignedSubTxId :: UnsignedSubTx -> TxId
getUnsignedSubTxId :: UnsignedSubTx -> TxId
getUnsignedSubTxId (UnsignedSubTx Tx SubTx (LedgerEra DijkstraEra)
tx) = TxId -> TxId
fromShelleyTxId (Tx SubTx DijkstraEra -> TxId
forall era (l :: TxLevel). EraTx era => Tx l era -> TxId
L.txIdTx Tx SubTx DijkstraEra
Tx SubTx (LedgerEra DijkstraEra)
tx)

getSignedSubTxId :: SignedSubTx -> TxId
getSignedSubTxId :: SignedSubTx -> TxId
getSignedSubTxId (SignedSubTx Tx SubTx (LedgerEra DijkstraEra)
tx) = TxId -> TxId
fromShelleyTxId (Tx SubTx DijkstraEra -> TxId
forall era (l :: TxLevel). EraTx era => Tx l era -> TxId
L.txIdTx Tx SubTx DijkstraEra
Tx SubTx (LedgerEra DijkstraEra)
tx)

-- | Embed signed sub-transactions in a top-level transaction body, replacing
-- any that are already there.
setTxSignedSubTransactions
  :: [SignedSubTx]
  -> TxBodyContent (LedgerEra DijkstraEra)
  -> TxBodyContent (LedgerEra DijkstraEra)
setTxSignedSubTransactions :: [SignedSubTx]
-> TxBodyContent (LedgerEra DijkstraEra)
-> TxBodyContent (LedgerEra DijkstraEra)
setTxSignedSubTransactions [SignedSubTx]
subTxs = [Tx SubTx DijkstraEra]
-> TxBodyContent DijkstraEra -> TxBodyContent DijkstraEra
forall era.
EraTx era =>
[Tx SubTx era] -> TxBodyContent era -> TxBodyContent era
setTxSubTransactions [Tx SubTx DijkstraEra
Tx SubTx (LedgerEra DijkstraEra)
tx | SignedSubTx Tx SubTx (LedgerEra DijkstraEra)
tx <- [SignedSubTx]
subTxs]

-- | Build a sub-transaction body and its script witness set from
-- 'SubTxBodyContent'.
makeUnsignedSubTx
  :: SubTxBodyContent (LedgerEra DijkstraEra)
  -> Either MakeUnsignedTxError UnsignedSubTx
makeUnsignedSubTx :: SubTxBodyContent (LedgerEra DijkstraEra)
-> Either MakeUnsignedTxError UnsignedSubTx
makeUnsignedSubTx SubTxBodyContent (LedgerEra DijkstraEra)
st = do
  let TxScriptWitnessRequirements Set Language
languages [Script (LedgerEra DijkstraEra)]
scripts TxDats (LedgerEra DijkstraEra)
datums Redeemers (LedgerEra DijkstraEra)
redeemers =
        forall (l :: TxLevel) era.
IsEra era =>
BodyContent l (LedgerEra era)
-> TxScriptWitnessRequirements (LedgerEra era)
collectTxBodyScriptWitnessRequirements @_ @DijkstraEra SubTxBodyContent (LedgerEra DijkstraEra)
st

  scriptIntegrityHash <-
    forall era.
IsEra era =>
Maybe (PParams (LedgerEra era))
-> Redeemers (LedgerEra era)
-> TxDats (LedgerEra era)
-> Set Language
-> Either MakeUnsignedTxError (StrictMaybe ScriptIntegrityHash)
convPParamsToScriptIntegrityHash @DijkstraEra
      (SubTxBodyContent DijkstraEra -> Maybe (PParams DijkstraEra)
forall era. SubTxBodyContent era -> Maybe (PParams era)
subTxProtocolParams SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
      Redeemers (LedgerEra DijkstraEra)
redeemers
      TxDats (LedgerEra DijkstraEra)
datums
      Set Language
languages

  let txAuxData = forall era.
IsEra era =>
TxMetadata
-> [SimpleScript (LedgerEra era)]
-> Maybe (TxAuxData (LedgerEra era))
toAuxiliaryData @DijkstraEra (SubTxBodyContent DijkstraEra -> TxMetadata
forall era. SubTxBodyContent era -> TxMetadata
subTxMetadata SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st) (SubTxBodyContent DijkstraEra -> [SimpleScript DijkstraEra]
forall era. SubTxBodyContent era -> [SimpleScript era]
subTxAuxScripts SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)

      body =
        TxBody SubTx (LedgerEra DijkstraEra)
forall era (l :: TxLevel).
(EraTxBody era, Typeable l) =>
TxBody l era
forall (l :: TxLevel).
Typeable l =>
TxBody l (LedgerEra DijkstraEra)
L.mkBasicTxBody
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (Set TxIn -> Identity (Set TxIn))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) (Set TxIn)
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) (Set TxIn)
L.inputsTxBodyL ((Set TxIn -> Identity (Set TxIn))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> Set TxIn
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [(TxIn, AnyWitness DijkstraEra)] -> Set TxIn
forall era. [(TxIn, AnyWitness era)] -> Set TxIn
convTxIns (SubTxBodyContent DijkstraEra -> [(TxIn, AnyWitness DijkstraEra)]
forall era. SubTxBodyContent era -> [(TxIn, AnyWitness era)]
subTxIns SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (Set TxIn -> Identity (Set TxIn))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
BabbageEraTxBody era =>
Lens' (TxBody l era) (Set TxIn)
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) (Set TxIn)
L.referenceInputsTxBodyL ((Set TxIn -> Identity (Set TxIn))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> Set TxIn
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxInsReference DijkstraEra -> Set TxIn
forall era. TxInsReference era -> Set TxIn
convReferenceInputs (SubTxBodyContent DijkstraEra -> TxInsReference DijkstraEra
forall era. SubTxBodyContent era -> TxInsReference era
subTxInsReference SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (StrictSeq (TxOut (LedgerEra DijkstraEra))
 -> Identity (StrictSeq (TxOut (LedgerEra DijkstraEra))))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) (StrictSeq (TxOut era))
forall (l :: TxLevel).
Lens'
  (TxBody l (LedgerEra DijkstraEra))
  (StrictSeq (TxOut (LedgerEra DijkstraEra)))
L.outputsTxBodyL ((StrictSeq (TxOut (LedgerEra DijkstraEra))
  -> Identity (StrictSeq (TxOut (LedgerEra DijkstraEra))))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> StrictSeq (TxOut (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Item (StrictSeq (TxOut (LedgerEra DijkstraEra)))]
-> StrictSeq (TxOut (LedgerEra DijkstraEra))
forall l. IsList l => [Item l] -> l
fromList [Item (StrictSeq (TxOut (LedgerEra DijkstraEra)))
TxOut DijkstraEra
o | TxOut TxOut DijkstraEra
o <- SubTxBodyContent DijkstraEra -> [TxOut DijkstraEra]
forall era. SubTxBodyContent era -> [TxOut era]
subTxOuts SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st]
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (ValidityInterval -> Identity ValidityInterval)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
AllegraEraTxBody era =>
Lens' (TxBody l era) ValidityInterval
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) ValidityInterval
L.vldtTxBodyL ((ValidityInterval -> Identity ValidityInterval)
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> ((StrictMaybe SlotNo -> Identity (StrictMaybe SlotNo))
    -> ValidityInterval -> Identity ValidityInterval)
-> (StrictMaybe SlotNo -> Identity (StrictMaybe SlotNo))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe SlotNo -> Identity (StrictMaybe SlotNo))
-> ValidityInterval -> Identity ValidityInterval
Lens' ValidityInterval (StrictMaybe SlotNo)
L.invalidBeforeL ((StrictMaybe SlotNo -> Identity (StrictMaybe SlotNo))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> StrictMaybe SlotNo
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe SlotNo -> StrictMaybe SlotNo
forall a. Maybe a -> StrictMaybe a
L.maybeToStrictMaybe (SubTxBodyContent DijkstraEra -> Maybe SlotNo
forall era. SubTxBodyContent era -> Maybe SlotNo
subTxValidityLowerBound SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (ValidityInterval -> Identity ValidityInterval)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
AllegraEraTxBody era =>
Lens' (TxBody l era) ValidityInterval
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) ValidityInterval
L.vldtTxBodyL ((ValidityInterval -> Identity ValidityInterval)
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> ((StrictMaybe SlotNo -> Identity (StrictMaybe SlotNo))
    -> ValidityInterval -> Identity ValidityInterval)
-> (StrictMaybe SlotNo -> Identity (StrictMaybe SlotNo))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe SlotNo -> Identity (StrictMaybe SlotNo))
-> ValidityInterval -> Identity ValidityInterval
Lens' ValidityInterval (StrictMaybe SlotNo)
L.invalidHereAfterL ((StrictMaybe SlotNo -> Identity (StrictMaybe SlotNo))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> StrictMaybe SlotNo
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe SlotNo -> StrictMaybe SlotNo
forall a. Maybe a -> StrictMaybe a
L.maybeToStrictMaybe (SubTxBodyContent DijkstraEra -> Maybe SlotNo
forall era. SubTxBodyContent era -> Maybe SlotNo
subTxValidityUpperBound SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (StrictMaybe ScriptIntegrityHash
 -> Identity (StrictMaybe ScriptIntegrityHash))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
AlonzoEraTxBody era =>
Lens' (TxBody l era) (StrictMaybe ScriptIntegrityHash)
forall (l :: TxLevel).
Lens'
  (TxBody l (LedgerEra DijkstraEra))
  (StrictMaybe ScriptIntegrityHash)
L.scriptIntegrityHashTxBodyL ((StrictMaybe ScriptIntegrityHash
  -> Identity (StrictMaybe ScriptIntegrityHash))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> StrictMaybe ScriptIntegrityHash
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictMaybe ScriptIntegrityHash
scriptIntegrityHash
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (Withdrawals -> Identity Withdrawals)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) Withdrawals
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) Withdrawals
L.withdrawalsTxBodyL ((Withdrawals -> Identity Withdrawals)
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> Withdrawals
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxWithdrawals DijkstraEra -> Withdrawals
forall era. TxWithdrawals era -> Withdrawals
convWithdrawals (SubTxBodyContent DijkstraEra -> TxWithdrawals DijkstraEra
forall era. SubTxBodyContent era -> TxWithdrawals era
subTxWithdrawals SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (StrictSeq (TxCert (LedgerEra DijkstraEra))
 -> Identity (StrictSeq (TxCert (LedgerEra DijkstraEra))))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) (StrictSeq (TxCert era))
forall (l :: TxLevel).
Lens'
  (TxBody l (LedgerEra DijkstraEra))
  (StrictSeq (TxCert (LedgerEra DijkstraEra)))
L.certsTxBodyL ((StrictSeq (TxCert (LedgerEra DijkstraEra))
  -> Identity (StrictSeq (TxCert (LedgerEra DijkstraEra))))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> StrictSeq (TxCert (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxCertificates (LedgerEra DijkstraEra)
-> StrictSeq (TxCert (LedgerEra DijkstraEra))
forall era.
TxCertificates (LedgerEra era)
-> StrictSeq (TxCert (LedgerEra era))
convCertificates (SubTxBodyContent (LedgerEra DijkstraEra)
-> TxCertificates (LedgerEra DijkstraEra)
forall era. SubTxBodyContent era -> TxCertificates era
subTxCertificates SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (MultiAsset -> Identity MultiAsset)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
MaryEraTxBody era =>
Lens' (TxBody l era) MultiAsset
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) MultiAsset
L.mintTxBodyL ((MultiAsset -> Identity MultiAsset)
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> MultiAsset
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxMintValue DijkstraEra -> MultiAsset
forall era. TxMintValue era -> MultiAsset
convMintValue (SubTxBodyContent DijkstraEra -> TxMintValue DijkstraEra
forall era. SubTxBodyContent era -> TxMintValue era
subTxMintValue SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (StrictMaybe TxAuxDataHash -> Identity (StrictMaybe TxAuxDataHash))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
EraTxBody era =>
Lens' (TxBody l era) (StrictMaybe TxAuxDataHash)
forall (l :: TxLevel).
Lens'
  (TxBody l (LedgerEra DijkstraEra)) (StrictMaybe TxAuxDataHash)
L.auxDataHashTxBodyL ((StrictMaybe TxAuxDataHash
  -> Identity (StrictMaybe TxAuxDataHash))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> StrictMaybe TxAuxDataHash
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe TxAuxDataHash -> StrictMaybe TxAuxDataHash
forall a. Maybe a -> StrictMaybe a
L.maybeToStrictMaybe (TxAuxData DijkstraEra -> TxAuxDataHash
forall era. EraTxAuxData era => TxAuxData era -> TxAuxDataHash
L.hashTxAuxData (TxAuxData DijkstraEra -> TxAuxDataHash)
-> Maybe (TxAuxData DijkstraEra) -> Maybe TxAuxDataHash
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (TxAuxData DijkstraEra)
Maybe (TxAuxData (LedgerEra DijkstraEra))
txAuxData)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (OSet (ProposalProcedure (LedgerEra DijkstraEra))
 -> Identity (OSet (ProposalProcedure (LedgerEra DijkstraEra))))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
ConwayEraTxBody era =>
Lens' (TxBody l era) (OSet (ProposalProcedure era))
forall (l :: TxLevel).
Lens'
  (TxBody l (LedgerEra DijkstraEra))
  (OSet (ProposalProcedure (LedgerEra DijkstraEra)))
L.proposalProceduresTxBodyL ((OSet (ProposalProcedure (LedgerEra DijkstraEra))
  -> Identity (OSet (ProposalProcedure (LedgerEra DijkstraEra))))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> OSet (ProposalProcedure (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe (TxProposalProcedures (LedgerEra DijkstraEra))
-> OSet (ProposalProcedure (LedgerEra DijkstraEra))
forall era.
IsEra era =>
Maybe (TxProposalProcedures (LedgerEra era))
-> OSet (ProposalProcedure (LedgerEra era))
convProposalProcedures (SubTxBodyContent DijkstraEra
-> Maybe (TxProposalProcedures DijkstraEra)
forall era.
SubTxBodyContent era -> Maybe (TxProposalProcedures era)
subTxProposalProcedures SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (VotingProcedures (LedgerEra DijkstraEra)
 -> Identity (VotingProcedures (LedgerEra DijkstraEra)))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
ConwayEraTxBody era =>
Lens' (TxBody l era) (VotingProcedures era)
forall (l :: TxLevel).
Lens'
  (TxBody l (LedgerEra DijkstraEra))
  (VotingProcedures (LedgerEra DijkstraEra))
L.votingProceduresTxBodyL ((VotingProcedures (LedgerEra DijkstraEra)
  -> Identity (VotingProcedures (LedgerEra DijkstraEra)))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> VotingProcedures (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe (TxVotingProcedures (LedgerEra DijkstraEra))
-> VotingProcedures (LedgerEra DijkstraEra)
forall era.
Maybe (TxVotingProcedures (LedgerEra era))
-> VotingProcedures (LedgerEra era)
convVotingProcedures (SubTxBodyContent DijkstraEra
-> Maybe (TxVotingProcedures DijkstraEra)
forall era. SubTxBodyContent era -> Maybe (TxVotingProcedures era)
subTxVotingProcedures SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (Coin -> Identity Coin)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
ConwayEraTxBody era =>
Lens' (TxBody l era) Coin
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) Coin
L.treasuryDonationTxBodyL ((Coin -> Identity Coin)
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> Coin
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Coin -> Maybe Coin -> Coin
forall a. a -> Maybe a -> a
fromMaybe (Integer -> Coin
L.Coin Integer
0) (SubTxBodyContent DijkstraEra -> Maybe Coin
forall era. SubTxBodyContent era -> Maybe Coin
subTxTreasuryDonation SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (StrictMaybe Coin -> Identity (StrictMaybe Coin))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
ConwayEraTxBody era =>
Lens' (TxBody l era) (StrictMaybe Coin)
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) (StrictMaybe Coin)
L.currentTreasuryValueTxBodyL ((StrictMaybe Coin -> Identity (StrictMaybe Coin))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> StrictMaybe Coin
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Coin -> StrictMaybe Coin
forall a. Maybe a -> StrictMaybe a
L.maybeToStrictMaybe (SubTxBodyContent DijkstraEra -> Maybe Coin
forall era. SubTxBodyContent era -> Maybe Coin
subTxCurrentTreasuryValue SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st)
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (OSet (Credential Guard) -> Identity (OSet (Credential Guard)))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
DijkstraEraTxBody era =>
Lens' (TxBody l era) (OSet (Credential Guard))
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) (OSet (Credential Guard))
L.guardsTxBodyL ((OSet (Credential Guard) -> Identity (OSet (Credential Guard)))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> OSet (Credential Guard)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ SubTxBodyContent DijkstraEra -> OSet (Credential Guard)
forall (l :: TxLevel) era.
BodyContent l era -> OSet (Credential Guard)
bodyGuardCredentials SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (Map
   (Credential Guard) (StrictMaybe (Data (LedgerEra DijkstraEra)))
 -> Identity
      (Map
         (Credential Guard) (StrictMaybe (Data (LedgerEra DijkstraEra)))))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
DijkstraEraTxBody era =>
Lens'
  (TxBody l era) (Map (Credential Guard) (StrictMaybe (Data era)))
forall (l :: TxLevel).
Lens'
  (TxBody l (LedgerEra DijkstraEra))
  (Map
     (Credential Guard) (StrictMaybe (Data (LedgerEra DijkstraEra))))
L.requiredTopLevelGuardsL ((Map
    (Credential Guard) (StrictMaybe (Data (LedgerEra DijkstraEra)))
  -> Identity
       (Map
          (Credential Guard) (StrictMaybe (Data (LedgerEra DijkstraEra)))))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> Map
     (Credential Guard) (StrictMaybe (Data (LedgerEra DijkstraEra)))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ SubTxBodyContent (LedgerEra DijkstraEra)
-> Map
     (Credential Guard) (StrictMaybe (Data (LedgerEra DijkstraEra)))
forall era.
SubTxBodyContent era
-> Map (Credential Guard) (StrictMaybe (Data era))
subTxRequiredTopLevelGuards SubTxBodyContent (LedgerEra DijkstraEra)
st
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (DirectDeposits -> Identity DirectDeposits)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
DijkstraEraTxBody era =>
Lens' (TxBody l era) DirectDeposits
forall (l :: TxLevel).
Lens' (TxBody l (LedgerEra DijkstraEra)) DirectDeposits
L.directDepositsTxBodyL ((DirectDeposits -> Identity DirectDeposits)
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> DirectDeposits
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ SubTxBodyContent DijkstraEra -> DirectDeposits
forall era. SubTxBodyContent era -> DirectDeposits
subTxDirectDeposits SubTxBodyContent DijkstraEra
SubTxBodyContent (LedgerEra DijkstraEra)
st
          TxBody SubTx (LedgerEra DijkstraEra)
-> (TxBody SubTx (LedgerEra DijkstraEra)
    -> TxBody SubTx (LedgerEra DijkstraEra))
-> TxBody SubTx (LedgerEra DijkstraEra)
forall a b. a -> (a -> b) -> b
& (AccountBalanceIntervals (LedgerEra DijkstraEra)
 -> Identity (AccountBalanceIntervals (LedgerEra DijkstraEra)))
-> TxBody SubTx (LedgerEra DijkstraEra)
-> Identity (TxBody SubTx (LedgerEra DijkstraEra))
forall era (l :: TxLevel).
DijkstraEraTxBody era =>
Lens' (TxBody l era) (AccountBalanceIntervals era)
forall (l :: TxLevel).
Lens'
  (TxBody l (LedgerEra DijkstraEra))
  (AccountBalanceIntervals (LedgerEra DijkstraEra))
L.accountBalanceIntervalsTxBodyL ((AccountBalanceIntervals (LedgerEra DijkstraEra)
  -> Identity (AccountBalanceIntervals (LedgerEra DijkstraEra)))
 -> TxBody SubTx (LedgerEra DijkstraEra)
 -> Identity (TxBody SubTx (LedgerEra DijkstraEra)))
-> AccountBalanceIntervals (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
-> TxBody SubTx (LedgerEra DijkstraEra)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ SubTxBodyContent (LedgerEra DijkstraEra)
-> AccountBalanceIntervals (LedgerEra DijkstraEra)
forall era. SubTxBodyContent era -> AccountBalanceIntervals era
subTxAccountBalanceIntervals SubTxBodyContent (LedgerEra DijkstraEra)
st

      scriptWitnesses =
        TxWits DijkstraEra
forall era. EraTxWits era => TxWits era
L.mkBasicTxWits
          TxWits DijkstraEra
-> (TxWits DijkstraEra -> TxWits DijkstraEra) -> TxWits DijkstraEra
forall a b. a -> (a -> b) -> b
& (Map ScriptHash (Script DijkstraEra)
 -> Identity (Map ScriptHash (Script DijkstraEra)))
-> TxWits DijkstraEra -> Identity (TxWits DijkstraEra)
forall era.
EraTxWits era =>
Lens' (TxWits era) (Map ScriptHash (Script era))
Lens' (TxWits DijkstraEra) (Map ScriptHash (Script DijkstraEra))
L.scriptTxWitsL ((Map ScriptHash (Script DijkstraEra)
  -> Identity (Map ScriptHash (Script DijkstraEra)))
 -> TxWits DijkstraEra -> Identity (TxWits DijkstraEra))
-> Map ScriptHash (Script DijkstraEra)
-> TxWits DijkstraEra
-> TxWits DijkstraEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Item (Map ScriptHash (Script DijkstraEra))]
-> Map ScriptHash (Script DijkstraEra)
forall l. IsList l => [Item l] -> l
fromList [(Script DijkstraEra -> ScriptHash
forall era. EraScript era => Script era -> ScriptHash
L.hashScript Script DijkstraEra
AlonzoScript DijkstraEra
sw, AlonzoScript DijkstraEra
sw) | AlonzoScript DijkstraEra
sw <- [Script (LedgerEra DijkstraEra)]
[AlonzoScript DijkstraEra]
scripts]
          TxWits DijkstraEra
-> (TxWits DijkstraEra -> AlonzoTxWits DijkstraEra)
-> AlonzoTxWits DijkstraEra
forall a b. a -> (a -> b) -> b
& (TxDats DijkstraEra -> Identity (TxDats DijkstraEra))
-> TxWits DijkstraEra -> Identity (TxWits DijkstraEra)
(TxDats DijkstraEra -> Identity (TxDats DijkstraEra))
-> TxWits DijkstraEra -> Identity (AlonzoTxWits DijkstraEra)
forall era. AlonzoEraTxWits era => Lens' (TxWits era) (TxDats era)
Lens' (TxWits DijkstraEra) (TxDats DijkstraEra)
L.datsTxWitsL ((TxDats DijkstraEra -> Identity (TxDats DijkstraEra))
 -> TxWits DijkstraEra -> Identity (AlonzoTxWits DijkstraEra))
-> TxDats DijkstraEra
-> TxWits DijkstraEra
-> AlonzoTxWits DijkstraEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxDats DijkstraEra
TxDats (LedgerEra DijkstraEra)
datums
          AlonzoTxWits DijkstraEra
-> (AlonzoTxWits DijkstraEra -> AlonzoTxWits DijkstraEra)
-> AlonzoTxWits DijkstraEra
forall a b. a -> (a -> b) -> b
& (Redeemers DijkstraEra -> Identity (Redeemers DijkstraEra))
-> TxWits DijkstraEra -> Identity (TxWits DijkstraEra)
(Redeemers DijkstraEra -> Identity (Redeemers DijkstraEra))
-> AlonzoTxWits DijkstraEra -> Identity (AlonzoTxWits DijkstraEra)
forall era.
AlonzoEraTxWits era =>
Lens' (TxWits era) (Redeemers era)
Lens' (TxWits DijkstraEra) (Redeemers DijkstraEra)
L.rdmrsTxWitsL ((Redeemers DijkstraEra -> Identity (Redeemers DijkstraEra))
 -> AlonzoTxWits DijkstraEra -> Identity (AlonzoTxWits DijkstraEra))
-> Redeemers DijkstraEra
-> AlonzoTxWits DijkstraEra
-> AlonzoTxWits DijkstraEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Redeemers DijkstraEra
Redeemers (LedgerEra DijkstraEra)
redeemers

  Right $
    UnsignedSubTx $
      L.mkBasicTx body
        & L.witsTxL .~ scriptWitnesses
        & L.auxDataTxL .~ L.maybeToStrictMaybe txAuxData

-- | Sign the body of an unsigned sub-transaction with one key.
makeSubTxKeyWitness
  :: UnsignedSubTx
  -> ShelleyWitnessSigningKey
  -> L.WitVKey L.Witness
makeSubTxKeyWitness :: UnsignedSubTx -> ShelleyWitnessSigningKey -> WitVKey Witness
makeSubTxKeyWitness (UnsignedSubTx Tx SubTx (LedgerEra DijkstraEra)
unsigned) ShelleyWitnessSigningKey
wsk =
  HasCallStack =>
Hash HASH EraIndependentTxBody
-> ShelleyWitnessSigningKey -> WitVKey Witness
Hash HASH EraIndependentTxBody
-> ShelleyWitnessSigningKey -> WitVKey Witness
makeShelleyKeyWitnessFromHash (TxBody SubTx DijkstraEra -> Hash HASH EraIndependentTxBody
forall (l :: TxLevel) era.
HashAnnotated (TxBody l era) EraIndependentTxBody =>
TxBody l era -> Hash HASH EraIndependentTxBody
hashTxBody (Tx SubTx DijkstraEra
Tx SubTx (LedgerEra DijkstraEra)
unsigned Tx SubTx DijkstraEra
-> Getting
     (TxBody SubTx DijkstraEra)
     (Tx SubTx DijkstraEra)
     (TxBody SubTx DijkstraEra)
-> TxBody SubTx DijkstraEra
forall s a. s -> Getting a s a -> a
^. Getting
  (TxBody SubTx DijkstraEra)
  (Tx SubTx DijkstraEra)
  (TxBody SubTx DijkstraEra)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel).
Lens' (Tx l DijkstraEra) (TxBody l DijkstraEra)
L.bodyTxL)) ShelleyWitnessSigningKey
wsk

-- | Add key witnesses to an unsigned sub-transaction.
signSubTx
  :: [L.BootstrapWitness]
  -> [L.WitVKey L.Witness]
  -> UnsignedSubTx
  -> SignedSubTx
signSubTx :: [BootstrapWitness]
-> [WitVKey Witness] -> UnsignedSubTx -> SignedSubTx
signSubTx [BootstrapWitness]
bootstrapWits [WitVKey Witness]
shelleyKeyWits (UnsignedSubTx Tx SubTx (LedgerEra DijkstraEra)
unsigned) =
  Tx SubTx (LedgerEra DijkstraEra) -> SignedSubTx
SignedSubTx (Tx SubTx (LedgerEra DijkstraEra) -> SignedSubTx)
-> Tx SubTx (LedgerEra DijkstraEra) -> SignedSubTx
forall a b. (a -> b) -> a -> b
$ [BootstrapWitness]
-> [WitVKey Witness]
-> Tx SubTx (LedgerEra DijkstraEra)
-> Tx SubTx (LedgerEra DijkstraEra)
forall era (l :: TxLevel).
EraTx era =>
[BootstrapWitness] -> [WitVKey Witness] -> Tx l era -> Tx l era
addKeyWitnesses [BootstrapWitness]
bootstrapWits [WitVKey Witness]
shelleyKeyWits Tx SubTx (LedgerEra DijkstraEra)
unsigned

-- | Build and sign a sub-transaction in one step.
makeSignedSubTx
  :: [ShelleyWitnessSigningKey]
  -> SubTxBodyContent (LedgerEra DijkstraEra)
  -> Either MakeUnsignedTxError SignedSubTx
makeSignedSubTx :: [ShelleyWitnessSigningKey]
-> SubTxBodyContent (LedgerEra DijkstraEra)
-> Either MakeUnsignedTxError SignedSubTx
makeSignedSubTx [ShelleyWitnessSigningKey]
keys SubTxBodyContent (LedgerEra DijkstraEra)
st = do
  unsigned <- SubTxBodyContent (LedgerEra DijkstraEra)
-> Either MakeUnsignedTxError UnsignedSubTx
makeUnsignedSubTx SubTxBodyContent (LedgerEra DijkstraEra)
st
  Right $ signSubTx [] (map (makeSubTxKeyWitness unsigned) keys) unsigned