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

module Cardano.Api.Experimental.Tx
  ( UnsignedTx (..)
  , UnsignedTxError (..)
  , makeUnsignedTx
  , makeKeyWitness
  , signTx
  , convertTxBodyToUnsignedTx
  , hashTxBody
  )
where

import           Cardano.Api.Eon.ShelleyBasedEra
import           Cardano.Api.Eras.Core (ToCardanoEra (toCardanoEra), forEraInEon)
import           Cardano.Api.Experimental.Eras
import           Cardano.Api.Feature
import           Cardano.Api.Pretty (docToString, pretty)
import           Cardano.Api.ReexposeLedger (StrictMaybe (..), maybeToStrictMaybe)
import qualified Cardano.Api.ReexposeLedger as L
import           Cardano.Api.Tx.Body
import           Cardano.Api.Tx.Sign

import qualified Cardano.Ledger.Alonzo.TxBody as L
import qualified Cardano.Ledger.Api as L
import qualified Cardano.Ledger.Babbage as Ledger
import qualified Cardano.Ledger.Conway as Ledger
import qualified Cardano.Ledger.Conway.TxBody as L
import qualified Cardano.Ledger.Core as Ledger
import           Cardano.Ledger.Hashes
import qualified Cardano.Ledger.Keys as L
import qualified Cardano.Ledger.SafeHash as L

import qualified Data.Set as Set
import           GHC.Exts (IsList (..))
import           GHC.Stack
import           Lens.Micro

-- | A transaction that can contain everything
-- except key witnesses
newtype UnsignedTx era
  = UnsignedTx (Ledger.Tx (LedgerEra era))

instance IsEra era => Show (UnsignedTx era) where
  showsPrec :: Int -> UnsignedTx era -> ShowS
showsPrec Int
p (UnsignedTx Tx (LedgerEra era)
tx) = case forall era. IsEra era => Era era
useEra @era of
    Era era
BabbageEra -> Int -> AlonzoTx (BabbageEra StandardCrypto) -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
p (Tx (BabbageEra StandardCrypto)
Tx (LedgerEra era)
tx :: Ledger.Tx Ledger.Babbage)
    Era era
ConwayEra -> Int -> AlonzoTx (ConwayEra StandardCrypto) -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
p (Tx (ConwayEra StandardCrypto)
Tx (LedgerEra era)
tx :: Ledger.Tx Ledger.Conway)

newtype UnsignedTxError
  = UnsignedTxError TxBodyError

makeUnsignedTx
  :: Era era
  -> TxBodyContent BuildTx era
  -> Either TxBodyError (UnsignedTx era)
makeUnsignedTx :: forall era.
Era era
-> TxBodyContent BuildTx era -> Either TxBodyError (UnsignedTx era)
makeUnsignedTx Era era
era TxBodyContent BuildTx era
bc = Era era
-> (EraCommonConstraints era =>
    Either TxBodyError (UnsignedTx era))
-> Either TxBodyError (UnsignedTx era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => Either TxBodyError (UnsignedTx era))
 -> Either TxBodyError (UnsignedTx era))
-> (EraCommonConstraints era =>
    Either TxBodyError (UnsignedTx era))
-> Either TxBodyError (UnsignedTx era)
forall a b. (a -> b) -> a -> b
$ do
  let sbe :: ShelleyBasedEra era
sbe = Era era -> ShelleyBasedEra era
forall era. Era era -> ShelleyBasedEra era
eraToSbe Era era
era

  -- cardano-api types
  let apiTxOuts :: [TxOut CtxTx era]
apiTxOuts = TxBodyContent BuildTx era -> [TxOut CtxTx era]
forall build era. TxBodyContent build era -> [TxOut CtxTx era]
txOuts TxBodyContent BuildTx era
bc
      apiScriptWitnesses :: [(ScriptWitnessIndex, AnyScriptWitness era)]
apiScriptWitnesses = ShelleyBasedEra era
-> TxBodyContent BuildTx era
-> [(ScriptWitnessIndex, AnyScriptWitness era)]
forall era.
ShelleyBasedEra era
-> TxBodyContent BuildTx era
-> [(ScriptWitnessIndex, AnyScriptWitness era)]
collectTxBodyScriptWitnesses ShelleyBasedEra era
sbe TxBodyContent BuildTx era
bc
      apiScriptValidity :: TxScriptValidity era
apiScriptValidity = TxBodyContent BuildTx era -> TxScriptValidity era
forall build era. TxBodyContent build era -> TxScriptValidity era
txScriptValidity TxBodyContent BuildTx era
bc
      apiMintValue :: TxMintValue BuildTx era
apiMintValue = TxBodyContent BuildTx era -> TxMintValue BuildTx era
forall build era. TxBodyContent build era -> TxMintValue build era
txMintValue TxBodyContent BuildTx era
bc
      apiProtocolParameters :: BuildTxWith BuildTx (Maybe (LedgerProtocolParameters era))
apiProtocolParameters = TxBodyContent BuildTx era
-> BuildTxWith BuildTx (Maybe (LedgerProtocolParameters era))
forall build era.
TxBodyContent build era
-> BuildTxWith build (Maybe (LedgerProtocolParameters era))
txProtocolParams TxBodyContent BuildTx era
bc
      apiCollateralTxIns :: TxInsCollateral era
apiCollateralTxIns = TxBodyContent BuildTx era -> TxInsCollateral era
forall build era. TxBodyContent build era -> TxInsCollateral era
txInsCollateral TxBodyContent BuildTx era
bc
      apiReferenceInputs :: TxInsReference era
apiReferenceInputs = TxBodyContent BuildTx era -> TxInsReference era
forall build era. TxBodyContent build era -> TxInsReference era
txInsReference TxBodyContent BuildTx era
bc
      apiExtraKeyWitnesses :: TxExtraKeyWitnesses era
apiExtraKeyWitnesses = TxBodyContent BuildTx era -> TxExtraKeyWitnesses era
forall build era.
TxBodyContent build era -> TxExtraKeyWitnesses era
txExtraKeyWits TxBodyContent BuildTx era
bc
      apiReturnCollateral :: TxReturnCollateral CtxTx era
apiReturnCollateral = TxBodyContent BuildTx era -> TxReturnCollateral CtxTx era
forall build era.
TxBodyContent build era -> TxReturnCollateral CtxTx era
txReturnCollateral TxBodyContent BuildTx era
bc
      apiTotalCollateral :: TxTotalCollateral era
apiTotalCollateral = TxBodyContent BuildTx era -> TxTotalCollateral era
forall build era. TxBodyContent build era -> TxTotalCollateral era
txTotalCollateral TxBodyContent BuildTx era
bc

      -- Ledger types
      txins :: Set (TxIn StandardCrypto)
txins = TxIns BuildTx era -> Set (TxIn StandardCrypto)
forall era. TxIns BuildTx era -> Set (TxIn StandardCrypto)
convTxIns (TxIns BuildTx era -> Set (TxIn StandardCrypto))
-> TxIns BuildTx era -> Set (TxIn StandardCrypto)
forall a b. (a -> b) -> a -> b
$ TxBodyContent BuildTx era -> TxIns BuildTx era
forall build era. TxBodyContent build era -> TxIns build era
txIns TxBodyContent BuildTx era
bc
      collTxIns :: Set (TxIn StandardCrypto)
collTxIns = TxInsCollateral era -> Set (TxIn StandardCrypto)
forall era. TxInsCollateral era -> Set (TxIn StandardCrypto)
convCollateralTxIns TxInsCollateral era
apiCollateralTxIns
      refTxIns :: Set (TxIn StandardCrypto)
refTxIns = TxInsReference era -> Set (TxIn StandardCrypto)
forall era. TxInsReference era -> Set (TxIn StandardCrypto)
convReferenceInputs TxInsReference era
apiReferenceInputs
      outs :: StrictSeq (TxOut (LedgerEra era))
