{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-deprecations #-}
module Cardano.Api.Experimental.Tx
(
UnsignedTx (..)
, SignedTx (..)
, MakeUnsignedTxError (..)
, makeUnsignedTx
, makeKeyWitness
, signTx
, convertTxBodyToUnsignedTx
, hashTxBody
, getUnsignedTxFee
, BodyContent (..)
, TxBodyContent
, SubTxBodyContent
, defaultTxBodyContent
, defaultSubTxBodyContent
, mkTxCertificates
, mkTxVotingProcedures
, mkTxProposalProcedures
, txIns
, txInsCollateral
, txInsReference
, txOuts
, txTotalCollateral
, txReturnCollateral
, txFee
, txValidityLowerBound
, txValidityUpperBound
, txMetadata
, txAuxScripts
, txExtraKeyWits
, txProtocolParams
, txWithdrawals
, txCertificates
, txMintValue
, txScriptValidity
, txProposalProcedures
, txVotingProcedures
, txCurrentTreasuryValue
, txTreasuryDonation
, txSupplementalDatums
, txGuards
, txSubTransactions
, txRequiredTopLevelGuards
, txDirectDeposits
, txAccountBalanceIntervals
, txStartingAccountBalanceIntervals
, subTxIns
, subTxInsReference
, subTxOuts
, subTxValidityLowerBound
, subTxValidityUpperBound
, subTxMetadata
, subTxAuxScripts
, subTxProtocolParams
, subTxWithdrawals
, subTxCertificates
, subTxMintValue
, subTxProposalProcedures
, subTxVotingProcedures
, subTxCurrentTreasuryValue
, subTxTreasuryDonation
, subTxSupplementalDatums
, subTxGuards
, subTxRequiredTopLevelGuards
, subTxDirectDeposits
, subTxAccountBalanceIntervals
, modTxOuts
, setTxAuxScripts
, setTxCertificates
, setTxCurrentTreasuryValue
, setTxIns
, setTxInsReference
, setTxMetadata
, setTxMintValue
, setTxOuts
, setTxProposalProcedures
, setTxProtocolParams
, setTxSupplementalDatums
, setTxTreasuryDonation
, setTxValidityLowerBound
, setTxValidityUpperBound
, setTxVotingProcedures
, setTxWithdrawals
, setTxGuards
, setTxRequiredTopLevelGuards
, setTxDirectDeposits
, setTxAccountBalanceIntervals
, setTxReturnCollateral
, setTxTotalCollateral
, setTxExtraKeyWits
, setTxFee
, setTxInsCollateral
, setTxScriptValidity
, setTxSubTransactions
, setTxSignedSubTransactions
, setTxStartingAccountBalanceIntervals
, UnsignedSubTx (..)
, SignedSubTx (..)
, makeUnsignedSubTx
, makeSubTxKeyWitness
, signSubTx
, makeSignedSubTx
, getUnsignedSubTxId
, getSignedSubTxId
, AsType (AsUnsignedSubTx, AsSignedSubTx)
, TxGuards
, ScriptGuardWitness (..)
, TxGuardsError (..)
, mkTxGuards
, emptyTxGuards
, TxCertificates (..)
, TxMintValue (..)
, TxOut (..)
, TxProposalProcedures (..)
, TxVotingProcedures (..)
, TxWithdrawals (..)
, TxReturnCollateral (..)
, TxTotalCollateral (..)
, TxExtraKeyWitnesses (..)
, TxInsReference (..)
, AnyWitness (..)
, getAnyWitnessScript
, getAnyWitnessReferenceInput
, getAnyWitnessPlutusLanguage
, getAnyWitnessScriptData
, TxScriptWitnessRequirements (..)
, Datum (..)
, getDatums
, extractDatumsAndHashes
, collectPlutusScriptHashes
, extractAllIndexedPlutusScriptWitnesses
, getTxScriptWitnessesRequirements
, obtainMonoidConstraint
, evaluateTransaction
, evaluateSignedTx
, TxEvaluationResult (..)
, evaluateTransactionExecutionUnits
, calculateMinimumUTxO
, makeTransactionBodyAutoBalance
, TxBodyErrorAutoBalance (..)
, TxFeeEstimationError (..)
, extractExecutionUnits
, getTxScriptWitnessRequirements
, extractWitnessableTxIns
, extractWitnessableMints
, extractWitnessableCertificates
, extractWitnessableWithdrawals
, extractWitnessableVotes
, extractWitnessableProposals
)
where
import Cardano.Api.Address (StakeCredential)
import Cardano.Api.Certificate.Internal (PoolId)
import Cardano.Api.Era.Internal.Core qualified as Api
import Cardano.Api.Era.Internal.Eon.ShelleyBasedEra
import Cardano.Api.Experimental.Era
import Cardano.Api.Experimental.Tx.Internal.AnyWitness
import Cardano.Api.Experimental.Tx.Internal.BodyContent
import Cardano.Api.Experimental.Tx.Internal.Fee
import Cardano.Api.Experimental.Tx.Internal.Guard
import Cardano.Api.Experimental.Tx.Internal.SubTransaction
import Cardano.Api.Experimental.Tx.Internal.TxScriptWitnessRequirements
import Cardano.Api.Experimental.Tx.Internal.Type
import Cardano.Api.HasTypeProxy (HasTypeProxy (..), Proxy, asType)
import Cardano.Api.Ledger.Internal.Reexport qualified as L
import Cardano.Api.Plutus.Internal.Script qualified as Api
import Cardano.Api.Pretty (docToString, pretty)
import Cardano.Api.Query.Internal.Type.QueryInMode (LedgerEpochInfo, SystemStart)
import Cardano.Api.Serialise.Raw
( SerialiseAsRawBytes (..)
, SerialiseAsRawBytesError (SerialiseAsRawBytesError)
)
import Cardano.Api.Tx.Internal.Body qualified as Api
import Cardano.Api.Tx.Internal.Sign
import Cardano.Ledger.Alonzo.Core qualified as Ledger
import Cardano.Ledger.Api qualified as L
import Cardano.Ledger.Binary qualified as Ledger
import Control.Exception (displayException)
import Data.Bifunctor (bimap)
import Data.ByteString.Lazy (fromStrict)
import Data.Map.Strict (Map)
import Data.Map.Strict qualified as Map
import Data.Set (Set)
import GHC.Stack
import Lens.Micro
getUnsignedTxFee :: UnsignedTx era -> L.Coin
getUnsignedTxFee :: forall era. UnsignedTx era -> Coin
getUnsignedTxFee (UnsignedTx Tx TopTx era
unsignedTx) =
let txbody :: TxBody TopTx era
txbody = Tx TopTx era
unsignedTx Tx TopTx era
-> Getting (TxBody TopTx era) (Tx TopTx era) (TxBody TopTx era)
-> TxBody TopTx era
forall s a. s -> Getting a s a -> a
^. Getting (TxBody TopTx era) (Tx TopTx era) (TxBody TopTx era)
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel). Lens' (Tx l era) (TxBody l era)
L.bodyTxL
in TxBody TopTx era
txbody TxBody TopTx era -> Getting Coin (TxBody TopTx era) Coin -> Coin
forall s a. s -> Getting a s a -> a
^. Getting Coin (TxBody TopTx era) Coin
forall era. EraTxBody era => Lens' (TxBody TopTx era) Coin
Lens' (TxBody TopTx era) Coin
L.feeTxBodyL
makeKeyWitness
:: HasCallStack
=> Era era
-> UnsignedTx (LedgerEra era)
-> ShelleyWitnessSigningKey
-> L.WitVKey L.Witness
makeKeyWitness :: forall era.
HasCallStack =>
Era era
-> UnsignedTx (LedgerEra era)
-> ShelleyWitnessSigningKey
-> WitVKey Witness
makeKeyWitness Era era
era (UnsignedTx Tx TopTx (LedgerEra era)
unsignedTx) ShelleyWitnessSigningKey
wsk =
Era era
-> (EraCommonConstraints era => WitVKey Witness) -> WitVKey Witness
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => WitVKey Witness) -> WitVKey Witness)
-> (EraCommonConstraints era => WitVKey Witness) -> WitVKey Witness
forall a b. (a -> b) -> a -> b
$
HasCallStack =>
Hash HASH EraIndependentTxBody
-> ShelleyWitnessSigningKey -> WitVKey Witness
Hash HASH EraIndependentTxBody
-> ShelleyWitnessSigningKey -> WitVKey Witness
makeShelleyKeyWitnessFromHash (TxBody TopTx (LedgerEra era) -> Hash HASH EraIndependentTxBody
forall (l :: TxLevel) era.
HashAnnotated (TxBody l era) EraIndependentTxBody =>
TxBody l era -> Hash HASH EraIndependentTxBody
hashTxBody (Tx TopTx (LedgerEra era)
unsignedTx Tx TopTx (LedgerEra era)
-> Getting
(TxBody TopTx (LedgerEra era))
(Tx TopTx (LedgerEra era))
(TxBody TopTx (LedgerEra era))
-> TxBody TopTx (LedgerEra era)
forall s a. s -> Getting a s a -> a
^. Getting
(TxBody TopTx (LedgerEra era))
(Tx TopTx (LedgerEra era))
(TxBody TopTx (LedgerEra era))
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel).
Lens' (Tx l (LedgerEra era)) (TxBody l (LedgerEra era))
L.bodyTxL)) ShelleyWitnessSigningKey
wsk
data SignedTx era
= L.EraTx (ShelleyLedgerEra era) => SignedTx (Ledger.Tx Ledger.TopTx (ShelleyLedgerEra era))
deriving instance Eq (SignedTx era)
deriving instance Show (SignedTx era)
instance HasTypeProxy era => HasTypeProxy (SignedTx era) where
data AsType (SignedTx era) = AsSignedTx (AsType era)
proxyToAsType :: Proxy (SignedTx era) -> AsType (SignedTx era)
proxyToAsType :: Proxy (SignedTx era) -> AsType (SignedTx era)
proxyToAsType Proxy (SignedTx era)
_ = AsType era -> AsType (SignedTx era)
forall era. AsType era -> AsType (SignedTx era)
AsSignedTx (forall t. HasTypeProxy t => AsType t
asType @era)
instance
( HasTypeProxy era
, L.EraTx (ShelleyLedgerEra era)
)
=> SerialiseAsRawBytes (SignedTx era)
where
serialiseToRawBytes :: SignedTx era -> ByteString
serialiseToRawBytes (SignedTx Tx TopTx (ShelleyLedgerEra era)
tx) =
Version -> Tx TopTx (ShelleyLedgerEra era) -> ByteString
forall a. EncCBOR a => Version -> a -> ByteString
Ledger.serialize' (forall era. Era era => Version
Ledger.eraProtVerHigh @(ShelleyLedgerEra era)) Tx TopTx (ShelleyLedgerEra era)
tx
deserialiseFromRawBytes :: AsType (SignedTx era)
-> ByteString -> Either SerialiseAsRawBytesError (SignedTx era)
deserialiseFromRawBytes AsType (SignedTx era)
_ =
(DecoderError -> SerialiseAsRawBytesError)
-> (Tx TopTx (ShelleyLedgerEra era) -> SignedTx era)
-> Either DecoderError (Tx TopTx (ShelleyLedgerEra era))
-> Either SerialiseAsRawBytesError (SignedTx era)
forall a b c d. (a -> b) -> (c -> d) -> Either a c -> Either b d
forall (p :: * -> * -> *) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap DecoderError -> SerialiseAsRawBytesError
wrapError Tx TopTx (ShelleyLedgerEra era) -> SignedTx era
forall era.
EraTx (ShelleyLedgerEra era) =>
Tx TopTx (ShelleyLedgerEra era) -> SignedTx era
SignedTx
(Either DecoderError (Tx TopTx (ShelleyLedgerEra era))
-> Either SerialiseAsRawBytesError (SignedTx era))
-> (ByteString
-> Either DecoderError (Tx TopTx (ShelleyLedgerEra era)))
-> ByteString
-> Either SerialiseAsRawBytesError (SignedTx era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version
-> Text
-> (forall s.
Decoder s (Annotator (Tx TopTx (ShelleyLedgerEra era))))
-> ByteString
-> Either DecoderError (Tx TopTx (ShelleyLedgerEra era))
forall a.
Version
-> Text
-> (forall s. Decoder s (Annotator a))
-> ByteString
-> Either DecoderError a
Ledger.decodeFullAnnotator
(forall era. Era era => Version
Ledger.eraProtVerHigh @(ShelleyLedgerEra era))
Text
"SignedTx"
Decoder s (Annotator (Tx TopTx (ShelleyLedgerEra era)))
forall s. Decoder s (Annotator (Tx TopTx (ShelleyLedgerEra era)))
forall a s. DecCBOR a => Decoder s a
Ledger.decCBOR
(ByteString
-> Either DecoderError (Tx TopTx (ShelleyLedgerEra era)))
-> (ByteString -> ByteString)
-> ByteString
-> Either DecoderError (Tx TopTx (ShelleyLedgerEra era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
fromStrict
where
wrapError
:: Ledger.DecoderError -> SerialiseAsRawBytesError
wrapError :: DecoderError -> SerialiseAsRawBytesError
wrapError = String -> SerialiseAsRawBytesError
SerialiseAsRawBytesError (String -> SerialiseAsRawBytesError)
-> (DecoderError -> String)
-> DecoderError
-> SerialiseAsRawBytesError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DecoderError -> String
forall e. Exception e => e -> String
displayException
signTx
:: Era era
-> [L.BootstrapWitness]
-> [L.WitVKey L.Witness]
-> UnsignedTx (LedgerEra era)
-> SignedTx era
signTx :: forall era.
Era era
-> [BootstrapWitness]
-> [WitVKey Witness]
-> UnsignedTx (LedgerEra era)
-> SignedTx era
signTx Era era
era [BootstrapWitness]
bootstrapWits [WitVKey Witness]
shelleyKeyWits (UnsignedTx Tx TopTx (LedgerEra era)
unsigned) =
Era era
-> (EraCommonConstraints era => SignedTx era) -> SignedTx era
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => SignedTx era) -> SignedTx era)
-> (EraCommonConstraints era => SignedTx era) -> SignedTx era
forall a b. (a -> b) -> a -> b
$
Tx TopTx (ShelleyLedgerEra era) -> SignedTx era
forall era.
EraTx (ShelleyLedgerEra era) =>
Tx TopTx (ShelleyLedgerEra era) -> SignedTx era
SignedTx (Tx TopTx (ShelleyLedgerEra era) -> SignedTx era)
-> Tx TopTx (ShelleyLedgerEra era) -> SignedTx era
forall a b. (a -> b) -> a -> b
$
[BootstrapWitness]
-> [WitVKey Witness]
-> Tx TopTx (ShelleyLedgerEra era)
-> Tx TopTx (ShelleyLedgerEra era)
forall era (l :: TxLevel).
EraTx era =>
[BootstrapWitness] -> [WitVKey Witness] -> Tx l era -> Tx l era
addKeyWitnesses [BootstrapWitness]
bootstrapWits [WitVKey Witness]
shelleyKeyWits Tx TopTx (ShelleyLedgerEra era)
Tx TopTx (LedgerEra era)
unsigned
evaluateSignedTx
:: forall era
. IsEra era
=> SystemStart
-> LedgerEpochInfo
-> L.PParams (LedgerEra era)
-> Set PoolId
-> Map StakeCredential L.Coin
-> L.UTxO (LedgerEra era)
-> SignedTx era
-> TxEvaluationResult (LedgerEra era)
evaluateSignedTx :: forall era.
IsEra era =>
SystemStart
-> LedgerEpochInfo
-> PParams (LedgerEra era)
-> Set PoolId
-> Map StakeCredential Coin
-> UTxO (LedgerEra era)
-> SignedTx era
-> TxEvaluationResult (LedgerEra era)
evaluateSignedTx SystemStart
systemStart LedgerEpochInfo
epochInfo PParams (LedgerEra era)
protocolParams Set PoolId
poolIds Map StakeCredential Coin
stakeDelegDeposits UTxO (LedgerEra era)
utxo (SignedTx Tx TopTx (ShelleyLedgerEra era)
tx) =
Era era
-> (EraCommonConstraints era => TxEvaluationResult (LedgerEra era))
-> TxEvaluationResult (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints (forall era. IsEra era => Era era
useEra @era) ((EraCommonConstraints era => TxEvaluationResult (LedgerEra era))
-> TxEvaluationResult (LedgerEra era))
-> (EraCommonConstraints era => TxEvaluationResult (LedgerEra era))
-> TxEvaluationResult (LedgerEra era)
forall a b. (a -> b) -> a -> b
$
SystemStart
-> LedgerEpochInfo
-> PParams (LedgerEra era)
-> Set PoolId
-> Map StakeCredential Coin
-> UTxO (LedgerEra era)
-> Tx TopTx (LedgerEra era)
-> TxEvaluationResult (LedgerEra era)
forall era.
IsEra era =>
SystemStart
-> LedgerEpochInfo
-> PParams (LedgerEra era)
-> Set PoolId
-> Map StakeCredential Coin
-> UTxO (LedgerEra era)
-> Tx TopTx (LedgerEra era)
-> TxEvaluationResult (LedgerEra era)
evaluateTransaction
SystemStart
systemStart
LedgerEpochInfo
epochInfo
PParams (LedgerEra era)
protocolParams
Set PoolId
poolIds
Map StakeCredential Coin
stakeDelegDeposits
UTxO (LedgerEra era)
utxo
Tx TopTx (ShelleyLedgerEra era)
Tx TopTx (LedgerEra era)
tx
convertTxBodyToUnsignedTx
:: HasCallStack => ShelleyBasedEra era -> TxBody era -> UnsignedTx (LedgerEra era)
convertTxBodyToUnsignedTx :: forall era.
HasCallStack =>
ShelleyBasedEra era -> TxBody era -> UnsignedTx (LedgerEra era)
convertTxBodyToUnsignedTx ShelleyBasedEra era
sbe TxBody era
txbody =
CardanoEra era
-> UnsignedTx (LedgerEra era)
-> (Era era -> UnsignedTx (LedgerEra era))
-> UnsignedTx (LedgerEra era)
forall (eon :: * -> *) era a.
Eon eon =>
CardanoEra era -> a -> (eon era -> a) -> a
Api.forEraInEon
(ShelleyBasedEra era -> CardanoEra era
forall era. ShelleyBasedEra era -> CardanoEra era
forall (eon :: * -> *) era.
ToCardanoEra eon =>
eon era -> CardanoEra era
Api.toCardanoEra ShelleyBasedEra era
sbe)
(String -> UnsignedTx (LedgerEra era)
forall a. HasCallStack => String -> a
error (String -> UnsignedTx (LedgerEra era))
-> String -> UnsignedTx (LedgerEra 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 TopTx (ShelleyLedgerEra era)
unsignedLedgerTx = [KeyWitness era] -> TxBody era -> Tx era
forall era. [KeyWitness era] -> TxBody era -> Tx era
makeSignedTransaction [] TxBody era
txbody
Era era
-> (EraCommonConstraints era => UnsignedTx (LedgerEra era))
-> UnsignedTx (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
w ((EraCommonConstraints era => UnsignedTx (LedgerEra era))
-> UnsignedTx (LedgerEra era))
-> (EraCommonConstraints era => UnsignedTx (LedgerEra era))
-> UnsignedTx (LedgerEra era)
forall a b. (a -> b) -> a -> b
$ Tx TopTx (LedgerEra era) -> UnsignedTx (LedgerEra era)
forall era. EraTx era => Tx TopTx era -> UnsignedTx era
UnsignedTx Tx TopTx (ShelleyLedgerEra era)
Tx TopTx (LedgerEra era)
unsignedLedgerTx
)
collectPlutusScriptHashes
:: forall era
. IsEra era
=> UnsignedTx (LedgerEra era)
-> L.UTxO (LedgerEra era)
-> Map Api.ScriptWitnessIndex Api.ScriptHash
collectPlutusScriptHashes :: forall era.
IsEra era =>
UnsignedTx (LedgerEra era)
-> UTxO (LedgerEra era) -> Map ScriptWitnessIndex ScriptHash
collectPlutusScriptHashes (UnsignedTx Tx TopTx (LedgerEra era)
tx) UTxO (LedgerEra era)
utxo =
let AlonzoScriptsNeeded (LedgerEra era)
sNeeded :: L.AlonzoScriptsNeeded (LedgerEra era) = Era era
-> (EraCommonConstraints era =>
AlonzoScriptsNeeded (LedgerEra era))
-> AlonzoScriptsNeeded (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints (forall era. IsEra era => Era era
useEra @era) ((EraCommonConstraints era => AlonzoScriptsNeeded (LedgerEra era))
-> AlonzoScriptsNeeded (LedgerEra era))
-> (EraCommonConstraints era =>
AlonzoScriptsNeeded (LedgerEra era))
-> AlonzoScriptsNeeded (LedgerEra era)
forall a b. (a -> b) -> a -> b
$ UTxO (LedgerEra era)
-> TxBody TopTx (LedgerEra era) -> ScriptsNeeded (LedgerEra era)
forall era (t :: TxLevel).
EraUTxO era =>
UTxO era -> TxBody t era -> ScriptsNeeded era
forall (t :: TxLevel).
UTxO (LedgerEra era)
-> TxBody t (LedgerEra era) -> ScriptsNeeded (LedgerEra era)
L.getScriptsNeeded UTxO (LedgerEra era)
utxo (Tx TopTx (LedgerEra era)
tx Tx TopTx (LedgerEra era)
-> Getting
(TxBody TopTx (LedgerEra era))
(Tx TopTx (LedgerEra era))
(TxBody TopTx (LedgerEra era))
-> TxBody TopTx (LedgerEra era)
forall s a. s -> Getting a s a -> a
^. Getting
(TxBody TopTx (LedgerEra era))
(Tx TopTx (LedgerEra era))
(TxBody TopTx (LedgerEra era))
forall era (l :: TxLevel).
EraTx era =>
Lens' (Tx l era) (TxBody l era)
forall (l :: TxLevel).
Lens' (Tx l (LedgerEra era)) (TxBody l (LedgerEra era))
L.bodyTxL)
in forall era.
IsEra era =>
AlonzoScriptsNeeded (LedgerEra era)
-> Map ScriptWitnessIndex ScriptHash
getPurposes @era AlonzoScriptsNeeded (LedgerEra era)
sNeeded
getPurposes
:: forall era
. IsEra era
=> L.AlonzoScriptsNeeded (LedgerEra era)
-> Map Api.ScriptWitnessIndex Api.ScriptHash
getPurposes :: forall era.
IsEra era =>
AlonzoScriptsNeeded (LedgerEra era)
-> Map ScriptWitnessIndex ScriptHash
getPurposes (L.AlonzoScriptsNeeded [(PlutusPurpose AsIxItem (LedgerEra era), ScriptHash)]
purposes) =
[(ScriptWitnessIndex, ScriptHash)]
-> Map ScriptWitnessIndex ScriptHash
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(ScriptWitnessIndex, ScriptHash)]
-> Map ScriptWitnessIndex ScriptHash)
-> [(ScriptWitnessIndex, ScriptHash)]
-> Map ScriptWitnessIndex ScriptHash
forall a b. (a -> b) -> a -> b
$
((PlutusPurpose AsIxItem (LedgerEra era), ScriptHash)
-> (ScriptWitnessIndex, ScriptHash))
-> [(PlutusPurpose AsIxItem (LedgerEra era), ScriptHash)]
-> [(ScriptWitnessIndex, ScriptHash)]
forall a b. (a -> b) -> [a] -> [b]
Prelude.map
( (PlutusPurpose AsIxItem (LedgerEra era) -> ScriptWitnessIndex)
-> (ScriptHash -> ScriptHash)
-> (PlutusPurpose AsIxItem (LedgerEra era), ScriptHash)
-> (ScriptWitnessIndex, ScriptHash)
forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
forall (p :: * -> * -> *) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap
( Era era
-> (EraCommonConstraints era =>
PlutusPurpose AsIxItem (LedgerEra era) -> ScriptWitnessIndex)
-> PlutusPurpose AsIxItem (LedgerEra era)
-> ScriptWitnessIndex
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints (forall era. IsEra era => Era era
useEra @era) ((EraCommonConstraints era =>
PlutusPurpose AsIxItem (LedgerEra era) -> ScriptWitnessIndex)
-> PlutusPurpose AsIxItem (LedgerEra era) -> ScriptWitnessIndex)
-> (EraCommonConstraints era =>
PlutusPurpose AsIxItem (LedgerEra era) -> ScriptWitnessIndex)
-> PlutusPurpose AsIxItem (LedgerEra era)
-> ScriptWitnessIndex
forall a b. (a -> b) -> a -> b
$
AlonzoEraOnwards era
-> PlutusPurpose AsIx (ShelleyLedgerEra era) -> ScriptWitnessIndex
forall era.
AlonzoEraOnwards era
-> PlutusPurpose AsIx (ShelleyLedgerEra era) -> ScriptWitnessIndex
Api.toScriptIndex (Era era -> AlonzoEraOnwards era
forall era. Era era -> AlonzoEraOnwards era
forall a (f :: a -> *) (g :: a -> *) (era :: a).
Convert f g =>
f era -> g era
convert (forall era. IsEra era => Era era
useEra @era))
(PlutusPurpose AsIx (LedgerEra era) -> ScriptWitnessIndex)
-> (PlutusPurpose AsIxItem (LedgerEra era)
-> PlutusPurpose AsIx (LedgerEra era))
-> PlutusPurpose AsIxItem (LedgerEra era)
-> ScriptWitnessIndex
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PlutusPurpose AsIxItem (LedgerEra era)
-> PlutusPurpose AsIx (LedgerEra era)
forall era.
IsEra era =>
PlutusPurpose AsIxItem (LedgerEra era)
-> PlutusPurpose AsIx (LedgerEra era)
purposeAsIxItemToAsIx
)
ScriptHash -> ScriptHash
Api.fromShelleyScriptHash
)
[(PlutusPurpose AsIxItem (LedgerEra era), ScriptHash)]
purposes
purposeAsIxItemToAsIx
:: forall era
. IsEra era
=> L.PlutusPurpose L.AsIxItem (LedgerEra era)
-> L.PlutusPurpose L.AsIx (LedgerEra era)
purposeAsIxItemToAsIx :: forall era.
IsEra era =>
PlutusPurpose AsIxItem (LedgerEra era)
-> PlutusPurpose AsIx (LedgerEra era)
purposeAsIxItemToAsIx PlutusPurpose AsIxItem (LedgerEra era)
purpose =
Era era
-> (EraCommonConstraints era => PlutusPurpose AsIx (LedgerEra era))
-> PlutusPurpose AsIx (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints (forall era. IsEra era => Era era
useEra @era) ((EraCommonConstraints era => PlutusPurpose AsIx (LedgerEra era))
-> PlutusPurpose AsIx (LedgerEra era))
-> (EraCommonConstraints era => PlutusPurpose AsIx (LedgerEra era))
-> PlutusPurpose AsIx (LedgerEra era)
forall a b. (a -> b) -> a -> b
$ (forall ix it. AsIxItem ix it -> AsIx ix it)
-> PlutusPurpose AsIxItem (LedgerEra era)
-> PlutusPurpose AsIx (LedgerEra era)
forall era (g :: * -> * -> *) (f :: * -> * -> *).
AlonzoEraScript era =>
(forall ix it. g ix it -> f ix it)
-> PlutusPurpose g era -> PlutusPurpose f era
forall (g :: * -> * -> *) (f :: * -> * -> *).
(forall ix it. g ix it -> f ix it)
-> PlutusPurpose g (LedgerEra era)
-> PlutusPurpose f (LedgerEra era)
L.hoistPlutusPurpose AsIxItem ix it -> AsIx ix it
forall ix it. AsIxItem ix it -> AsIx ix it
L.toAsIx PlutusPurpose AsIxItem (LedgerEra era)
purpose