outs = ShelleyBasedEra era
-> [TxOut CtxTx era] -> StrictSeq (TxOut (LedgerEra era))
forall ctx era ledgerera.
(ShelleyLedgerEra era ~ ledgerera) =>
ShelleyBasedEra era
-> [TxOut ctx era] -> StrictSeq (TxOut ledgerera)
convTxOuts ShelleyBasedEra era
sbe [TxOut CtxTx era]
apiTxOuts
      fee :: Coin
fee = ShelleyBasedEra era -> TxFee era -> Coin
forall era. ShelleyBasedEra era -> TxFee era -> Coin
convTransactionFee ShelleyBasedEra era
sbe (TxFee era -> Coin) -> TxFee era -> Coin
forall a b. (a -> b) -> a -> b
$ TxBodyContent BuildTx era -> TxFee era
forall build era. TxBodyContent build era -> TxFee era
txFee TxBodyContent BuildTx era
bc
      withdrawals :: Withdrawals StandardCrypto
withdrawals = TxWithdrawals BuildTx era -> Withdrawals StandardCrypto
forall build era.
TxWithdrawals build era -> Withdrawals StandardCrypto
convWithdrawals (TxWithdrawals BuildTx era -> Withdrawals StandardCrypto)
-> TxWithdrawals BuildTx era -> Withdrawals StandardCrypto
forall a b. (a -> b) -> a -> b
$ TxBodyContent BuildTx era -> TxWithdrawals BuildTx era
forall build era.
TxBodyContent build era -> TxWithdrawals build era
txWithdrawals TxBodyContent BuildTx era
bc
      returnCollateral :: StrictMaybe (TxOut (ShelleyLedgerEra era))
returnCollateral = ShelleyBasedEra era
-> TxReturnCollateral CtxTx era
-> StrictMaybe (TxOut (ShelleyLedgerEra era))
forall era ctx.
ShelleyBasedEra era
-> TxReturnCollateral ctx era
-> StrictMaybe (TxOut (ShelleyLedgerEra era))
convReturnCollateral ShelleyBasedEra era
sbe TxReturnCollateral CtxTx era
apiReturnCollateral
      totalCollateral :: StrictMaybe Coin
totalCollateral = TxTotalCollateral era -> StrictMaybe Coin
forall era. TxTotalCollateral era -> StrictMaybe Coin
convTotalCollateral TxTotalCollateral era
apiTotalCollateral
      certs :: StrictSeq (TxCert (ShelleyLedgerEra era))
certs = ShelleyBasedEra era
-> TxCertificates BuildTx era
-> StrictSeq (TxCert (ShelleyLedgerEra era))
forall era build.
ShelleyBasedEra era
-> TxCertificates build era
-> StrictSeq (TxCert (ShelleyLedgerEra era))
convCertificates ShelleyBasedEra era
sbe (TxCertificates BuildTx era
 -> StrictSeq (TxCert (ShelleyLedgerEra era)))
-> TxCertificates BuildTx era
-> StrictSeq (TxCert (ShelleyLedgerEra era))
forall a b. (a -> b) -> a -> b
$ TxBodyContent BuildTx era -> TxCertificates BuildTx era
forall build era.
TxBodyContent build era -> TxCertificates build era
txCertificates TxBodyContent BuildTx era
bc
      txAuxData :: Maybe (TxAuxData (ShelleyLedgerEra era))
txAuxData = ShelleyBasedEra era
-> TxMetadataInEra era
-> TxAuxScripts era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
forall era.
ShelleyBasedEra era
-> TxMetadataInEra era
-> TxAuxScripts era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
toAuxiliaryData ShelleyBasedEra era
sbe (TxBodyContent BuildTx era -> TxMetadataInEra era
forall build era. TxBodyContent build era -> TxMetadataInEra era
txMetadata TxBodyContent BuildTx era
bc) (TxBodyContent BuildTx era -> TxAuxScripts era
forall build era. TxBodyContent build era -> TxAuxScripts era
txAuxScripts TxBodyContent BuildTx era
bc)
      scripts :: [Script (LedgerEra era)]
scripts = [(ScriptWitnessIndex, AnyScriptWitness era)]
-> [Script (LedgerEra era)]
forall era ledgerera.
(ShelleyLedgerEra era ~ ledgerera) =>
[(ScriptWitnessIndex, AnyScriptWitness era)] -> [Script ledgerera]
convScripts [(ScriptWitnessIndex, AnyScriptWitness era)]
apiScriptWitnesses
      languages :: Set Language
languages = [(ScriptWitnessIndex, AnyScriptWitness era)] -> Set Language
forall era.
[(ScriptWitnessIndex, AnyScriptWitness era)] -> Set Language
convLanguages [(ScriptWitnessIndex, AnyScriptWitness era)]
apiScriptWitnesses
      sData :: TxBodyScriptData era
sData = ShelleyBasedEra era
-> [TxOut CtxTx era]
-> [(ScriptWitnessIndex, AnyScriptWitness era)]
-> TxBodyScriptData era
forall era.
ShelleyBasedEra era
-> [TxOut CtxTx era]
-> [(ScriptWitnessIndex, AnyScriptWitness era)]
-> TxBodyScriptData era
convScriptData ShelleyBasedEra era
sbe [TxOut CtxTx era]
apiTxOuts [(ScriptWitnessIndex, AnyScriptWitness era)]
apiScriptWitnesses
      (TxDats (LedgerEra era)
datums, Redeemers (LedgerEra era)
redeemers) = case TxBodyScriptData era
sData of
        TxBodyScriptData AlonzoEraOnwards era
_ TxDats (ShelleyLedgerEra era)
ds Redeemers (ShelleyLedgerEra era)
rs -> (TxDats (ShelleyLedgerEra era)
TxDats (LedgerEra era)
ds, Redeemers (ShelleyLedgerEra era)
Redeemers (LedgerEra era)
rs)
        TxBodyScriptData era
TxBodyNoScriptData -> (TxDats (LedgerEra era)
forall a. Monoid a => a
mempty, Map
  (PlutusPurpose AsIx (LedgerEra era))
  (Data (LedgerEra era), ExUnits)
-> Redeemers (LedgerEra era)
forall era.
AlonzoEraScript era =>
Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
L.Redeemers Map
  (PlutusPurpose AsIx (LedgerEra era))
  (Data (LedgerEra era), ExUnits)
forall a. Monoid a => a
mempty)
  let setMint :: MultiAsset StandardCrypto
setMint = TxMintValue BuildTx era -> MultiAsset StandardCrypto
forall build era.
TxMintValue build era -> MultiAsset StandardCrypto
convMintValue TxMintValue BuildTx era
apiMintValue
      setReqSignerHashes :: Set (KeyHash 'Witness StandardCrypto)
setReqSignerHashes = TxExtraKeyWitnesses era -> Set (KeyHash 'Witness StandardCrypto)
forall era.
TxExtraKeyWitnesses era -> Set (KeyHash 'Witness StandardCrypto)
convExtraKeyWitnesses TxExtraKeyWitnesses era
apiExtraKeyWitnesses
      ledgerTxBody :: TxBody (LedgerEra era)
ledgerTxBody =
        TxBody (LedgerEra era)
forall era. EraTxBody era => TxBody era
L.mkBasicTxBody
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (Set (TxIn (EraCrypto (LedgerEra era)))
 -> Identity (Set (TxIn (EraCrypto (LedgerEra era)))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
(Set (TxIn (EraCrypto (LedgerEra era)))
 -> Identity (Set (TxIn StandardCrypto)))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
EraTxBody era =>
Lens' (TxBody era) (Set (TxIn (EraCrypto era)))
Lens'
  (TxBody (LedgerEra era)) (Set (TxIn (EraCrypto (LedgerEra era))))
L.inputsTxBodyL ((Set (TxIn (EraCrypto (LedgerEra era)))
  -> Identity (Set (TxIn StandardCrypto)))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> Set (TxIn StandardCrypto)
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set (TxIn StandardCrypto)
txins
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (Set (TxIn (EraCrypto (LedgerEra era)))
 -> Identity (Set (TxIn (EraCrypto (LedgerEra era)))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
(Set (TxIn (EraCrypto (LedgerEra era)))
 -> Identity (Set (TxIn StandardCrypto)))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
AlonzoEraTxBody era =>
Lens' (TxBody era) (Set (TxIn (EraCrypto era)))
Lens'
  (TxBody (LedgerEra era)) (Set (TxIn (EraCrypto (LedgerEra era))))
L.collateralInputsTxBodyL ((Set (TxIn (EraCrypto (LedgerEra era)))
  -> Identity (Set (TxIn StandardCrypto)))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> Set (TxIn StandardCrypto)
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set (TxIn StandardCrypto)
collTxIns
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (Set (TxIn (EraCrypto (LedgerEra era)))
 -> Identity (Set (TxIn (EraCrypto (LedgerEra era)))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
(Set (TxIn (EraCrypto (LedgerEra era)))
 -> Identity (Set (TxIn StandardCrypto)))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
BabbageEraTxBody era =>
Lens' (TxBody era) (Set (TxIn (EraCrypto era)))
Lens'
  (TxBody (LedgerEra era)) (Set (TxIn (EraCrypto (LedgerEra era))))
L.referenceInputsTxBodyL ((Set (TxIn (EraCrypto (LedgerEra era)))
  -> Identity (Set (TxIn StandardCrypto)))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> Set (TxIn StandardCrypto)
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set (TxIn StandardCrypto)
refTxIns
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (StrictSeq (TxOut (LedgerEra era))
 -> Identity (StrictSeq (TxOut (LedgerEra era))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
EraTxBody era =>
Lens' (TxBody era) (StrictSeq (TxOut era))
Lens' (TxBody (LedgerEra era)) (StrictSeq (TxOut (LedgerEra era)))
L.outputsTxBodyL ((StrictSeq (TxOut (LedgerEra era))
  -> Identity (StrictSeq (TxOut (LedgerEra era))))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> StrictSeq (TxOut (LedgerEra era))
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictSeq (TxOut (LedgerEra era))
outs
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (StrictMaybe Coin -> Identity (StrictMaybe Coin))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
BabbageEraTxBody era =>
Lens' (TxBody era) (StrictMaybe Coin)
Lens' (TxBody (LedgerEra era)) (StrictMaybe Coin)
L.totalCollateralTxBodyL ((StrictMaybe Coin -> Identity (StrictMaybe Coin))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> StrictMaybe Coin
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictMaybe Coin
totalCollateral
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (StrictMaybe (TxOut (LedgerEra era))
 -> Identity (StrictMaybe (TxOut (LedgerEra era))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
BabbageEraTxBody era =>
Lens' (TxBody era) (StrictMaybe (TxOut era))
Lens'
  (TxBody (LedgerEra era)) (StrictMaybe (TxOut (LedgerEra era)))
L.collateralReturnTxBodyL ((StrictMaybe (TxOut (LedgerEra era))
  -> Identity (StrictMaybe (TxOut (LedgerEra era))))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> StrictMaybe (TxOut (LedgerEra era))
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictMaybe (TxOut (ShelleyLedgerEra era))
StrictMaybe (TxOut (LedgerEra era))
returnCollateral
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (Coin -> Identity Coin)
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era. EraTxBody era => Lens' (TxBody era) Coin
Lens' (TxBody (LedgerEra era)) Coin
L.feeTxBodyL ((Coin -> Identity Coin)
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> Coin -> TxBody (LedgerEra era) -> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Coin
fee
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (ValidityInterval -> Identity ValidityInterval)
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
AllegraEraTxBody era =>
Lens' (TxBody era) ValidityInterval
Lens' (TxBody (LedgerEra era)) ValidityInterval
L.vldtTxBodyL ((ValidityInterval -> Identity ValidityInterval)
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> ((Maybe SlotNo -> Identity (Maybe SlotNo))
    -> ValidityInterval -> Identity ValidityInterval)
-> (Maybe SlotNo -> Identity (Maybe SlotNo))
-> TxBody (LedgerEra era)
-> Identity (TxBody (LedgerEra era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Maybe SlotNo -> Identity (Maybe SlotNo))
-> ValidityInterval -> Identity ValidityInterval
Lens' ValidityInterval (Maybe SlotNo)
L.invalidBeforeL ((Maybe SlotNo -> Identity (Maybe SlotNo))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> Maybe SlotNo -> TxBody (LedgerEra era) -> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxValidityLowerBound era -> Maybe SlotNo
forall era. TxValidityLowerBound era -> Maybe SlotNo
convValidityLowerBound (TxBodyContent BuildTx era -> TxValidityLowerBound era
forall build era.
TxBodyContent build era -> TxValidityLowerBound era
txValidityLowerBound TxBodyContent BuildTx era
bc)
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (ValidityInterval -> Identity ValidityInterval)
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
AllegraEraTxBody era =>
Lens' (TxBody era) ValidityInterval
Lens' (TxBody (LedgerEra era)) ValidityInterval
L.vldtTxBodyL ((ValidityInterval -> Identity ValidityInterval)
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> ((Maybe SlotNo -> Identity (Maybe SlotNo))
    -> ValidityInterval -> Identity ValidityInterval)
-> (Maybe SlotNo -> Identity (Maybe SlotNo))
-> TxBody (LedgerEra era)
-> Identity (TxBody (LedgerEra era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Maybe SlotNo -> Identity (Maybe SlotNo))
-> ValidityInterval -> Identity ValidityInterval
Lens' ValidityInterval (Maybe SlotNo)
L.invalidHereAfterL ((Maybe SlotNo -> Identity (Maybe SlotNo))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> Maybe SlotNo -> TxBody (LedgerEra era) -> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ ShelleyBasedEra era -> TxValidityUpperBound era -> Maybe SlotNo
forall era.
ShelleyBasedEra era -> TxValidityUpperBound era -> Maybe SlotNo
convValidityUpperBound ShelleyBasedEra era
sbe (TxBodyContent BuildTx era -> TxValidityUpperBound era
forall build era.
TxBodyContent build era -> TxValidityUpperBound era
txValidityUpperBound TxBodyContent BuildTx era
bc)
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (Set (KeyHash 'Witness (EraCrypto (LedgerEra era)))
 -> Identity (Set (KeyHash 'Witness (EraCrypto (LedgerEra era)))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
(Set (KeyHash 'Witness (EraCrypto (LedgerEra era)))
 -> Identity (Set (KeyHash 'Witness StandardCrypto)))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
AlonzoEraTxBody era =>
Lens' (TxBody era) (Set (KeyHash 'Witness (EraCrypto era)))
Lens'
  (TxBody (LedgerEra era))
  (Set (KeyHash 'Witness (EraCrypto (LedgerEra era))))
L.reqSignerHashesTxBodyL ((Set (KeyHash 'Witness (EraCrypto (LedgerEra era)))
  -> Identity (Set (KeyHash 'Witness StandardCrypto)))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> Set (KeyHash 'Witness StandardCrypto)
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set (KeyHash 'Witness StandardCrypto)
setReqSignerHashes
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (StrictMaybe (ScriptIntegrityHash (EraCrypto (LedgerEra era)))
 -> Identity
      (StrictMaybe (ScriptIntegrityHash (EraCrypto (LedgerEra era)))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
AlonzoEraTxBody era =>
Lens'
  (TxBody era) (StrictMaybe (ScriptIntegrityHash (EraCrypto era)))
Lens'
  (TxBody (LedgerEra era))
  (StrictMaybe (ScriptIntegrityHash (EraCrypto (LedgerEra era))))
L.scriptIntegrityHashTxBodyL ((StrictMaybe (ScriptIntegrityHash (EraCrypto (LedgerEra era)))
  -> Identity
       (StrictMaybe (ScriptIntegrityHash (EraCrypto (LedgerEra era)))))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> StrictMaybe (ScriptIntegrityHash (EraCrypto (LedgerEra era)))
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ BuildTxWith BuildTx (Maybe (LedgerProtocolParameters era))
-> Set Language
-> TxBodyScriptData era
-> StrictMaybe
     (ScriptIntegrityHash (EraCrypto (ShelleyLedgerEra era)))
forall era.
BuildTxWith BuildTx (Maybe (LedgerProtocolParameters era))
-> Set Language
-> TxBodyScriptData era
-> StrictMaybe
     (ScriptIntegrityHash (EraCrypto (ShelleyLedgerEra era)))
getScriptIntegrityHash BuildTxWith BuildTx (Maybe (LedgerProtocolParameters era))
apiProtocolParameters Set Language
languages TxBodyScriptData era
sData
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (Withdrawals (EraCrypto (LedgerEra era))
 -> Identity (Withdrawals (EraCrypto (LedgerEra era))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
(Withdrawals (EraCrypto (LedgerEra era))
 -> Identity (Withdrawals StandardCrypto))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
EraTxBody era =>
Lens' (TxBody era) (Withdrawals (EraCrypto era))
Lens'
  (TxBody (LedgerEra era)) (Withdrawals (EraCrypto (LedgerEra era)))
L.withdrawalsTxBodyL ((Withdrawals (EraCrypto (LedgerEra era))
  -> Identity (Withdrawals StandardCrypto))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> Withdrawals StandardCrypto
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Withdrawals StandardCrypto
withdrawals
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (StrictSeq (TxCert (LedgerEra era))
 -> Identity (StrictSeq (TxCert (LedgerEra era))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
EraTxBody era =>
Lens' (TxBody era) (StrictSeq (TxCert era))
Lens' (TxBody (LedgerEra era)) (StrictSeq (TxCert (LedgerEra era)))
L.certsTxBodyL ((StrictSeq (TxCert (LedgerEra era))
  -> Identity (StrictSeq (TxCert (LedgerEra era))))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> StrictSeq (TxCert (LedgerEra era))
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictSeq (TxCert (ShelleyLedgerEra era))
StrictSeq (TxCert (LedgerEra era))
certs
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (MultiAsset (EraCrypto (LedgerEra era))
 -> Identity (MultiAsset (EraCrypto (LedgerEra era))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
(MultiAsset (EraCrypto (LedgerEra era))
 -> Identity (MultiAsset StandardCrypto))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
MaryEraTxBody era =>
Lens' (TxBody era) (MultiAsset (EraCrypto era))
Lens'
  (TxBody (LedgerEra era)) (MultiAsset (EraCrypto (LedgerEra era)))
L.mintTxBodyL ((MultiAsset (EraCrypto (LedgerEra era))
  -> Identity (MultiAsset StandardCrypto))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> MultiAsset StandardCrypto
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ MultiAsset StandardCrypto
setMint
          TxBody (LedgerEra era)
-> (TxBody (LedgerEra era) -> TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))
 -> Identity
      (StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))))
-> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era))
forall era.
EraTxBody era =>
Lens'
  (TxBody era) (StrictMaybe (AuxiliaryDataHash (EraCrypto era)))
Lens'
  (TxBody (LedgerEra era))
  (StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era))))
L.auxDataHashTxBodyL ((StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))
  -> Identity
       (StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))))
 -> TxBody (LedgerEra era) -> Identity (TxBody (LedgerEra era)))
-> StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))
-> TxBody (LedgerEra era)
-> TxBody (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))
-> (TxAuxData (LedgerEra era)
    -> StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era))))
-> Maybe (TxAuxData (LedgerEra era))
-> StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))
forall b a. b -> (a -> b) -> Maybe a -> b
maybe StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))
forall a. StrictMaybe a
SNothing (AuxiliaryDataHash (EraCrypto (LedgerEra era))
-> StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))
forall a. a -> StrictMaybe a
SJust (AuxiliaryDataHash (EraCrypto (LedgerEra era))
 -> StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era))))
-> (TxAuxData (LedgerEra era)
    -> AuxiliaryDataHash (EraCrypto (LedgerEra era)))
-> TxAuxData (LedgerEra era)
-> StrictMaybe (AuxiliaryDataHash (EraCrypto (LedgerEra era)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxAuxData (LedgerEra era)
-> AuxiliaryDataHash (EraCrypto (LedgerEra era))
forall era.
EraTxAuxData era =>
TxAuxData era -> AuxiliaryDataHash (EraCrypto era)
Ledger.hashTxAuxData) Maybe (TxAuxData (ShelleyLedgerEra era))
Maybe (TxAuxData (LedgerEra era))
txAuxData

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

  TxBody (LedgerEra era)
eraSpecificTxBody <- Era era
-> TxBody (LedgerEra era)
-> TxBodyContent BuildTx era
-> Either TxBodyError (TxBody (LedgerEra era))
forall era.
Era era
-> TxBody (LedgerEra era)
-> TxBodyContent BuildTx era
-> Either TxBodyError (TxBody (LedgerEra era))
eraSpecificLedgerTxBody Era era
era TxBody (LedgerEra era)
ledgerTxBody TxBodyContent BuildTx era
bc

  UnsignedTx era -> Either TxBodyError (UnsignedTx era)
forall a. a -> Either TxBodyError a
forall (m :: * -> *) a. Monad m => a -> m a
return (UnsignedTx era -> Either TxBodyError (UnsignedTx era))
-> (Tx (LedgerEra era) -> UnsignedTx era)
-> Tx (LedgerEra era)
-> Either TxBodyError (UnsignedTx era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tx (LedgerEra era) -> UnsignedTx era
forall era. Tx (LedgerEra era) -> UnsignedTx era
UnsignedTx (Tx (LedgerEra era) -> Either TxBodyError (UnsignedTx era))
-> Tx (LedgerEra era) -> Either TxBodyError (UnsignedTx era)
forall a b. (a -> b) -> a -> b
$
    TxBody (LedgerEra era) -> Tx (LedgerEra era)
forall era. EraTx era => TxBody era -> Tx era
L.mkBasicTx TxBody (LedgerEra era)
eraSpecificTxBody
      Tx (LedgerEra era)
-> (Tx (LedgerEra era) -> Tx (LedgerEra era)) -> Tx (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era)))
-> Tx (LedgerEra era) -> Identity (Tx (LedgerEra era))
forall era. EraTx era => Lens' (Tx era) (TxWits era)
Lens' (Tx (LedgerEra era)) (TxWits (LedgerEra era))
L.witsTxL ((TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era)))
 -> Tx (LedgerEra era) -> Identity (Tx (LedgerEra era)))
-> TxWits (LedgerEra era)
-> Tx (LedgerEra era)
-> Tx (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxWits (LedgerEra era)
scriptWitnesses
      Tx (LedgerEra era)
-> (Tx (LedgerEra era) -> Tx (LedgerEra era)) -> Tx (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (StrictMaybe (TxAuxData (LedgerEra era))
 -> Identity (StrictMaybe (TxAuxData (LedgerEra era))))
-> Tx (LedgerEra era) -> Identity (Tx (LedgerEra era))
forall era.
EraTx era =>
Lens' (Tx era) (StrictMaybe (AuxiliaryData era))
Lens'
  (Tx (LedgerEra era)) (StrictMaybe (TxAuxData (LedgerEra era)))
L.auxDataTxL ((StrictMaybe (TxAuxData (LedgerEra era))
  -> Identity (StrictMaybe (TxAuxData (LedgerEra era))))
 -> Tx (LedgerEra era) -> Identity (Tx (LedgerEra era)))
-> StrictMaybe (TxAuxData (LedgerEra era))
-> Tx (LedgerEra era)
-> Tx (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe (TxAuxData (LedgerEra era))
-> StrictMaybe (TxAuxData (LedgerEra era))
forall a. Maybe a -> StrictMaybe a
maybeToStrictMaybe (ShelleyBasedEra era
-> TxMetadataInEra era
-> TxAuxScripts era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
forall era.
ShelleyBasedEra era
-> TxMetadataInEra era
-> TxAuxScripts era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
toAuxiliaryData ShelleyBasedEra era
sbe (TxBodyContent BuildTx era -> TxMetadataInEra era
forall build era. TxBodyContent build era -> TxMetadataInEra era
txMetadata TxBodyContent BuildTx era
bc) (TxBodyContent BuildTx era -> TxAuxScripts era
forall build era. TxBodyContent build era -> TxAuxScripts era
txAuxScripts TxBodyContent BuildTx era
bc))
      Tx (LedgerEra era)
-> (Tx (LedgerEra era) -> Tx (LedgerEra era)) -> Tx (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (IsValid -> Identity IsValid)
-> Tx (LedgerEra era) -> Identity (Tx (LedgerEra era))
forall era. AlonzoEraTx era => Lens' (Tx era) IsValid
Lens' (Tx (LedgerEra era)) IsValid
L.isValidTxL ((IsValid -> Identity IsValid)
 -> Tx (LedgerEra era) -> Identity (Tx (LedgerEra era)))
-> IsValid -> Tx (LedgerEra era) -> Tx (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxScriptValidity era -> IsValid
forall era. TxScriptValidity era -> IsValid
txScriptValidityToIsValid TxScriptValidity era
apiScriptValidity

eraSpecificLedgerTxBody
  :: Era era
  -> Ledger.TxBody (LedgerEra era)
  -> TxBodyContent BuildTx era
  -> Either TxBodyError (Ledger.TxBody (LedgerEra era))
eraSpecificLedgerTxBody :: forall era.
Era era
-> TxBody (LedgerEra era)
-> TxBodyContent BuildTx era
-> Either TxBodyError (TxBody (LedgerEra era))
eraSpecificLedgerTxBody Era era
BabbageEra TxBody (LedgerEra era)
ledgerbody TxBodyContent BuildTx era
bc = do
  let sbe :: ShelleyBasedEra BabbageEra
sbe = Era BabbageEra -> ShelleyBasedEra BabbageEra
forall era. Era era -> ShelleyBasedEra era
eraToSbe Era BabbageEra
BabbageEra

  StrictMaybe (Update (BabbageEra StandardCrypto))
setUpdateProposal <- ShelleyBasedEra BabbageEra
-> TxUpdateProposal BabbageEra
-> Either
     TxBodyError (StrictMaybe (Update (ShelleyLedgerEra BabbageEra)))
forall era.
ShelleyBasedEra era
-> TxUpdateProposal era
-> Either TxBodyError (StrictMaybe (Update (ShelleyLedgerEra era)))
convTxUpdateProposal ShelleyBasedEra BabbageEra
sbe (TxBodyContent BuildTx BabbageEra -> TxUpdateProposal BabbageEra
forall build era. TxBodyContent build era -> TxUpdateProposal era
txUpdateProposal TxBodyContent BuildTx era
TxBodyContent BuildTx BabbageEra
bc)

  BabbageTxBody (BabbageEra StandardCrypto)
-> Either TxBodyError (BabbageTxBody (BabbageEra StandardCrypto))
forall a. a -> Either TxBodyError a
forall (m :: * -> *) a. Monad m => a -> m a
return (BabbageTxBody (BabbageEra StandardCrypto)
 -> Either TxBodyError (BabbageTxBody (BabbageEra StandardCrypto)))
-> BabbageTxBody (BabbageEra StandardCrypto)
-> Either TxBodyError (BabbageTxBody (BabbageEra StandardCrypto))
forall a b. (a -> b) -> a -> b
$ TxBody (LedgerEra era)
BabbageTxBody (BabbageEra StandardCrypto)
ledgerbody BabbageTxBody (BabbageEra StandardCrypto)
-> (BabbageTxBody (BabbageEra StandardCrypto)
    -> BabbageTxBody (BabbageEra StandardCrypto))
-> BabbageTxBody (BabbageEra StandardCrypto)
forall a b. a -> (a -> b) -> b
& (StrictMaybe (Update (BabbageEra StandardCrypto))
 -> Identity (StrictMaybe (Update (BabbageEra StandardCrypto))))
-> TxBody (BabbageEra StandardCrypto)
-> Identity (TxBody (BabbageEra StandardCrypto))
(StrictMaybe (Update (BabbageEra StandardCrypto))
 -> Identity (StrictMaybe (Update (BabbageEra StandardCrypto))))
-> BabbageTxBody (BabbageEra StandardCrypto)
-> Identity (BabbageTxBody (BabbageEra StandardCrypto))
forall era.
ShelleyEraTxBody era =>
Lens' (TxBody era) (StrictMaybe (Update era))
Lens'
  (TxBody (BabbageEra StandardCrypto))
  (StrictMaybe (Update (BabbageEra StandardCrypto)))
L.updateTxBodyL ((StrictMaybe (Update (BabbageEra StandardCrypto))
  -> Identity (StrictMaybe (Update (BabbageEra StandardCrypto))))
 -> BabbageTxBody (BabbageEra StandardCrypto)
 -> Identity (BabbageTxBody (BabbageEra StandardCrypto)))
-> StrictMaybe (Update (BabbageEra StandardCrypto))
-> BabbageTxBody (BabbageEra StandardCrypto)
-> BabbageTxBody (BabbageEra StandardCrypto)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictMaybe (Update (BabbageEra StandardCrypto))
setUpdateProposal
eraSpecificLedgerTxBody Era era
ConwayEra TxBody (LedgerEra era)
ledgerbody TxBodyContent BuildTx era
bc =
  let propProcedures :: Maybe
  (Featured ConwayEraOnwards era (TxProposalProcedures BuildTx era))
propProcedures = TxBodyContent BuildTx era
-> Maybe
     (Featured ConwayEraOnwards era (TxProposalProcedures BuildTx era))
forall build era.
TxBodyContent build era
-> Maybe
     (Featured ConwayEraOnwards era (TxProposalProcedures build era))
txProposalProcedures TxBodyContent BuildTx era
bc
      voteProcedures :: Maybe
  (Featured ConwayEraOnwards era (TxVotingProcedures BuildTx era))
voteProcedures = TxBodyContent BuildTx era
-> Maybe
     (Featured ConwayEraOnwards era (TxVotingProcedures BuildTx era))
forall build era.
TxBodyContent build era
-> Maybe
     (Featured ConwayEraOnwards era (TxVotingProcedures build era))
txVotingProcedures TxBodyContent BuildTx era
bc
      treasuryDonation :: Maybe (Featured ConwayEraOnwards era Coin)
treasuryDonation = TxBodyContent BuildTx era
-> Maybe (Featured ConwayEraOnwards era Coin)
forall build era.
TxBodyContent build era
-> Maybe (Featured ConwayEraOnwards era Coin)
txTreasuryDonation TxBodyContent BuildTx era
bc
      currentTresuryValue :: Maybe (Featured ConwayEraOnwards era (Maybe Coin))
currentTresuryValue = TxBodyContent BuildTx era
-> Maybe (Featured ConwayEraOnwards era (Maybe Coin))
forall build era.
TxBodyContent build era
-> Maybe (Featured ConwayEraOnwards era (Maybe Coin))
txCurrentTreasuryValue TxBodyContent BuildTx era
bc
   in TxBody (LedgerEra era)
-> Either TxBodyError (TxBody (LedgerEra era))
forall a. a -> Either TxBodyError a
forall (m :: * -> *) a. Monad m => a -> m a
return (TxBody (LedgerEra era)
 -> Either TxBodyError (TxBody (LedgerEra era)))
-> TxBody (LedgerEra era)
-> Either TxBodyError (TxBody (LedgerEra era))
forall a b. (a -> b) -> a -> b
$
        TxBody (LedgerEra era)
ConwayTxBody (ConwayEra StandardCrypto)
ledgerbody
          ConwayTxBody (ConwayEra StandardCrypto)
-> (ConwayTxBody (ConwayEra StandardCrypto)
    -> ConwayTxBody (ConwayEra StandardCrypto))
-> ConwayTxBody (ConwayEra StandardCrypto)
forall a b. a -> (a -> b) -> b
& (OSet (ProposalProcedure (ConwayEra StandardCrypto))
 -> Identity (OSet (ProposalProcedure (ConwayEra StandardCrypto))))
-> TxBody (ConwayEra StandardCrypto)
-> Identity (TxBody (ConwayEra StandardCrypto))
(OSet (ProposalProcedure (ConwayEra StandardCrypto))
 -> Identity (OSet (ProposalProcedure (ConwayEra StandardCrypto))))
-> ConwayTxBody (ConwayEra StandardCrypto)
-> Identity (ConwayTxBody (ConwayEra StandardCrypto))
forall era.
ConwayEraTxBody era =>
Lens' (TxBody era) (OSet (ProposalProcedure era))
Lens'
  (TxBody (ConwayEra StandardCrypto))
  (OSet (ProposalProcedure (ConwayEra StandardCrypto)))
L.proposalProceduresTxBodyL
            ((OSet (ProposalProcedure (ConwayEra StandardCrypto))
  -> Identity (OSet (ProposalProcedure (ConwayEra StandardCrypto))))
 -> ConwayTxBody (ConwayEra StandardCrypto)
 -> Identity (ConwayTxBody (ConwayEra StandardCrypto)))
-> OSet (ProposalProcedure (ConwayEra StandardCrypto))
-> ConwayTxBody (ConwayEra StandardCrypto)
-> ConwayTxBody (ConwayEra StandardCrypto)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxProposalProcedures BuildTx era
-> OSet (ProposalProcedure (ShelleyLedgerEra era))
forall build era.
TxProposalProcedures build era
-> OSet (ProposalProcedure (ShelleyLedgerEra era))
convProposalProcedures (TxProposalProcedures BuildTx era
-> (Featured
      ConwayEraOnwards era (TxProposalProcedures BuildTx era)
    -> TxProposalProcedures BuildTx era)
-> Maybe
     (Featured ConwayEraOnwards era (TxProposalProcedures BuildTx era))
-> TxProposalProcedures BuildTx era
forall b a. b -> (a -> b) -> Maybe a -> b
maybe TxProposalProcedures BuildTx era
forall build era. TxProposalProcedures build era
TxProposalProceduresNone Featured ConwayEraOnwards era (TxProposalProcedures BuildTx era)
-> TxProposalProcedures BuildTx era
forall (eon :: * -> *) era a. Featured eon era a -> a
unFeatured Maybe
  (Featured ConwayEraOnwards era (TxProposalProcedures BuildTx era))
propProcedures)
          ConwayTxBody (ConwayEra StandardCrypto)
-> (ConwayTxBody (ConwayEra StandardCrypto)
    -> ConwayTxBody (ConwayEra StandardCrypto))
-> ConwayTxBody (ConwayEra StandardCrypto)
forall a b. a -> (a -> b) -> b
& (VotingProcedures (ConwayEra StandardCrypto)
 -> Identity (VotingProcedures (ConwayEra StandardCrypto)))
-> TxBody (ConwayEra StandardCrypto)
-> Identity (TxBody (ConwayEra StandardCrypto))
(VotingProcedures (ConwayEra StandardCrypto)
 -> Identity (VotingProcedures (ConwayEra StandardCrypto)))
-> ConwayTxBody (ConwayEra StandardCrypto)
-> Identity (ConwayTxBody (ConwayEra StandardCrypto))
forall era.
ConwayEraTxBody era =>
Lens' (TxBody era) (VotingProcedures era)
Lens'
  (TxBody (ConwayEra StandardCrypto))
  (VotingProcedures (ConwayEra StandardCrypto))
L.votingProceduresTxBodyL
            ((VotingProcedures (ConwayEra StandardCrypto)
  -> Identity (VotingProcedures (ConwayEra StandardCrypto)))
 -> ConwayTxBody (ConwayEra StandardCrypto)
 -> Identity (ConwayTxBody (ConwayEra StandardCrypto)))
-> VotingProcedures (ConwayEra StandardCrypto)
-> ConwayTxBody (ConwayEra StandardCrypto)
-> ConwayTxBody (ConwayEra StandardCrypto)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TxVotingProcedures BuildTx era
-> VotingProcedures (ShelleyLedgerEra era)
forall build era.
TxVotingProcedures build era
-> VotingProcedures (ShelleyLedgerEra era)
convVotingProcedures (TxVotingProcedures BuildTx era
-> (Featured ConwayEraOnwards era (TxVotingProcedures BuildTx era)
    -> TxVotingProcedures BuildTx era)
-> Maybe
     (Featured ConwayEraOnwards era (TxVotingProcedures BuildTx era))
-> TxVotingProcedures BuildTx era
forall b a. b -> (a -> b) -> Maybe a -> b
maybe TxVotingProcedures BuildTx era
forall build era. TxVotingProcedures build era
TxVotingProceduresNone Featured ConwayEraOnwards era (TxVotingProcedures BuildTx era)
-> TxVotingProcedures BuildTx era
forall (eon :: * -> *) era a. Featured eon era a -> a
unFeatured Maybe
  (Featured ConwayEraOnwards era (TxVotingProcedures BuildTx era))
voteProcedures)
          ConwayTxBody (ConwayEra StandardCrypto)
-> (ConwayTxBody (ConwayEra StandardCrypto)
    -> ConwayTxBody (ConwayEra StandardCrypto))
-> ConwayTxBody (ConwayEra StandardCrypto)
forall a b. a -> (a -> b) -> b
& (Coin -> Identity Coin)
-> TxBody (ConwayEra StandardCrypto)
-> Identity (TxBody (ConwayEra StandardCrypto))
(Coin -> Identity Coin)
-> ConwayTxBody (ConwayEra StandardCrypto)
-> Identity (ConwayTxBody (ConwayEra StandardCrypto))
forall era. ConwayEraTxBody era => Lens' (TxBody era) Coin
Lens' (TxBody (ConwayEra StandardCrypto)) Coin
L.treasuryDonationTxBodyL ((Coin -> Identity Coin)
 -> ConwayTxBody (ConwayEra StandardCrypto)
 -> Identity (ConwayTxBody (ConwayEra StandardCrypto)))
-> Coin
-> ConwayTxBody (ConwayEra StandardCrypto)
-> ConwayTxBody (ConwayEra StandardCrypto)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Coin
-> (Featured ConwayEraOnwards era Coin -> Coin)
-> Maybe (Featured ConwayEraOnwards era Coin)
-> Coin
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Integer -> Coin
L.Coin Integer
0) Featured ConwayEraOnwards era Coin -> Coin
forall (eon :: * -> *) era a. Featured eon era a -> a
unFeatured Maybe (Featured ConwayEraOnwards era Coin)
treasuryDonation
          ConwayTxBody (ConwayEra StandardCrypto)
-> (ConwayTxBody (ConwayEra StandardCrypto)
    -> ConwayTxBody (ConwayEra StandardCrypto))
-> ConwayTxBody (ConwayEra StandardCrypto)
forall a b. a -> (a -> b) -> b
& (StrictMaybe Coin -> Identity (StrictMaybe Coin))
-> TxBody (ConwayEra StandardCrypto)
-> Identity (TxBody (ConwayEra StandardCrypto))
(StrictMaybe Coin -> Identity (StrictMaybe Coin))
-> ConwayTxBody (ConwayEra StandardCrypto)
-> Identity (ConwayTxBody (ConwayEra StandardCrypto))
forall era.
ConwayEraTxBody era =>
Lens' (TxBody era) (StrictMaybe Coin)
Lens' (TxBody (ConwayEra StandardCrypto)) (StrictMaybe Coin)
L.currentTreasuryValueTxBodyL
            ((StrictMaybe Coin -> Identity (StrictMaybe Coin))
 -> ConwayTxBody (ConwayEra StandardCrypto)
 -> Identity (ConwayTxBody (ConwayEra StandardCrypto)))
-> StrictMaybe Coin
-> ConwayTxBody (ConwayEra StandardCrypto)
-> ConwayTxBody (ConwayEra StandardCrypto)
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 (Featured ConwayEraOnwards era (Maybe Coin) -> Maybe Coin
forall (eon :: * -> *) era a. Featured eon era a -> a
unFeatured (Featured ConwayEraOnwards era (Maybe Coin) -> Maybe Coin)
-> Maybe (Featured ConwayEraOnwards era (Maybe Coin)) -> Maybe Coin
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Maybe (Featured ConwayEraOnwards era (Maybe Coin))
currentTresuryValue)

hashTxBody
  :: L.HashAnnotated (Ledger.TxBody era) EraIndependentTxBody L.StandardCrypto
  => L.TxBody era -> L.Hash L.StandardCrypto EraIndependentTxBody
hashTxBody :: forall era.
HashAnnotated (TxBody era) EraIndependentTxBody StandardCrypto =>
TxBody era -> Hash StandardCrypto EraIndependentTxBody
hashTxBody = forall c i. SafeHash c i -> Hash (HASH c) i
L.extractHash @L.StandardCrypto (SafeHash StandardCrypto EraIndependentTxBody
 -> Hash Blake2b_256 EraIndependentTxBody)
-> (TxBody era -> SafeHash StandardCrypto EraIndependentTxBody)
-> TxBody era
-> Hash Blake2b_256 EraIndependentTxBody
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxBody era -> SafeHash StandardCrypto EraIndependentTxBody
forall x index c.
(HashAnnotated x index c, HashAlgorithm (HASH c)) =>
x -> SafeHash c index
L.hashAnnotated

makeKeyWitness
  :: Era era
  -> UnsignedTx era
  -> ShelleyWitnessSigningKey
  -> L.WitVKey L.Witness L.StandardCrypto
makeKeyWitness :: forall era.
Era era
-> UnsignedTx era
-> ShelleyWitnessSigningKey
-> WitVKey 'Witness StandardCrypto
makeKeyWitness Era era
era (UnsignedTx Tx (LedgerEra era)
unsignedTx) ShelleyWitnessSigningKey
wsk =
  Era era
-> (EraCommonConstraints era => WitVKey 'Witness StandardCrypto)
-> WitVKey 'Witness StandardCrypto
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => WitVKey 'Witness StandardCrypto)
 -> WitVKey 'Witness StandardCrypto)
-> (EraCommonConstraints era => WitVKey 'Witness StandardCrypto)
-> WitVKey 'Witness StandardCrypto
forall a b. (a -> b) -> a -> b
$
    let txbody :: TxBody (LedgerEra era)
txbody = Tx (LedgerEra era)
unsignedTx Tx (LedgerEra era)
-> Getting
     (TxBody (LedgerEra era))
     (Tx (LedgerEra era))
     (TxBody (LedgerEra era))
-> TxBody (LedgerEra era)
forall s a. s -> Getting a s a -> a
^. Getting
  (TxBody (LedgerEra era))
  (Tx (LedgerEra era))
  (TxBody (LedgerEra era))
forall era. EraTx era => Lens' (Tx era) (TxBody era)
Lens' (Tx (LedgerEra era)) (TxBody (LedgerEra era))
L.bodyTxL
        txhash :: L.Hash L.StandardCrypto EraIndependentTxBody
        txhash :: Hash StandardCrypto EraIndependentTxBody
txhash = Era era
-> (EraCommonConstraints era =>
    Hash StandardCrypto EraIndependentTxBody)
-> Hash StandardCrypto EraIndependentTxBody
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era =>
  Hash StandardCrypto EraIndependentTxBody)
 -> Hash StandardCrypto EraIndependentTxBody)
-> (EraCommonConstraints era =>
    Hash StandardCrypto EraIndependentTxBody)
-> Hash StandardCrypto EraIndependentTxBody
forall a b. (a -> b) -> a -> b
$ TxBody (LedgerEra era) -> Hash StandardCrypto EraIndependentTxBody
forall era.
HashAnnotated (TxBody era) EraIndependentTxBody StandardCrypto =>
TxBody era -> Hash StandardCrypto EraIndependentTxBody
hashTxBody TxBody (LedgerEra era)
txbody
        sk :: ShelleySigningKey
sk = ShelleyWitnessSigningKey -> ShelleySigningKey
toShelleySigningKey ShelleyWitnessSigningKey
wsk
        vk :: VKey 'Witness StandardCrypto
vk = ShelleySigningKey -> VKey 'Witness StandardCrypto
getShelleyKeyWitnessVerificationKey ShelleySigningKey
sk
        signature :: SignedDSIGN StandardCrypto (Hash Blake2b_256 EraIndependentTxBody)
signature = Hash Blake2b_256 EraIndependentTxBody
-> ShelleySigningKey
-> SignedDSIGN
     StandardCrypto (Hash Blake2b_256 EraIndependentTxBody)
forall tosign.
SignableRepresentation tosign =>
tosign -> ShelleySigningKey -> SignedDSIGN StandardCrypto tosign
makeShelleySignature Hash Blake2b_256 EraIndependentTxBody
Hash StandardCrypto EraIndependentTxBody
txhash ShelleySigningKey
sk
     in VKey 'Witness StandardCrypto
-> SignedDSIGN
     StandardCrypto (Hash StandardCrypto EraIndependentTxBody)
-> WitVKey 'Witness StandardCrypto
forall (kr :: KeyRole) c.
(Typeable kr, Crypto c) =>
VKey kr c
-> SignedDSIGN c (Hash c EraIndependentTxBody) -> WitVKey kr c
L.WitVKey VKey 'Witness StandardCrypto
vk SignedDSIGN StandardCrypto (Hash Blake2b_256 EraIndependentTxBody)
SignedDSIGN
  StandardCrypto (Hash StandardCrypto EraIndependentTxBody)
signature

signTx
  :: Era era
  -> [L.BootstrapWitness L.StandardCrypto]
  -> [L.WitVKey L.Witness L.StandardCrypto]
  -> UnsignedTx era
  -> Ledger.Tx (LedgerEra era)
signTx :: forall era.
Era era
-> [BootstrapWitness StandardCrypto]
-> [WitVKey 'Witness StandardCrypto]
-> UnsignedTx era
-> Tx (LedgerEra era)
signTx Era era
era [BootstrapWitness StandardCrypto]
bootstrapWits [WitVKey 'Witness StandardCrypto]
shelleyKeyWits (UnsignedTx Tx (LedgerEra era)
unsigned) =
  Era era
-> (EraCommonConstraints era => Tx (LedgerEra era))
-> Tx (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => Tx (LedgerEra era))
 -> Tx (LedgerEra era))
-> (EraCommonConstraints era => Tx (LedgerEra era))
-> Tx (LedgerEra era)
forall a b. (a -> b) -> a -> b
$
    let currentScriptWitnesses :: TxWits (LedgerEra era)
currentScriptWitnesses = Tx (LedgerEra era)
unsigned Tx (LedgerEra era)
-> Getting
     (TxWits (LedgerEra era))
     (Tx (LedgerEra era))
     (TxWits (LedgerEra era))
-> TxWits (LedgerEra era)
forall s a. s -> Getting a s a -> a
^. Getting
  (TxWits (LedgerEra era))
  (Tx (LedgerEra era))
  (TxWits (LedgerEra era))
forall era. EraTx era => Lens' (Tx era) (TxWits era)
Lens' (Tx (LedgerEra era)) (TxWits (LedgerEra era))
L.witsTxL
        keyWits :: TxWits (LedgerEra era)
keyWits =
          Era era
-> (EraCommonConstraints era => TxWits (LedgerEra era))
-> TxWits (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => TxWits (LedgerEra era))
 -> TxWits (LedgerEra era))
-> (EraCommonConstraints era => TxWits (LedgerEra era))
-> TxWits (LedgerEra era)
forall a b. (a -> b) -> a -> b
$
            TxWits (LedgerEra era)
forall era. EraTxWits era => TxWits era
L.mkBasicTxWits
              TxWits (LedgerEra era)
-> (TxWits (LedgerEra era) -> TxWits (LedgerEra era))
-> TxWits (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (Set (WitVKey 'Witness (EraCrypto (LedgerEra era)))
 -> Identity (Set (WitVKey 'Witness (EraCrypto (LedgerEra era)))))
-> TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era))
(Set (WitVKey 'Witness (EraCrypto (LedgerEra era)))
 -> Identity (Set (WitVKey 'Witness StandardCrypto)))
-> TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era))
forall era.
EraTxWits era =>
Lens' (TxWits era) (Set (WitVKey 'Witness (EraCrypto era)))
Lens'
  (TxWits (LedgerEra era))
  (Set (WitVKey 'Witness (EraCrypto (LedgerEra era))))
L.addrTxWitsL
                ((Set (WitVKey 'Witness (EraCrypto (LedgerEra era)))
  -> Identity (Set (WitVKey 'Witness StandardCrypto)))
 -> TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era)))
-> Set (WitVKey 'Witness StandardCrypto)
-> TxWits (LedgerEra era)
-> TxWits (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [WitVKey 'Witness StandardCrypto]
-> Set (WitVKey 'Witness StandardCrypto)
forall a. Ord a => [a] -> Set a
Set.fromList [WitVKey 'Witness StandardCrypto]
shelleyKeyWits
              TxWits (LedgerEra era)
-> (TxWits (LedgerEra era) -> TxWits (LedgerEra era))
-> TxWits (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (Set (BootstrapWitness (EraCrypto (LedgerEra era)))
 -> Identity (Set (BootstrapWitness (EraCrypto (LedgerEra era)))))
-> TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era))
(Set (BootstrapWitness (EraCrypto (LedgerEra era)))
 -> Identity (Set (BootstrapWitness StandardCrypto)))
-> TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era))
forall era.
EraTxWits era =>
Lens' (TxWits era) (Set (BootstrapWitness (EraCrypto era)))
Lens'
  (TxWits (LedgerEra era))
  (Set (BootstrapWitness (EraCrypto (LedgerEra era))))
L.bootAddrTxWitsL
                ((Set (BootstrapWitness (EraCrypto (LedgerEra era)))
  -> Identity (Set (BootstrapWitness StandardCrypto)))
 -> TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era)))
-> Set (BootstrapWitness StandardCrypto)
-> TxWits (LedgerEra era)
-> TxWits (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [BootstrapWitness StandardCrypto]
-> Set (BootstrapWitness StandardCrypto)
forall a. Ord a => [a] -> Set a
Set.fromList [BootstrapWitness StandardCrypto]
bootstrapWits
        signedTx :: Tx (LedgerEra era)
signedTx = Tx (LedgerEra era)
unsigned Tx (LedgerEra era)
-> (Tx (LedgerEra era) -> Tx (LedgerEra era)) -> Tx (LedgerEra era)
forall a b. a -> (a -> b) -> b
& (TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era)))
-> Tx (LedgerEra era) -> Identity (Tx (LedgerEra era))
forall era. EraTx era => Lens' (Tx era) (TxWits era)
Lens' (Tx (LedgerEra era)) (TxWits (LedgerEra era))
L.witsTxL ((TxWits (LedgerEra era) -> Identity (TxWits (LedgerEra era)))
 -> Tx (LedgerEra era) -> Identity (Tx (LedgerEra era)))
-> TxWits (LedgerEra era)
-> Tx (LedgerEra era)
-> Tx (LedgerEra era)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ (TxWits (LedgerEra era)
keyWits TxWits (LedgerEra era)
-> TxWits (LedgerEra era) -> TxWits (LedgerEra era)
forall a. Semigroup a => a -> a -> a
<> TxWits (LedgerEra era)
currentScriptWitnesses)
     in Tx (LedgerEra era)
signedTx

-- Compatibility related. Will be removed once the old api has been deprecated and deleted.

convertTxBodyToUnsignedTx
  :: HasCallStack => ShelleyBasedEra era -> TxBody era -> UnsignedTx era
convertTxBodyToUnsignedTx :: forall era.
HasCallStack =>
ShelleyBasedEra era -> TxBody era -> UnsignedTx era
convertTxBodyToUnsignedTx ShelleyBasedEra era
sbe TxBody era
txbody =
  CardanoEra era
-> UnsignedTx era -> (Era era -> UnsignedTx era) -> UnsignedTx era
forall (eon :: * -> *) era a.
Eon eon =>
CardanoEra era -> a -> (eon era -> a) -> a
forEraInEon
    (ShelleyBasedEra era -> CardanoEra era
forall era. ShelleyBasedEra era -> CardanoEra era
forall (eon :: * -> *) era.
ToCardanoEra eon =>
eon era -> CardanoEra era
toCardanoEra ShelleyBasedEra era
sbe)
    (String -> UnsignedTx era
forall a. HasCallStack => String -> a
error (String -> UnsignedTx era) -> String -> UnsignedTx era
forall a b. (a -> b) -> a -> b
$ String
"convertTxBodyToUnsignedTx: Error - unsupported era " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Doc AnsiStyle -> String
docToString (ShelleyBasedEra era -> Doc AnsiStyle
forall a ann. Pretty a => a -> Doc ann
forall ann. ShelleyBasedEra era -> Doc ann
pretty ShelleyBasedEra era
sbe))
    ( \Era era
w -> do
        let ShelleyTx ShelleyBasedEra era
_ Tx (ShelleyLedgerEra era)
unsignedLedgerTx = [KeyWitness era] -> TxBody era -> Tx era
forall era. [KeyWitness era] -> TxBody era -> Tx era
makeSignedTransaction [] TxBody era
txbody
        Tx (LedgerEra era) -> UnsignedTx era
forall era. Tx (LedgerEra era) -> UnsignedTx era
UnsignedTx (Tx (LedgerEra era) -> UnsignedTx era)
-> Tx (LedgerEra era) -> UnsignedTx era
forall a b. (a -> b) -> a -> b
$ Era era
-> (EraCommonConstraints era => Tx (LedgerEra era))
-> Tx (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
w Tx (ShelleyLedgerEra era)
Tx (LedgerEra era)
EraCommonConstraints era => Tx (LedgerEra era)
unsignedLedgerTx
    )